diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 612d01d89..3679e5db9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -1,7 +1,7 @@ --- name: 🐛 Bug Report description: Report a reproducible bug in the current release of NetBox -labels: ["type: bug"] +labels: ["type: bug", "status: needs triage"] body: - type: markdown attributes: @@ -26,7 +26,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v3.7.4 + placeholder: v3.7.7 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/documentation_change.yaml b/.github/ISSUE_TEMPLATE/documentation_change.yaml index cb097d579..b5a970782 100644 --- a/.github/ISSUE_TEMPLATE/documentation_change.yaml +++ b/.github/ISSUE_TEMPLATE/documentation_change.yaml @@ -1,7 +1,7 @@ --- name: 📖 Documentation Change description: Suggest an addition or modification to the NetBox documentation -labels: ["type: documentation"] +labels: ["type: documentation", "status: needs triage"] body: - type: dropdown attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 8eb47180d..0cf522960 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,7 +1,7 @@ --- name: ✨ Feature Request description: Propose a new NetBox feature or enhancement -labels: ["type: feature"] +labels: ["type: feature", "status: needs triage"] body: - type: markdown attributes: @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v3.7.4 + placeholder: v3.7.7 validations: required: true - type: dropdown diff --git a/.github/workflows/auto-assign-issue.yml b/.github/workflows/auto-assign-issue.yml new file mode 100644 index 000000000..e32e23c84 --- /dev/null +++ b/.github/workflows/auto-assign-issue.yml @@ -0,0 +1,21 @@ +# auto-assign-issue (https://github.com/marketplace/actions/auto-assign-issue) +name: Issue assignment + +on: + issues: + types: [opened] + +permissions: + issues: write + +jobs: + auto-assign: + runs-on: ubuntu-latest + steps: + - uses: pozil/auto-assign-issue@v1 + if: "contains(github.event.issue.labels.*.name, 'status: needs triage')" + with: + # Weighted assignments + assignees: arthanson:3, jeffgdotorg:3, jeremystretch:3, abhi1693, DanSheps + numOfAssignee: 1 + abortIfPreviousAssignees: true diff --git a/.github/workflows/stale.yml b/.github/workflows/close-stale-issues.yml similarity index 96% rename from .github/workflows/stale.yml rename to .github/workflows/close-stale-issues.yml index 22de146a2..a1bbb0b7e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/close-stale-issues.yml @@ -1,5 +1,5 @@ # close-stale-issues (https://github.com/marketplace/actions/close-stale-issues) -name: 'Close stale issues/PRs' +name: Close stale issues/PRs on: schedule: @@ -12,10 +12,9 @@ permissions: jobs: stale: - runs-on: ubuntu-latest steps: - - uses: actions/stale@v8 + - uses: actions/stale@v9 with: close-issue-message: > This issue has been automatically closed due to lack of activity. In an diff --git a/.github/workflows/lock.yml b/.github/workflows/lock-threads.yml similarity index 95% rename from .github/workflows/lock.yml rename to .github/workflows/lock-threads.yml index ad3bf5d75..0f3636784 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock-threads.yml @@ -1,5 +1,5 @@ # lock-threads (https://github.com/marketplace/actions/lock-threads) -name: 'Lock threads' +name: Lock threads on: schedule: diff --git a/README.md b/README.md index a81e41854..8d2efed23 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ NetBox automatically logs the creation, modification, and deletion of all manage

NetBox Cloud
- Looking for an enterprise solution? Check out NetBox Cloud! + Looking for a managed solution? Check out NetBox Cloud or NetBox Enterprise!

## Get Involved diff --git a/base_requirements.txt b/base_requirements.txt index 642450cf8..8971ebe1e 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -61,7 +61,8 @@ django-timezone-field # A REST API framework for Django projects # https://www.django-rest-framework.org/community/release-notes/ -djangorestframework +# Pinned to 3.14 for NetBox v3.7 +djangorestframework<3.15 # Sane and flexible OpenAPI 3 schema generation for Django REST framework. # https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst diff --git a/contrib/generated_schema.json b/contrib/generated_schema.json index 1164f2e48..b6632dd4c 100644 --- a/contrib/generated_schema.json +++ b/contrib/generated_schema.json @@ -1,5 +1,7 @@ { "type": "object", + "$id": "urn:devicetype-library:generated-schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "definitions": { "airflow": { diff --git a/contrib/gunicorn.py b/contrib/gunicorn.py index 89d6943b4..4b2b7c6b0 100644 --- a/contrib/gunicorn.py +++ b/contrib/gunicorn.py @@ -14,3 +14,7 @@ timeout = 120 # The maximum number of requests a worker can handle before being respawned max_requests = 5000 max_requests_jitter = 500 + +# Uncomment this line to accept HTTP headers containing underscores, e.g. for remote +# authentication support. See https://docs.gunicorn.org/en/stable/settings.html#header-map +# header-map = 'dangerous' diff --git a/docs/_theme/main.html b/docs/_theme/main.html index 3ff44b9cb..4dfc4e14e 100644 --- a/docs/_theme/main.html +++ b/docs/_theme/main.html @@ -2,8 +2,8 @@ {% block site_meta %} {{ super() }} - {# Disable search indexing unless we're building for ReadTheDocs (see #10496) #} - {% if page.canonical_url != 'https://docs.netbox.dev/' %} + {# Disable search indexing unless we're building for ReadTheDocs #} + {% if not config.extra.readthedocs %} {% endif %} {% endblock %} diff --git a/docs/administration/authentication/overview.md b/docs/administration/authentication/overview.md index f81a50c0b..0c8858b2f 100644 --- a/docs/administration/authentication/overview.md +++ b/docs/administration/authentication/overview.md @@ -26,7 +26,10 @@ REMOTE_AUTH_BACKEND = 'netbox.authentication.RemoteUserBackend' Another option for remote authentication in NetBox is to enable HTTP header-based user assignment. The front end HTTP server (e.g. nginx or Apache) performs client authentication as a process external to NetBox, and passes information about the authenticated user via HTTP headers. By default, the user is assigned via the `REMOTE_USER` header, but this can be customized via the `REMOTE_AUTH_HEADER` configuration parameter. -Optionally, user profile information can be supplied by `REMOTE_USER_FIRST_NAME`, `REMOTE_USER_LAST_NAME` and `REMOTE_USER_EMAIL` headers. These are saved to the users profile during the authentication process. These headers can be customized like the `REMOTE_USER` header. +Optionally, user profile information can be supplied by `REMOTE_USER_FIRST_NAME`, `REMOTE_USER_LAST_NAME` and `REMOTE_USER_EMAIL` headers. These are saved to the user's profile during the authentication process. These headers can be customized like the `REMOTE_USER` header. + +!!! warning Verify Header Compatibility + Some WSGI servers may drop headers which contain unsupported characters. For instance, gunicorn v22.0 and later silently drops HTTP headers containing underscores. This behavior can be disabled by changing gunicorn's [`header_map`](https://docs.gunicorn.org/en/stable/settings.html#header-map) setting to `dangerous`. ### Single Sign-On (SSO) diff --git a/docs/configuration/remote-authentication.md b/docs/configuration/remote-authentication.md index e7fe56a09..5f28d987f 100644 --- a/docs/configuration/remote-authentication.md +++ b/docs/configuration/remote-authentication.md @@ -85,6 +85,9 @@ Default: `'HTTP_REMOTE_USER'` When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the currently authenticated user. For example, to use the request header `X-Remote-User` it needs to be set to `HTTP_X_REMOTE_USER`. (Requires `REMOTE_AUTH_ENABLED`.) +!!! warning Verify Header Compatibility + Some WSGI servers may drop headers which contain unsupported characters. For instance, gunicorn v22.0 and later silently drops HTTP headers containing underscores. This behavior can be disabled by changing gunicorn's [`header_map`](https://docs.gunicorn.org/en/stable/settings.html#header-map) setting to `dangerous`. + --- ## REMOTE_AUTH_USER_EMAIL diff --git a/docs/configuration/security.md b/docs/configuration/security.md index 2ae92285f..9de09ceda 100644 --- a/docs/configuration/security.md +++ b/docs/configuration/security.md @@ -183,6 +183,30 @@ The view name or URL to which a user is redirected after logging out. --- +## SECURE_HSTS_INCLUDE_SUBDOMAINS + +Default: False + +If true, the `includeSubDomains` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to apply the HSTS policy to all subdomains of the current domain. + +--- + +## SECURE_HSTS_PRELOAD + +Default: False + +If true, the `preload` directive will be included in the HTTP Strict Transport Security (HSTS) header. This directive instructs the browser to preload the site in HTTPS. Browsers that use the HSTS preload list will force the site to be accessed via HTTPS even if the user types HTTP in the address bar. + +--- + +## SECURE_HSTS_SECONDS + +Default: 0 + +If set to a non-zero integer value, the SecurityMiddleware sets the HTTP Strict Transport Security (HSTS) header on all responses that do not already have it. This will instruct the browser that the website must be accessed via HTTPS, blocking any HTTP request. + +--- + ## SECURE_SSL_REDIRECT Default: False diff --git a/docs/configuration/system.md b/docs/configuration/system.md index 806839778..28c09444b 100644 --- a/docs/configuration/system.md +++ b/docs/configuration/system.md @@ -16,10 +16,7 @@ BASE_PATH = 'netbox/' Default: `en-us` (US English) -Defines the default preferred language/locale for requests that do not specify one. This is used to alter e.g. the display of dates and numbers to fit the user's locale. See [this list](http://www.i18nguy.com/unicode/language-identifiers.html) of standard language codes. (This parameter maps to Django's [`LANGUAGE_CODE`](https://docs.djangoproject.com/en/stable/ref/settings/#language-code) internal setting.) - -!!! note - Altering this parameter will *not* change the language used in NetBox. We hope to provide translation support in a future NetBox release. +Defines the default preferred language/locale for requests that do not specify one. (This parameter maps to Django's [`LANGUAGE_CODE`](https://docs.djangoproject.com/en/stable/ref/settings/#language-code) internal setting.) --- diff --git a/docs/customization/custom-scripts.md b/docs/customization/custom-scripts.md index c68bc21f1..76ca7130f 100644 --- a/docs/customization/custom-scripts.md +++ b/docs/customization/custom-scripts.md @@ -285,6 +285,14 @@ An IPv4 or IPv6 network with a mask. Returns a `netaddr.IPNetwork` object. Two a * `min_prefix_length` - Minimum length of the mask * `max_prefix_length` - Maximum length of the mask +### DateVar + +A calendar date. Returns a `datetime.date` object. + +### DateTimeVar + +A complete date & time. Returns a `datetime.datetime` object. + ## Running Custom Scripts !!! note diff --git a/docs/integrations/rest-api.md b/docs/integrations/rest-api.md index 03a34abf4..1ba00958f 100644 --- a/docs/integrations/rest-api.md +++ b/docs/integrations/rest-api.md @@ -85,13 +85,19 @@ Each model generally has two views associated with it: a list view and a detail * `/api/dcim/devices/` - List existing devices or create a new device * `/api/dcim/devices/123/` - Retrieve, update, or delete the device with ID 123 -Lists of objects can be filtered using a set of query parameters. For example, to find all interfaces belonging to the device with ID 123: +Lists of objects can be filtered and ordered using a set of query parameters. For example, to find all interfaces belonging to the device with ID 123: ``` GET /api/dcim/interfaces/?device_id=123 ``` -See the [filtering documentation](../reference/filtering.md) for more details. +An optional `ordering` parameter can be used to define how to sort the results. Building off the previous example, to sort all the interfaces in reverse order of creation (newest to oldest) for a device with ID 123: + +``` +GET /api/dcim/interfaces/?device_id=123&ordering=-created +``` + +See the [filtering documentation](../reference/filtering.md) for more details on topics related to filtering, ordering and lookup expressions. ## Serialization @@ -647,18 +653,20 @@ Note that we are _not_ passing an existing REST API token with this request. If { "id": 6, "url": "https://netbox/api/users/tokens/6/", - "display": "3c9cb9 (hankhill)", + "display": "**********************************3c9cb9", "user": { "id": 2, "url": "https://netbox/api/users/users/2/", "display": "hankhill", "username": "hankhill" }, - "created": "2021-06-11T20:09:13.339367Z", + "created": "2024-03-11T20:09:13.339367Z", "expires": null, + "last_used": null, "key": "9fc9b897abec9ada2da6aec9dbc34596293c9cb9", "write_enabled": true, - "description": "" + "description": "", + "allowed_ips": [] } ``` diff --git a/docs/plugins/development/forms.md b/docs/plugins/development/forms.md index 31751855e..1f844dc1b 100644 --- a/docs/plugins/development/forms.md +++ b/docs/plugins/development/forms.md @@ -62,7 +62,7 @@ class MyModelImportForm(NetBoxModelImportForm): site = CSVModelChoiceField( queryset=Site.objects.all(), to_field_name='name', - help_text='Assigned site' + help_text=_('Assigned site') ) class Meta: diff --git a/docs/plugins/development/index.md b/docs/plugins/development/index.md index 4db1d5ef6..4d026cacd 100644 --- a/docs/plugins/development/index.md +++ b/docs/plugins/development/index.md @@ -3,6 +3,9 @@ !!! tip "Plugins Development Tutorial" Just getting started with plugins? Check out our [**NetBox Plugin Tutorial**](https://github.com/netbox-community/netbox-plugin-tutorial) on GitHub! This in-depth guide will walk you through the process of creating an entire plugin from scratch. It even includes a companion [demo plugin repo](https://github.com/netbox-community/netbox-plugin-demo) to ensure you can jump in at any step along the way. This will get you up and running with plugins in no time! +!!! tip "Plugin Certification Program" + NetBox Labs offers a [**Plugin Certification Program**](https://github.com/netbox-community/netbox/wiki/Plugin-Certification-Program) for plugin developers interested in establishing a co-maintainer relationship. The program aims to assure ongoing compatibility, maintainability, and commercial supportability of key plugins. + NetBox can be extended to support additional data models and functionality through the use of plugins. A plugin is essentially a self-contained [Django app](https://docs.djangoproject.com/en/stable/) which gets installed alongside NetBox to provide custom functionality. Multiple plugins can be installed in a single NetBox instance, and each plugin can be enabled and configured independently. !!! info "Django Development" diff --git a/docs/plugins/development/views.md b/docs/plugins/development/views.md index 1730b0ebd..3c13a6fcb 100644 --- a/docs/plugins/development/views.md +++ b/docs/plugins/development/views.md @@ -157,7 +157,7 @@ These views are provided to enable or enhance certain NetBox model features, suc ### Additional Tabs -Plugins can "attach" a custom view to a core NetBox model by registering it with `register_model_view()`. To include a tab for this view within the NetBox UI, declare a TabView instance named `tab`: +Plugins can "attach" a custom view to a core NetBox model by registering it with `register_model_view()`. To include a tab for this view within the NetBox UI, declare a TabView instance named `tab`, and add it to the template context dict: ```python from dcim.models import Site @@ -173,6 +173,16 @@ class MyView(generic.ObjectView): badge=lambda obj: Stuff.objects.filter(site=obj).count(), permission='myplugin.view_stuff' ) + + def get(self, request, pk): + ... + return render( + request, + "myplugin/mytabview.html", + context={ + "tab": self.tab, + }, + ) ``` ::: utilities.views.register_model_view diff --git a/docs/plugins/index.md b/docs/plugins/index.md index 0658ed402..0f502c5d8 100644 --- a/docs/plugins/index.md +++ b/docs/plugins/index.md @@ -2,6 +2,8 @@ Plugins are packaged [Django](https://docs.djangoproject.com/) apps that can be installed alongside NetBox to provide custom functionality not present in the core application. Plugins can introduce their own models and views, but cannot interfere with existing components. A NetBox user may opt to install plugins provided by the community or build his or her own. +Please see the documented instructions for [installing a plugin](./installation.md) to get started. + ## Capabilities The NetBox plugin architecture allows for the following: @@ -23,122 +25,3 @@ Either by policy or by technical limitation, the interaction of plugins with Net * **Override core templates.** Plugins can inject additional content where supported, but may not manipulate or remove core content. * **Modify core settings.** A configuration registry is provided for plugins, however they cannot alter or delete the core configuration. * **Disable core components.** Plugins are not permitted to disable or hide core NetBox components. - -## Installing Plugins - -The instructions below detail the process for installing and enabling a NetBox plugin. - -### Install Package - -Download and install the plugin package per its installation instructions. Plugins published via PyPI are typically installed using pip. Be sure to install the plugin within NetBox's virtual environment. - -```no-highlight -$ source /opt/netbox/venv/bin/activate -(venv) $ pip install -``` - -Alternatively, you may wish to install the plugin manually by running `python setup.py install`. If you are developing a plugin and want to install it only temporarily, run `python setup.py develop` instead. - -### Enable the Plugin - -In `configuration.py`, add the plugin's name to the `PLUGINS` list: - -```python -PLUGINS = [ - 'plugin_name', -] -``` - -### Configure Plugin - -If the plugin requires any configuration, define it in `configuration.py` under the `PLUGINS_CONFIG` parameter. The available configuration parameters should be detailed in the plugin's README file. - -```no-highlight -PLUGINS_CONFIG = { - 'plugin_name': { - 'foo': 'bar', - 'buzz': 'bazz' - } -} -``` - -### Run Database Migrations - -If the plugin introduces new database models, run the provided schema migrations: - -```no-highlight -(venv) $ cd /opt/netbox/netbox/ -(venv) $ python3 manage.py migrate -``` - -### Collect Static Files - -Plugins may package static files to be served directly by the HTTP front end. Ensure that these are copied to the static root directory with the `collectstatic` management command: - -```no-highlight -(venv) $ cd /opt/netbox/netbox/ -(venv) $ python3 manage.py collectstatic -``` - -### Restart WSGI Service - -Restart the WSGI service to load the new plugin: - -```no-highlight -# sudo systemctl restart netbox -``` - -## Removing Plugins - -Follow these steps to completely remove a plugin. - -### Update Configuration - -Remove the plugin from the `PLUGINS` list in `configuration.py`. Also remove any relevant configuration parameters from `PLUGINS_CONFIG`. - -### Remove the Python Package - -Use `pip` to remove the installed plugin: - -```no-highlight -$ source /opt/netbox/venv/bin/activate -(venv) $ pip uninstall -``` - -### Restart WSGI Service - -Restart the WSGI service: - -```no-highlight -# sudo systemctl restart netbox -``` - -### Drop Database Tables - -!!! note - This step is necessary only for plugin which have created one or more database tables (generally through the introduction of new models). Check your plugin's documentation if unsure. - -Enter the PostgreSQL database shell to determine if the plugin has created any SQL tables. Substitute `pluginname` in the example below for the name of the plugin being removed. (You can also run the `\dt` command without a pattern to list _all_ tables.) - -```no-highlight -netbox=> \dt pluginname_* - List of relations - List of relations - Schema | Name | Type | Owner ---------+----------------+-------+-------- - public | pluginname_foo | table | netbox - public | pluginname_bar | table | netbox -(2 rows) -``` - -!!! warning - Exercise extreme caution when removing tables. Users are strongly encouraged to perform a backup of their database immediately before taking these actions. - -Drop each of the listed tables to remove it from the database: - -```no-highlight -netbox=> DROP TABLE pluginname_foo; -DROP TABLE -netbox=> DROP TABLE pluginname_bar; -DROP TABLE -``` diff --git a/docs/plugins/installation.md b/docs/plugins/installation.md new file mode 100644 index 000000000..ffea5d42d --- /dev/null +++ b/docs/plugins/installation.md @@ -0,0 +1,68 @@ +# Installing a Plugin + +!!! warning + The instructions below detail the general process for installing and configuring a NetBox plugin. However, each plugin is different and may require additional tasks or modifications to the steps below. Always consult the documentation for a specific plugin **before** attempting to install it. + +## Install the Python Package + +Download and install the plugin's Python package per its installation instructions. Plugins published via PyPI are typically installed using the [`pip`](https://packaging.python.org/en/latest/tutorials/installing-packages/) command line utility. Be sure to install the plugin within NetBox's virtual environment. + +```no-highlight +$ source /opt/netbox/venv/bin/activate +(venv) $ pip install +``` + +Alternatively, you may wish to install the plugin manually by running `python setup.py install`. If you are developing a plugin and want to install it only temporarily, run `python setup.py develop` instead. + +## Enable the Plugin + +In `configuration.py`, add the plugin's name to the `PLUGINS` list: + +```python +PLUGINS = [ + # ... + 'plugin_name', +] +``` + +## Configure the Plugin + +If the plugin requires any configuration, define it in `configuration.py` under the `PLUGINS_CONFIG` parameter. The available configuration parameters should be detailed in the plugin's `README` file or other documentation. + +```no-highlight +PLUGINS_CONFIG = { + 'plugin_name': { + 'foo': 'bar', + 'buzz': 'bazz' + } +} +``` + +## Run Database Migrations + +If the plugin introduces new database models, run the provided schema migrations: + +```no-highlight +(venv) $ cd /opt/netbox/netbox/ +(venv) $ python3 manage.py migrate +``` + +!!! tip + It's okay to run the `migrate` management command even if the plugin does not include any migration files. + +## Collect Static Files + +Plugins may package static resources like images or scripts to be served directly by the HTTP front end. Ensure that these are copied to the static root directory with the `collectstatic` management command: + +```no-highlight +(venv) $ cd /opt/netbox/netbox/ +(venv) $ python3 manage.py collectstatic +``` + +### Restart WSGI Service + +Finally, restart the WSGI service and RQ workers to load the new plugin: + +```no-highlight +# sudo systemctl restart netbox netbox-rq +``` diff --git a/docs/plugins/removal.md b/docs/plugins/removal.md new file mode 100644 index 000000000..f5e81bdc0 --- /dev/null +++ b/docs/plugins/removal.md @@ -0,0 +1,72 @@ +# Removing a Plugin + +!!! warning + The instructions below detail the general process for removing a NetBox plugin. However, each plugin is different and may require additional tasks or modifications to the steps below. Always consult the documentation for a specific plugin **before** attempting to remove it. + +## Disable the Plugin + +Disable the plugin by removing it from the `PLUGINS` list in `configuration.py`. + +## Remove its Configuration + +Delete the plugin's entry (if any) in the `PLUGINS_CONFIG` dictionary in `configuration.py`. + +!!! tip + If there's a chance you may reinstall the plugin, consider commenting out any configuration parameters instead of deleting them. + +## Re-index Search Entries + +Run the `reindex` management command to reindex the global search engine. This will remove any stale entries pertaining to objects provided by the plugin. + +```no-highlight +$ cd /opt/netbox/netbox/ +$ source /opt/netbox/venv/bin/activate +(venv) $ python3 manage.py reindex +``` + +## Uninstall its Python Package + +Use `pip` to remove the installed plugin: + +```no-highlight +$ source /opt/netbox/venv/bin/activate +(venv) $ pip uninstall +``` + +## Restart WSGI Service + +Restart the WSGI service: + +```no-highlight +# sudo systemctl restart netbox +``` + +## Drop Database Tables + +!!! note + This step is necessary only for plugins which have created one or more database tables (generally through the introduction of new models). Check your plugin's documentation if unsure. + +Enter the PostgreSQL database shell (`manage.py dbshell`) to determine if the plugin has created any SQL tables. Substitute `pluginname` in the example below for the name of the plugin being removed. (You can also run the `\dt` command without a pattern to list _all_ tables.) + +```no-highlight +netbox=> \dt pluginname_* + List of relations + List of relations + Schema | Name | Type | Owner +--------+----------------+-------+-------- + public | pluginname_foo | table | netbox + public | pluginname_bar | table | netbox +(2 rows) +``` + +!!! warning + Exercise extreme caution when removing tables. Users are strongly encouraged to perform a backup of their database immediately before taking these actions. + +Drop each of the listed tables to remove it from the database: + +```no-highlight +netbox=> DROP TABLE pluginname_foo; +DROP TABLE +netbox=> DROP TABLE pluginname_bar; +DROP TABLE +``` diff --git a/docs/reference/markdown.md b/docs/reference/markdown.md index 0759fa2ec..cff3f0943 100644 --- a/docs/reference/markdown.md +++ b/docs/reference/markdown.md @@ -1,353 +1,254 @@ ---- -hide: - - toc ---- - # Markdown -NetBox supports markdown rendering for certain text fields. +NetBox supports Markdown rendering for certain text fields. Some common examples are provided below. For a complete Markdown reference, please see [Markdownguide.org](https://www.markdownguide.org/basic-syntax/). -## Syntax - -##### Table of Contents -[Headers](#headers) -[Emphasis](#emphasis) -[Lists](#lists) -[Links](#links) -[Images](#images) -[Code Blocks](#code) -[Tables](#tables) -[Blockquotes](#blockquotes) -[Inline HTML](#html) -[Horizontal Rule](#hr) -[Line Breaks](#lines) - - - -## Headers +## Headings ```no-highlight -# H1 -## H2 -### H3 -#### H4 -##### H5 -###### H6 +# Heading 1 +## Heading 2 +### Heading 3 +#### Heading 4 +##### Heading 5 +###### Heading 6 +``` + +

Heading 1

+

Heading 2

+

Heading 3

+

Heading 4

+
Heading 5
+
Heading 6
Alternatively, for H1 and H2, an underline-ish style: -Alt-H1 -====== +```no-highlight +Heading 1 +========= -Alt-H2 ------- +Heading 2 +--------- ``` -# H1 -## H2 -### H3 -#### H4 -##### H5 -###### H6 +

Heading 1

+

Heading 2

- - -## Emphasis +## Text ```no-highlight -Emphasis, aka italics, with *asterisks* or _underscores_. - -Strong emphasis, aka bold, with **asterisks** or __underscores__. - -Combined emphasis with **asterisks and _underscores_**. - -Strikethrough uses two tildes. ~~Scratch this.~~ +Italicize text with *asterisks* or _underscores_. ``` -Emphasis, aka italics, with *asterisks* or _underscores_. - -Strong emphasis, aka bold, with **asterisks** or __underscores__. - -Combined emphasis with **asterisks and _underscores_**. - -Strikethrough uses two tildes. ~~Scratch this.~~ - - - - -## Lists - -(In this example, leading and trailing spaces are shown with with dots: ⋅) +Italicize text with *asterisks* or _underscores_. ```no-highlight -1. First ordered list item -2. Another item -⋅⋅* Unordered sub-list. -1. Actual numbers don't matter, just that it's a number -⋅⋅1. Ordered sub-list -4. And another item. - -⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). - -⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅ -⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅ -⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) - -* Unordered list can use asterisks -- Or minuses -+ Or pluses +Bold text with two **asterisks** or __underscores__. ``` -1. First ordered list item -2. Another item - * Unordered sub-list. -1. Actual numbers don't matter, just that it's a number - 1. Ordered sub-list -4. And another item. - - You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). - - To have a line break without a paragraph, you will need to use two trailing spaces. - Note that this line is separate, but within the same paragraph. - (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) - -* Unordered list can use asterisks -- Or minuses -+ Or pluses - - - -## Links - -There are two ways to create links. +Bold text with two **asterisks** or __underscores__. ```no-highlight -[I'm an inline-style link](https://www.google.com) - -[I'm an inline-style link with title](https://www.google.com "Google's Homepage") - -[I'm a reference-style link][Arbitrary case-insensitive reference text] - -[You can use numbers for reference-style link definitions][1] - -Or leave it empty and use the [link text itself]. - -URLs and URLs in angle brackets will automatically get turned into links. -http://www.example.com or and sometimes -example.com (but not on Github, for example). - -Some text to show that the reference links can follow later. - -[arbitrary case-insensitive reference text]: https://www.mozilla.org -[1]: http://slashdot.org -[link text itself]: http://www.reddit.com +Strike text with two tildes. ~~Deleted text.~~ ``` -[I'm an inline-style link](https://www.google.com) - -[I'm an inline-style link with title](https://www.google.com "Google's Homepage") - -[I'm a reference-style link][Arbitrary case-insensitive reference text] - -[You can use numbers for reference-style link definitions][1] - -Or leave it empty and use the [link text itself]. - -URLs and URLs in angle brackets will automatically get turned into links. -http://www.example.com or and sometimes -example.com (but not on Github, for example). - -Some text to show that the reference links can follow later. - -[arbitrary case-insensitive reference text]: https://www.mozilla.org -[1]: http://slashdot.org -[link text itself]: http://www.reddit.com - - - -## Images - -``` -Here's the NetBox logo (hover to see the title text): - -Inline-style: -![alt text](/media/misc/netbox_logo.png "Logo Title Text 1") - -Reference-style: -![alt text][logo] - -[logo]: /media/misc/netbox_logo.png "Logo Title Text 2" -``` - -Here's the NetBox logo (hover to see the title text): - -Inline-style: -![alt text](../media/misc/netbox_logo.png "Logo Title Text 1") - -Reference-style: -![alt text][logo] - -[logo]: ../media/misc/netbox_logo.png "Logo Title Text 2" - - - -## Code blocks - -``` -Inline `code` has `back-ticks around` it. -``` - -Inline `code` has `back-ticks around` it. - -Blocks of code are fenced by lines with three back-ticks ``` - -```` -``` -var s = "Code block"; -alert(s); -``` -```` - -``` -var s = "Code block"; -alert(s); -``` - - - -## Tables - -```no-highlight -Colons can be used to align columns. - -| Tables | Are | Cool | -| ------------- |:-------------:| -----:| -| col 3 is | right-aligned | $1600 | -| col 2 is | centered | $12 | -| zebra stripes | are neat | $1 | - -There must be at least 3 dashes separating each header cell. -The outer pipes (|) are optional, and you don't need to make the -raw Markdown line up prettily. You can also use inline Markdown. - -Markdown | Less | Pretty ---- | --- | --- -*Still* | `renders` | **nicely** -1 | 2 | 3 -``` - -Colons can be used to align columns. - -| Tables | Are | Cool | -| ------------- |:-------------:| -----:| -| col 3 is | right-aligned | $1600 | -| col 2 is | centered | $12 | -| zebra stripes | are neat | $1 | - -There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. - -Markdown | Less | Pretty ---- | --- | --- -*Still* | `renders` | **nicely** -1 | 2 | 3 - - - -## Blockquotes - -```no-highlight -> Blockquotes are very handy in email to emulate reply text. -> This line is part of the same quote. - -Quote break. - -> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote. -``` - -> Blockquotes are very handy in email to emulate reply text. -> This line is part of the same quote. - -Quote break. - -> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can *put* **Markdown** into a blockquote. - - - -## Inline HTML - -You can also use raw HTML in your Markdown, and it'll mostly work pretty well. - -```no-highlight -
-
Definition list
-
Is something people use sometimes.
- -
Markdown in HTML
-
Does *not* work **very** well. Use HTML tags.
-
-``` - -
-
Definition list
-
Is something people use sometimes.
- -
Markdown in HTML
-
Does *not* work **very** well. Use HTML tags.
-
- - - -## Horizontal Rule - -``` -Three or more... - ---- - -Hyphens - -*** - -Asterisks - -___ - -Underscores -``` - -Three or more... - ---- - -Hyphens - -*** - -Asterisks - -___ - -Underscores - - +Strike text with two tildes. ~~Deleted text.~~ ## Line Breaks +By default, Markdown will remove line breaks between successive lines of text. For example: -``` -Here's a line for us to start with. - -This line is separated from the one above by two newlines, so it will be a *separate paragraph*. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the *same paragraph*. +```no-highlight +This is one line. +And this is another line. +One more line here. ``` -Here's a line for us to start with. +This is one line. +And this is another line. +One more line here. -This line is separated from the one above by two newlines, so it will be a *separate paragraph*. +To preserve line breaks, append two spaces to each line (represented below with the `⋅` character). -This line is also begins a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the *same paragraph*. +```no-highlight +This is one line.⋅⋅ +And this is another line.⋅⋅ +One more line here. +``` -Based on [Markdown-Cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) by [adam-p](https://github.com/adam-p) licensed under [CC-BY](https://creativecommons.org/licenses/by/3.0/) \ No newline at end of file +This is one line. +And this is another line. +One more line here. + +## Lists + +Use asterisks or hyphens for unordered lists. Indent items by four spaces to start a child list. + +```no-highlight +* Alpha +* Bravo +* Charlie + * Child item 1 + * Child item 2 +* Delta +``` + +* Alpha +* Bravo +* Charlie + * Child item 1 + * Child item 2 +* Delta + +Use digits followed by periods for ordered (numbered) lists. + +```no-highlight +1. Red +2. Green +3. Blue + 1. Light blue + 2. Dark blue +4. Orange +``` + +1. Red +2. Green +3. Blue + 1. Light blue + 2. Dark blue +4. Orange + +## Links + +Text can be rendered as a hyperlink by encasing it in square brackets, followed by a URL in parentheses. A title (text displayed on hover) may optionally be included as well. + +```no-highlight +Here's an [example](https://www.example.com) of a link. + +And here's [another link](https://www.example.com "Click me!"), this time with a title. +``` + +Here's an [example](https://www.example.com) of a link. + +And here's [another link](https://www.example.com "Click me!"), with a title. + +## Images + +The syntax for embedding an image is very similar to that used for a hyperlink. Alternate text should always be provided; this will be displayed if the image fails to load. As with hyperlinks, title text is optional. + +```no-highlight +![Alternate text](/path/to/image.png "Image title text") +``` + +## Code Blocks + +Single backticks can be used to annotate code inline. Text enclosed by lines of three backticks will be displayed as a code block. + +```no-highlight +Paragraphs are rendered in HTML using `

` and `

` tags. +``` + +Paragraphs are rendered in HTML using `

` and `

` tags. + +```` +``` +def my_func(foo, bar): + # Do something + return foo * bar +``` +```` + +```no-highlight +def my_func(foo, bar): + # Do something + return foo * bar +``` + +## Tables + +Simple tables can be constructed using the pipe character (`|`) to denote columns, and hyphens (`-`) to denote the heading. Inline Markdown can be used to style text within columns. + +```no-highlight +| Heading 1 | Heading 2 | Heading 3 | +|-----------|-----------|-----------| +| Row 1 | Alpha | Red | +| Row 2 | **Bravo** | Green | +| Row 3 | Charlie | ~~Blue~~ | +``` + +| Heading 1 | Heading 2 | Heading 3 | +|-----------|-----------|-----------| +| _Row 1_ | Alpha | Red | +| Row 2 | **Bravo** | Green | +| Row 3 | Charlie | ~~Blue~~ | + +Colons can be used to align text to the left or right side of a column. + +```no-highlight +| Left-aligned | Centered | Right-aligned | +|:-------------|:--------:|--------------:| +| Text | Text | Text | +| Text | Text | Text | +| Text | Text | Text | +``` + +| Left-aligned | Centered | Right-aligned | +|:-------------|:--------:|--------------:| +| Text | Text | Text | +| Text | Text | Text | +| Text | Text | Text | + +## Blockquotes + +Text can be wrapped in a blockquote by prepending a right angle bracket (`>`) before each line. + +```no-highlight +> I think that I shall never see +> a graph more lovely than a tree. +> A tree whose crucial property +> is loop-free connectivity. +``` + +> I think that I shall never see +> a graph more lovely than a tree. +> A tree whose crucial property +> is loop-free connectivity. + +Markdown removes line breaks by default. To preserve line breaks, append two spaces to each line (represented below with the `⋅` character). + +```no-highlight +> I think that I shall never see⋅⋅ +> a graph more lovely than a tree.⋅⋅ +> A tree whose crucial property⋅⋅ +> is loop-free connectivity. +``` + +> I think that I shall never see +> a graph more lovely than a tree. +> A tree whose crucial property +> is loop-free connectivity. + +## Horizontal Rule + +A horizontal rule is a single line rendered across the width of the page using a series of three or more hyphens or asterisks. It can be useful for separating sections of content. + +```no-highlight +Content + +--- + +More content + +*** + +Final content +``` + +Content + +--- + +More content + +*** + +Final content diff --git a/docs/release-notes/version-3.7.md b/docs/release-notes/version-3.7.md index 9724c4488..337526c14 100644 --- a/docs/release-notes/version-3.7.md +++ b/docs/release-notes/version-3.7.md @@ -1,6 +1,76 @@ # NetBox v3.7 -## v3.7.5 (FUTURE) +## v3.7.7 (2024-05-01) + +### Enhancements + +* [#15428](https://github.com/netbox-community/netbox/issues/15428) - Show usage counts for associated objects on config template list +* [#15812](https://github.com/netbox-community/netbox/issues/15812) - Add Date & DateTime variable types for custom scripts +* [#15894](https://github.com/netbox-community/netbox/issues/15894) - Cache the generated API schema definition for shorter loading times + +### Bug Fixes + +* [#11460](https://github.com/netbox-community/netbox/issues/11460) - Fix AttributeError exception when editing a cable with only one end terminated +* [#13712](https://github.com/netbox-community/netbox/issues/13712) - Fix row highlighting for device interface list display +* [#13806](https://github.com/netbox-community/netbox/issues/13806) - Fix "mark" button tooltip on button activation for device interface list display +* [#13922](https://github.com/netbox-community/netbox/issues/13922) - Fix SVG drawing error on multiple termination trace with multiple devices +* [#14241](https://github.com/netbox-community/netbox/issues/14241) - Fix random interface swap when performing cable trace with multiple termination +* [#14852](https://github.com/netbox-community/netbox/issues/14852) - Fix NoReverseMatch exception when viewing an event rule which references a deleted custom script +* [#15524](https://github.com/netbox-community/netbox/issues/15524) - Fix rounding error when reporting IP range utilization +* [#15548](https://github.com/netbox-community/netbox/issues/15548) - Ignore many-to-many mappings when checking dependencies of an object being deleted +* [#15845](https://github.com/netbox-community/netbox/issues/15845) - Avoid extraneous database queries when fetching assigned IP addresses via REST API +* [#15872](https://github.com/netbox-community/netbox/issues/15872) - `BANNER_MAINTENANCE` content should permit custom HTML +* [#15891](https://github.com/netbox-community/netbox/issues/15891) - Ensure deterministic ordering for scripts & reports +* [#15896](https://github.com/netbox-community/netbox/issues/15896) - Fix retention of default value when editing a custom JSON field +* [#15899](https://github.com/netbox-community/netbox/issues/15899) - Fix exception when enabling the tags column on the L2VPN terminations table + +--- + +## v3.7.6 (2024-04-22) + +!!! warning + If remote authentication is in use with Gunicorn v22.0 or later, it may be necessary to configure Gunicorn's [`header_map`](https://docs.gunicorn.org/en/stable/settings.html#header-map) setting to preserve authentication headers. + +### Enhancements + +* [#14690](https://github.com/netbox-community/netbox/issues/14690) - Improve rendering of JSON data in configuration form +* [#15427](https://github.com/netbox-community/netbox/issues/15427) - Enable compatibility with non-Amazon S3 providers for remote data sources +* [#15640](https://github.com/netbox-community/netbox/issues/15640) - Add global search support for L2VPN identifiers +* [#15644](https://github.com/netbox-community/netbox/issues/15644) - Introduce new configuration parameters for enabling HTTP Strict Transport Security (HSTS) + +### Bug Fixes + +* [#15541](https://github.com/netbox-community/netbox/issues/15541) - Restore ability to modify assigned component template when adding/modifying an inventory item template +* [#15582](https://github.com/netbox-community/netbox/issues/15582) - Fix permission constraints for synchronization of remote data sources +* [#15588](https://github.com/netbox-community/netbox/issues/15588) - Correct OpenAPI schema definitions for read-only fields which may return null values +* [#15635](https://github.com/netbox-community/netbox/issues/15635) - Extend plugin removal instruction to include reindexing the global search cache +* [#15654](https://github.com/netbox-community/netbox/issues/15654) - Fix `AttributeError` exception when attempting to save an incomplete tunnel termination +* [#15668](https://github.com/netbox-community/netbox/issues/15668) - Fix permission required to display virtual disks tab on virtual machine UI view +* [#15685](https://github.com/netbox-community/netbox/issues/15685) - Allow filtering cables by decimal values using UI filter form +* [#15761](https://github.com/netbox-community/netbox/issues/15761) - Add missing `ike_policy` & `ike_policy_id` filters for IKE proposals +* [#15771](https://github.com/netbox-community/netbox/issues/15771) - Include `id` in list of supported fields for all bulk import forms +* [#15790](https://github.com/netbox-community/netbox/issues/15790) - Fix live preview support for EventRule comments + +--- + +## v3.7.5 (2024-04-04) + +### Enhancements + +* [#14707](https://github.com/netbox-community/netbox/issues/14707) - Clarify interface designation when creating tunnel terminations +* [#15039](https://github.com/netbox-community/netbox/issues/15039) - Allow API tokens to be cloned + +### Bug Fixes + +* [#14799](https://github.com/netbox-community/netbox/issues/14799) - Avoid caching modified reports & scripts +* [#15029](https://github.com/netbox-community/netbox/issues/15029) - Raise a clean validation error when attempting to make duplicate FHRP group assignments +* [#15102](https://github.com/netbox-community/netbox/issues/15102) - Fix usage of selector widget for form fields referencing users/groups +* [#15435](https://github.com/netbox-community/netbox/issues/15435) - Correct permissions name to allow adding a module bay to a device via the UI +* [#15502](https://github.com/netbox-community/netbox/issues/15502) - Fix KeyError exception when modifying an IP address assigned to a virtual machine +* [#15597](https://github.com/netbox-community/netbox/issues/15597) - Restore help modal for `button_class` field on custom link bulk import form +* [#15598](https://github.com/netbox-community/netbox/issues/15598) - Fix exception when creating a device from a device type with one or more child inventory items +* [#15608](https://github.com/netbox-community/netbox/issues/15608) - Avoid caching values of null fields in search index +* [#15609](https://github.com/netbox-community/netbox/issues/15609) - Fix filtering of the providers list by assigned ASN --- diff --git a/mkdocs.yml b/mkdocs.yml index e1128578a..5aa657230 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -42,6 +42,7 @@ plugins: show_root_toc_entry: false show_source: false extra: + readthedocs: !ENV READTHEDOCS social: - icon: fontawesome/brands/github link: https://github.com/netbox-community/netbox @@ -127,7 +128,9 @@ nav: - Synchronized Data: 'integrations/synchronized-data.md' - Prometheus Metrics: 'integrations/prometheus-metrics.md' - Plugins: - - Using Plugins: 'plugins/index.md' + - About Plugins: 'plugins/index.md' + - Installing a Plugin: 'plugins/installation.md' + - Removing a Plugin: 'plugins/removal.md' - Developing Plugins: - Getting Started: 'plugins/development/index.md' - Models: 'plugins/development/models.md' diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index 97be1cf57..9a14b5286 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -64,6 +64,12 @@ class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet): queryset=ASN.objects.all(), label=_('ASN (ID)'), ) + asn = django_filters.ModelMultipleChoiceFilter( + field_name='asns__asn', + queryset=ASN.objects.all(), + to_field_name='asn', + label=_('ASN'), + ) class Meta: model = Provider diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index 1e1abd068..8f730ba10 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -24,7 +24,7 @@ class ProviderFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): fieldsets = ( (None, ('q', 'filter_id', 'tag')), (_('Location'), ('region_id', 'site_group_id', 'site_id')), - (_('ASN'), ('asn',)), + (_('ASN'), ('asn_id',)), (_('Contacts'), ('contact', 'contact_role', 'contact_group')), ) region_id = DynamicModelMultipleChoiceField( @@ -46,10 +46,6 @@ class ProviderFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): }, label=_('Site') ) - asn = forms.IntegerField( - required=False, - label=_('ASN (legacy)') - ) asn_id = DynamicModelMultipleChoiceField( queryset=ASN.objects.all(), required=False, diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index 6553179ec..ae9de03e9 100644 --- a/netbox/circuits/tests/test_filtersets.py +++ b/netbox/circuits/tests/test_filtersets.py @@ -90,10 +90,12 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - def test_asn_id(self): # ASN object assignment + def test_asn(self): asns = ASN.objects.all()[:2] params = {'asn_id': [asns[0].pk, asns[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'asn': [asns[0].asn, asns[1].asn]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): regions = Region.objects.all()[:2] diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index 7bf2f87a6..39c922eb6 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -1,5 +1,5 @@ from django.shortcuts import get_object_or_404 - +from django.utils.translation import gettext_lazy as _ from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response @@ -33,10 +33,11 @@ class DataSourceViewSet(NetBoxModelViewSet): """ Enqueue a job to synchronize the DataSource. """ - if not request.user.has_perm('core.sync_datasource'): - raise PermissionDenied("Syncing data sources requires the core.sync_datasource permission.") - datasource = get_object_or_404(DataSource, pk=pk) + + if not request.user.has_perm('core.sync_datasource', obj=datasource): + raise PermissionDenied(_("This user does not have permission to synchronize this data source.")) + datasource.enqueue_sync_job(request) serializer = serializers.DataSourceSerializer(datasource, context={'request': request}) diff --git a/netbox/core/data_backends.py b/netbox/core/data_backends.py index 15891a6f5..2d3a7d8c8 100644 --- a/netbox/core/data_backends.py +++ b/netbox/core/data_backends.py @@ -149,7 +149,8 @@ class S3Backend(DataBackend): region_name=self._region_name, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, - config=self.config + config=self.config, + endpoint_url=self._endpoint_url ) bucket = s3.Bucket(self._bucket_name) @@ -176,6 +177,11 @@ class S3Backend(DataBackend): url_path = urlparse(self.url).path.lstrip('/') return url_path.split('/')[0] + @property + def _endpoint_url(self): + url_path = urlparse(self.url) + return url_path._replace(params="", fragment="", query="", path="").geturl() + @property def _remote_path(self): url_path = urlparse(self.url).path.lstrip('/') diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index ae891dd59..0f4f971dc 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -3,6 +3,7 @@ import json from django import forms from django.conf import settings +from django.forms.fields import JSONField as _JSONField from django.utils.translation import gettext_lazy as _ from core.forms.mixins import SyncedDataMixin @@ -12,7 +13,7 @@ from netbox.forms import NetBoxModelForm from netbox.registry import registry from netbox.utils import get_data_backend_choices from utilities.forms import BootstrapMixin, get_field_value -from utilities.forms.fields import CommentField +from utilities.forms.fields import CommentField, JSONField from utilities.forms.widgets import HTMXSelect __all__ = ( @@ -132,6 +133,9 @@ class ConfigFormMetaclass(forms.models.ModelFormMetaclass): 'help_text': param.description, } field_kwargs.update(**param.field_kwargs) + if param.field is _JSONField: + # Replace with our own JSONField to get pretty JSON in config editor + param.field = JSONField param_fields[param.name] = param.field(**field_kwargs) attrs.update(param_fields) diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 053b3e9ea..e07d17aca 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -612,7 +612,7 @@ class InventoryItemTemplateSerializer(ValidatedModelSerializer): required=False, allow_null=True ) - component = serializers.SerializerMethodField(read_only=True) + component = serializers.SerializerMethodField(read_only=True, allow_null=True) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -668,7 +668,7 @@ class DeviceSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail') device_type = NestedDeviceTypeSerializer() role = NestedDeviceRoleSerializer() - device_role = NestedDeviceRoleSerializer(read_only=True, help_text='Deprecated in v3.6 in favor of `role`.') + device_role = NestedDeviceRoleSerializer(read_only=True, help_text=_('Deprecated in v3.6 in favor of `role`.')) tenant = NestedTenantSerializer(required=False, allow_null=True, default=None) platform = NestedPlatformSerializer(required=False, allow_null=True) site = NestedSiteSerializer() @@ -685,7 +685,7 @@ class DeviceSerializer(NetBoxModelSerializer): ) status = ChoiceField(choices=DeviceStatusChoices, required=False) airflow = ChoiceField(choices=DeviceAirflowChoices, allow_blank=True, required=False) - primary_ip = NestedIPAddressSerializer(read_only=True) + primary_ip = NestedIPAddressSerializer(read_only=True, allow_null=True) primary_ip4 = NestedIPAddressSerializer(required=False, allow_null=True) primary_ip6 = NestedIPAddressSerializer(required=False, allow_null=True) oob_ip = NestedIPAddressSerializer(required=False, allow_null=True) @@ -735,7 +735,7 @@ class DeviceSerializer(NetBoxModelSerializer): class DeviceWithConfigContextSerializer(DeviceSerializer): - config_context = serializers.SerializerMethodField(read_only=True) + config_context = serializers.SerializerMethodField(read_only=True, allow_null=True) class Meta(DeviceSerializer.Meta): fields = [ @@ -1067,7 +1067,7 @@ class InventoryItemSerializer(NetBoxModelSerializer): required=False, allow_null=True ) - component = serializers.SerializerMethodField(read_only=True) + component = serializers.SerializerMethodField(read_only=True, allow_null=True) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index 47974096f..95e6c4098 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -1373,14 +1373,14 @@ class VirtualDeviceContextImportForm(NetBoxModelImportForm): label=_('Device'), queryset=Device.objects.all(), to_field_name='name', - help_text='Assigned role' + help_text=_('Assigned role') ) tenant = CSVModelChoiceField( label=_('Tenant'), queryset=Tenant.objects.all(), required=False, to_field_name='name', - help_text='Assigned tenant' + help_text=_('Assigned tenant') ) status = CSVChoiceField( label=_('Status'), diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index 854c5ebed..90a3d6ce0 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -1,4 +1,5 @@ from django import forms +from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from circuits.models import Circuit, CircuitTermination @@ -82,14 +83,22 @@ def get_cable_form(a_type, b_type): class _CableForm(CableForm, metaclass=FormMetaclass): - def __init__(self, *args, **kwargs): + def __init__(self, *args, initial=None, **kwargs): + + initial = initial or {} + if a_type: + ct = ContentType.objects.get_for_model(a_type) + initial['a_terminations_type'] = f'{ct.app_label}.{ct.model}' + if b_type: + ct = ContentType.objects.get_for_model(b_type) + initial['b_terminations_type'] = f'{ct.app_label}.{ct.model}' # TODO: Temporary hack to work around list handling limitations with utils.normalize_querydict() for field_name in ('a_terminations', 'b_terminations'): - if field_name in kwargs.get('initial', {}) and type(kwargs['initial'][field_name]) is not list: - kwargs['initial'][field_name] = [kwargs['initial'][field_name]] + if field_name in initial and type(initial[field_name]) is not list: + initial[field_name] = [initial[field_name]] - super().__init__(*args, **kwargs) + super().__init__(*args, initial=initial, **kwargs) if self.instance and self.instance.pk: # Initialize A/B terminations when modifying an existing Cable instance @@ -100,7 +109,7 @@ def get_cable_form(a_type, b_type): super().clean() # Set the A/B terminations on the Cable instance - self.instance.a_terminations = self.cleaned_data['a_terminations'] - self.instance.b_terminations = self.cleaned_data['b_terminations'] + self.instance.a_terminations = self.cleaned_data.get('a_terminations', []) + self.instance.b_terminations = self.cleaned_data.get('b_terminations', []) return _CableForm diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 95c441381..d8d326271 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -977,9 +977,9 @@ class CableFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): label=_('Color'), required=False ) - length = forms.IntegerField( + length = forms.DecimalField( label=_('Length'), - required=False + required=False, ) length_unit = forms.ChoiceField( label=_('Length unit'), diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 6773bc55f..cc7100e3c 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -13,8 +13,7 @@ from netbox.forms import NetBoxModelForm from tenancy.forms import TenancyForm from utilities.forms import BootstrapMixin, add_blank_choice from utilities.forms.fields import ( - CommentField, ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, JSONField, - NumericArrayField, SlugField, + CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, JSONField, NumericArrayField, SlugField, ) from utilities.forms.widgets import APISelect, ClearableFileInput, HTMXSelect, NumberWithOptions, SelectWithPK from virtualization.models import Cluster @@ -616,14 +615,33 @@ class ModuleForm(ModuleCommonForm, NetBoxModelForm): self.fields['adopt_components'].disabled = True +def get_termination_type_choices(): + return add_blank_choice([ + (f'{ct.app_label}.{ct.model}', ct.model_class()._meta.verbose_name.title()) + for ct in ContentType.objects.filter(CABLE_TERMINATION_MODELS) + ]) + + class CableForm(TenancyForm, NetBoxModelForm): + a_terminations_type = forms.ChoiceField( + choices=get_termination_type_choices, + required=False, + widget=HTMXSelect(), + label=_('Type') + ) + b_terminations_type = forms.ChoiceField( + choices=get_termination_type_choices, + required=False, + widget=HTMXSelect(), + label=_('Type') + ) comments = CommentField() class Meta: model = Cable fields = [ - 'type', 'status', 'tenant_group', 'tenant', 'label', 'color', 'length', 'length_unit', 'description', - 'comments', 'tags', + 'a_terminations_type', 'b_terminations_type', 'type', 'status', 'tenant_group', 'tenant', 'label', 'color', + 'length', 'length_unit', 'description', 'comments', 'tags', ] error_messages = { 'length': { @@ -976,21 +994,67 @@ class InventoryItemTemplateForm(ComponentTemplateForm): queryset=Manufacturer.objects.all(), required=False ) - component_type = ContentTypeChoiceField( - queryset=ContentType.objects.all(), - limit_choices_to=MODULAR_COMPONENT_TEMPLATE_MODELS, + # Assigned component selectors + consoleporttemplate = DynamicModelChoiceField( + queryset=ConsolePortTemplate.objects.all(), required=False, - widget=forms.HiddenInput + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Console port template') ) - component_id = forms.IntegerField( + consoleserverporttemplate = DynamicModelChoiceField( + queryset=ConsoleServerPortTemplate.objects.all(), required=False, - widget=forms.HiddenInput + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Console server port template') + ) + frontporttemplate = DynamicModelChoiceField( + queryset=FrontPortTemplate.objects.all(), + required=False, + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Front port template') + ) + interfacetemplate = DynamicModelChoiceField( + queryset=InterfaceTemplate.objects.all(), + required=False, + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Interface template') + ) + poweroutlettemplate = DynamicModelChoiceField( + queryset=PowerOutletTemplate.objects.all(), + required=False, + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Power outlet template') + ) + powerporttemplate = DynamicModelChoiceField( + queryset=PowerPortTemplate.objects.all(), + required=False, + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Power port template') + ) + rearporttemplate = DynamicModelChoiceField( + queryset=RearPortTemplate.objects.all(), + required=False, + query_params={ + 'device_type_id': '$device_type' + }, + label=_('Rear port template') ) fieldsets = ( (None, ( 'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description', - 'component_type', 'component_id', )), ) @@ -998,9 +1062,52 @@ class InventoryItemTemplateForm(ComponentTemplateForm): model = InventoryItemTemplate fields = [ 'device_type', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'description', - 'component_type', 'component_id', ] + def __init__(self, *args, **kwargs): + instance = kwargs.get('instance') + initial = kwargs.get('initial', {}).copy() + component_type = initial.get('component_type') + component_id = initial.get('component_id') + + # Used for picking the default active tab for component selection + self.no_component = True + + if instance: + # When editing set the initial value for component selection + for component_model in ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS): + if type(instance.component) is component_model.model_class(): + initial[component_model.model] = instance.component + self.no_component = False + 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(): + if component := content_type.model_class().objects.filter(pk=component_id).first(): + initial[content_type.model] = component + self.no_component = False + + kwargs['initial'] = initial + + super().__init__(*args, **kwargs) + + def clean(self): + super().clean() + + # Handle object assignment + selected_objects = [ + field for field in ( + 'consoleporttemplate', 'consoleserverporttemplate', 'frontporttemplate', 'interfacetemplate', + 'poweroutlettemplate', 'powerporttemplate', 'rearporttemplate' + ) if self.cleaned_data[field] + ] + if len(selected_objects) > 1: + raise forms.ValidationError(_("An InventoryItem can only be assigned to a single component.")) + elif selected_objects: + self.instance.component = self.cleaned_data[selected_objects[0]] + else: + self.instance.component = None + # # Device components diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 2a1269a8d..588901709 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -996,17 +996,16 @@ class Device( bulk_create: If True, bulk_create() will be called to create all components in a single query (default). Otherwise, save() will be called on each instance individually. """ - components = [obj.instantiate(device=self) for obj in queryset] - if not components: - return - - # Set default values for any applicable custom fields model = queryset.model.component_model - if cf_defaults := CustomField.objects.get_defaults_for_model(model): - for component in components: - component.custom_field_data = cf_defaults if bulk_create: + components = [obj.instantiate(device=self) for obj in queryset] + if not components: + return + # Set default values for any applicable custom fields + if cf_defaults := CustomField.objects.get_defaults_for_model(model): + for component in components: + component.custom_field_data = cf_defaults model.objects.bulk_create(components) # Manually send the post_save signal for each of the newly created components for component in components: @@ -1019,7 +1018,11 @@ class Device( update_fields=None ) else: - for component in components: + for obj in queryset: + component = obj.instantiate(device=self) + # Set default values for any applicable custom fields + if cf_defaults := CustomField.objects.get_defaults_for_model(model): + component.custom_field_data = cf_defaults component.save() def save(self, *args, **kwargs): diff --git a/netbox/dcim/svg/cables.py b/netbox/dcim/svg/cables.py index d7365161e..596f0c6bf 100644 --- a/netbox/dcim/svg/cables.py +++ b/netbox/dcim/svg/cables.py @@ -8,17 +8,16 @@ from django.conf import settings from dcim.constants import CABLE_TRACE_SVG_DEFAULT_WIDTH from utilities.utils import foreground_color - __all__ = ( 'CableTraceSVG', ) - OFFSET = 0.5 PADDING = 10 LINE_HEIGHT = 20 FANOUT_HEIGHT = 35 FANOUT_LEG_HEIGHT = 15 +CABLE_HEIGHT = 4 * LINE_HEIGHT + FANOUT_HEIGHT + FANOUT_LEG_HEIGHT class Node(Hyperlink): @@ -84,31 +83,38 @@ class Connector(Group): labels: Iterable of text labels """ - def __init__(self, start, url, color, labels=[], description=[], **extra): - super().__init__(class_='connector', **extra) + def __init__(self, start, url, color, wireless, labels=[], description=[], end=None, text_offset=0, **extra): + super().__init__(class_="connector", **extra) self.start = start self.height = PADDING * 2 + LINE_HEIGHT * len(labels) + PADDING * 2 - self.end = (start[0], start[1] + self.height) + # Allow to specify end-position or auto-calculate + self.end = end if end else (start[0], start[1] + self.height) self.color = color or '000000' - # Draw a "shadow" line to give the cable a border - cable_shadow = Line(start=self.start, end=self.end, class_='cable-shadow') - self.add(cable_shadow) + if wireless: + # Draw the cable + cable = Line(start=self.start, end=self.end, class_="wireless-link") + self.add(cable) + else: + # Draw a "shadow" line to give the cable a border + cable_shadow = Line(start=self.start, end=self.end, class_='cable-shadow') + self.add(cable_shadow) - # Draw the cable - cable = Line(start=self.start, end=self.end, style=f'stroke: #{self.color}') - self.add(cable) + # Draw the cable + cable = Line(start=self.start, end=self.end, style=f'stroke: #{self.color}') + self.add(cable) # Add link link = Hyperlink(href=url, target='_parent') # Add text label(s) - cursor = start[1] - cursor += PADDING * 2 + cursor = start[1] + text_offset + cursor += PADDING * 2 + LINE_HEIGHT * 2 + x_coord = (start[0] + end[0]) / 2 + PADDING for i, label in enumerate(labels): cursor += LINE_HEIGHT - text_coords = (start[0] + PADDING * 2, cursor - LINE_HEIGHT / 2) + text_coords = (x_coord, cursor - LINE_HEIGHT / 2) text = Text(label, insert=text_coords, class_='bold' if not i else []) link.add(text) if len(description) > 0: @@ -190,8 +196,9 @@ class CableTraceSVG: def draw_parent_objects(self, obj_list): """ - Draw a set of parent objects. + Draw a set of parent objects (eg hosts, switched, patchpanels) and return all created nodes """ + objects = [] width = self.width / len(obj_list) for i, obj in enumerate(obj_list): node = Node( @@ -199,23 +206,26 @@ class CableTraceSVG: width=width, url=f'{self.base_url}{obj.get_absolute_url()}', color=self._get_color(obj), - labels=self._get_labels(obj) + labels=self._get_labels(obj), + object=obj ) + objects.append(node) self.parent_objects.append(node) if i + 1 == len(obj_list): self.cursor += node.box['height'] + return objects - def draw_terminations(self, terminations): + def draw_object_terminations(self, terminations, offset_x, width): """ - Draw a row of terminating objects (e.g. interfaces), all of which are attached to the same end of a cable. + Draw all terminations belonging to an object with specified offset and width + Return all created nodes and their maximum height """ - nodes = [] nodes_height = 0 - width = self.width / len(terminations) - - for i, term in enumerate(terminations): + nodes = [] + # Sort them by name to make renders more readable + for i, term in enumerate(sorted(terminations, key=lambda x: x.name)): node = Node( - position=(i * width, self.cursor), + position=(offset_x + i * width, self.cursor), width=width, url=f'{self.base_url}{term.get_absolute_url()}', color=self._get_color(term), @@ -225,133 +235,89 @@ class CableTraceSVG: ) nodes_height = max(nodes_height, node.box['height']) nodes.append(node) + return nodes, nodes_height + + def draw_terminations(self, terminations, parent_object_nodes): + """ + Draw a row of terminating objects (e.g. interfaces) and return all created nodes + Attach them to previously created parent objects + """ + nodes = [] + nodes_height = 0 + + # Draw terminations for each parent object + for parent in parent_object_nodes: + parent_terms = [term for term in terminations if term.parent_object == parent.object] + + # Width and offset(position) for each termination box + width = parent.box['width'] / len(parent_terms) + offset_x = parent.box['x'] + + result, nodes_height = self.draw_object_terminations(parent_terms, offset_x, width) + nodes.extend(result) self.cursor += nodes_height self.terminations.extend(nodes) return nodes - def draw_fanin(self, node, connector): - points = ( - node.bottom_center, - (node.bottom_center[0], node.bottom_center[1] + FANOUT_LEG_HEIGHT), - connector.start, - ) - self.connectors.extend(( - Polyline(points=points, class_='cable-shadow'), - Polyline(points=points, style=f'stroke: #{connector.color}'), - )) - - def draw_fanout(self, node, connector): - points = ( - connector.end, - (node.top_center[0], node.top_center[1] - FANOUT_LEG_HEIGHT), - node.top_center, - ) - self.connectors.extend(( - Polyline(points=points, class_='cable-shadow'), - Polyline(points=points, style=f'stroke: #{connector.color}'), - )) - - def draw_cable(self, cable, terminations, cable_count=0): + def draw_far_objects(self, obj_list, terminations): """ - Draw a single cable. Terminations and cable count are passed for determining position and padding - - :param cable: The cable to draw - :param terminations: List of terminations to build positioning data off of - :param cable_count: Count of all cables on this layer for determining whether to collapse description into a - tooltip. + Draw the far-end objects and its terminations and return all created nodes """ + # Make sure elements are sorted by name for readability + objects = sorted(obj_list, key=lambda x: x.name) + width = self.width / len(objects) - # If the cable count is higher than 2, collapse the description into a tooltip - if cable_count > 2: - # Use the cable __str__ function to denote the cable - labels = [f'{cable}'] + # Max-height of created terminations + terms_height = 0 + term_nodes = [] - # Include the label and the status description in the tooltip - description = [ - f'Cable {cable}', - cable.get_status_display() - ] + # Draw the terminations by per object first + for i, obj in enumerate(objects): + obj_terms = [term for term in terminations if term.parent_object == obj] + obj_pos = i * width + result, result_nodes_height = self.draw_object_terminations(obj_terms, obj_pos, width / len(obj_terms)) - if cable.type: - # Include the cable type in the tooltip - description.append(cable.get_type_display()) - if cable.length is not None and cable.length_unit: - # Include the cable length in the tooltip - description.append(f'{cable.length} {cable.get_length_unit_display()}') - else: - labels = [ - f'Cable {cable}', - cable.get_status_display() - ] - description = [] - if cable.type: - labels.append(cable.get_type_display()) - if cable.length is not None and cable.length_unit: - # Include the cable length in the tooltip - labels.append(f'{cable.length} {cable.get_length_unit_display()}') + terms_height = max(terms_height, result_nodes_height) + term_nodes.extend(result) - # If there is only one termination, center on that termination - # Otherwise average the center across the terminations - if len(terminations) == 1: - center = terminations[0].bottom_center[0] - else: - # Get a list of termination centers - termination_centers = [term.bottom_center[0] for term in terminations] - # Average the centers - center = sum(termination_centers) / len(termination_centers) + # Update cursor and draw the objects + self.cursor += terms_height + self.terminations.extend(term_nodes) + object_nodes = self.draw_parent_objects(objects) - # Create the connector - connector = Connector( - start=(center, self.cursor), - color=cable.color or '000000', - url=f'{self.base_url}{cable.get_absolute_url()}', - labels=labels, - description=description - ) + return object_nodes, term_nodes - # Set the cursor position - self.cursor += connector.height - - return connector - - def draw_wirelesslink(self, wirelesslink): + def draw_fanin(self, target, terminations, color): """ - Draw a line with labels representing a WirelessLink. + Draw the fan-in-lines from each of the terminations to the targetpoint """ - group = Group(class_='connector') + for term in terminations: + points = ( + term.bottom_center, + (term.bottom_center[0], term.bottom_center[1] + FANOUT_LEG_HEIGHT), + target, + ) + self.connectors.extend(( + Polyline(points=points, class_='cable-shadow'), + Polyline(points=points, style=f'stroke: #{color}'), + )) - labels = [ - f'Wireless link {wirelesslink}', - wirelesslink.get_status_display() - ] - if wirelesslink.ssid: - labels.append(wirelesslink.ssid) - - # Draw the wireless link - start = (OFFSET + self.center, self.cursor) - height = PADDING * 2 + LINE_HEIGHT * len(labels) + PADDING * 2 - end = (start[0], start[1] + height) - line = Line(start=start, end=end, class_='wireless-link') - group.add(line) - - self.cursor += PADDING * 2 - - # Add link - link = Hyperlink(href=f'{self.base_url}{wirelesslink.get_absolute_url()}', target='_parent') - - # Add text label(s) - for i, label in enumerate(labels): - self.cursor += LINE_HEIGHT - text_coords = (self.center + PADDING * 2, self.cursor - LINE_HEIGHT / 2) - text = Text(label, insert=text_coords, class_='bold' if not i else []) - link.add(text) - - group.add(link) - self.cursor += PADDING * 2 - - return group + def draw_fanout(self, start, terminations, color): + """ + Draw the fan-out-lines from the startpoint to each of the terminations + """ + for term in terminations: + points = ( + term.top_center, + (term.top_center[0], term.top_center[1] - FANOUT_LEG_HEIGHT), + start, + ) + self.connectors.extend(( + Polyline(points=points, class_='cable-shadow'), + Polyline(points=points, style=f'stroke: #{color}'), + )) def draw_attachment(self): """ @@ -378,86 +344,99 @@ class CableTraceSVG: traced_path = self.origin.trace() + parent_object_nodes = [] # Iterate through each (terms, cable, terms) segment in the path for i, segment in enumerate(traced_path): near_ends, links, far_ends = segment - # Near end parent + # This is segment number one. if i == 0: # If this is the first segment, draw the originating termination's parent object - self.draw_parent_objects(set(end.parent_object for end in near_ends)) + parent_object_nodes = self.draw_parent_objects(set(end.parent_object for end in near_ends)) + # Else: No need to draw parent objects (parent objects are drawn in last "round" as the far-end!) - # Near end termination(s) - terminations = self.draw_terminations(near_ends) + near_terminations = self.draw_terminations(near_ends, parent_object_nodes) + self.cursor += CABLE_HEIGHT # Connector (a Cable or WirelessLink) if links: - link_cables = {} - fanin = False - fanout = False - # Determine if we have fanins or fanouts - if len(near_ends) > len(set(links)): - self.cursor += FANOUT_HEIGHT - fanin = True - if len(far_ends) > len(set(links)): - fanout = True - cursor = self.cursor - for link in links: - # Cable - if type(link) is Cable and not link_cables.get(link.pk): - # Reset cursor - self.cursor = cursor - # Generate a list of terminations connected to this cable - near_end_link_terminations = [term for term in terminations if term.object.cable == link] - # Draw the cable - cable = self.draw_cable(link, near_end_link_terminations, cable_count=len(links)) - # Add cable to the list of cables - link_cables.update({link.pk: cable}) - # Add cable to drawing - self.connectors.append(cable) + parent_object_nodes, far_terminations = self.draw_far_objects(set(end.parent_object for end in far_ends), far_ends) + for cable in links: + # Fill in labels and description with all available data + description = [ + f"Link {cable}", + cable.get_status_display() + ] + near = [] + far = [] + color = '000000' + if cable.description: + description.append(f"{cable.description}") + if isinstance(cable, Cable): + labels = [f"{cable}"] if len(links) > 2 else [f"Cable {cable}", cable.get_status_display()] + if cable.type: + description.append(cable.get_type_display()) + if cable.length and cable.length_unit: + description.append(f"{cable.length} {cable.get_length_unit_display()}") + color = cable.color or '000000' - # Draw fan-ins - if len(near_ends) > 1 and fanin: - for term in terminations: - if term.object.cable == link: - self.draw_fanin(term, cable) + # Collect all connected nodes to this cable + near = [term for term in near_terminations if term.object in cable.a_terminations] + far = [term for term in far_terminations if term.object in cable.b_terminations] + if not (near and far): + # a and b terminations may be swapped + near = [term for term in near_terminations if term.object in cable.b_terminations] + far = [term for term in far_terminations if term.object in cable.a_terminations] + elif isinstance(cable, WirelessLink): + labels = [f"{cable}"] if len(links) > 2 else [f"Wireless {cable}", cable.get_status_display()] + if cable.ssid: + description.append(f"{cable.ssid}") + near = [term for term in near_terminations if term.object == cable.interface_a] + far = [term for term in far_terminations if term.object == cable.interface_b] + if not (near and far): + # a and b terminations may be swapped + near = [term for term in near_terminations if term.object == cable.interface_b] + far = [term for term in far_terminations if term.object == cable.interface_a] - # WirelessLink - elif type(link) is WirelessLink: - wirelesslink = self.draw_wirelesslink(link) - self.connectors.append(wirelesslink) + # Select most-probable start and end position + start = near[0].bottom_center + end = far[0].top_center + text_offset = 0 - # Far end termination(s) - if len(far_ends) > 1: - if fanout: - self.cursor += FANOUT_HEIGHT - terminations = self.draw_terminations(far_ends) - for term in terminations: - if hasattr(term.object, 'cable') and link_cables.get(term.object.cable.pk): - self.draw_fanout(term, link_cables.get(term.object.cable.pk)) - else: - self.draw_terminations(far_ends) - elif far_ends: - self.draw_terminations(far_ends) - else: - # Link is not connected to anything - break + if len(near) > 1: + # Handle Fan-In - change start position to be directly below start + start = (end[0], start[1] + FANOUT_HEIGHT + FANOUT_LEG_HEIGHT) + self.draw_fanin(start, near, color) + text_offset -= FANOUT_HEIGHT + FANOUT_LEG_HEIGHT + elif len(far) > 1: + # Handle Fan-Out - change end position to be directly above end + end = (start[0], end[1] - FANOUT_HEIGHT - FANOUT_LEG_HEIGHT) + self.draw_fanout(end, far, color) + text_offset -= FANOUT_HEIGHT - # Far end parent - parent_objects = set(end.parent_object for end in far_ends) - self.draw_parent_objects(parent_objects) + # Create the connector + connector = Connector( + start=start, + end=end, + color=color, + wireless=isinstance(cable, WirelessLink), + url=f'{self.base_url}{cable.get_absolute_url()}', + text_offset=text_offset, + labels=labels, + description=description + ) + self.connectors.append(connector) # Render a far-end object not connected via a link (e.g. a ProviderNetwork or Site associated with # a CircuitTermination) elif far_ends: - # Attachment attachment = self.draw_attachment() self.connectors.append(attachment) # Object - self.draw_parent_objects(far_ends) + parent_object_nodes = self.draw_parent_objects(far_ends) # Determine drawing size self.drawing = svgwrite.Drawing( diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 98dcfcb3c..800b55bf1 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -51,34 +51,6 @@ def get_cabletermination_row_class(record): return '' -def get_interface_row_class(record): - if not record.enabled: - return 'danger' - elif record.is_virtual: - return 'primary' - return get_cabletermination_row_class(record) - - -def get_interface_state_attribute(record): - """ - Get interface enabled state as string to attach to DOM element. - """ - if record.enabled: - return 'enabled' - else: - return 'disabled' - - -def get_interface_connected_attribute(record): - """ - Get interface disconnected state as string to attach to DOM element. - """ - if record.mark_connected or record.cable: - return 'connected' - else: - return 'disconnected' - - # # Device roles # @@ -706,11 +678,12 @@ class DeviceInterfaceTable(InterfaceTable): 'cable', 'connection', ) row_attrs = { - 'class': get_interface_row_class, 'data-name': lambda record: record.name, - 'data-enabled': get_interface_state_attribute, - 'data-type': lambda record: record.type, - 'data-connected': get_interface_connected_attribute + 'data-enabled': lambda record: "enabled" if record.enabled else "disabled", + 'data-virtual': lambda record: "true" if record.is_virtual else "false", + 'data-mark-connected': lambda record: "true" if record.mark_connected else "false", + 'data-cable-status': lambda record: record.cable.status if record.cable else "", + 'data-type': lambda record: record.type } diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d0e92ff56..805e9d881 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1656,6 +1656,7 @@ class InventoryItemTemplateCreateView(generic.ComponentCreateView): queryset = InventoryItemTemplate.objects.all() form = forms.InventoryItemTemplateCreateForm model_form = forms.InventoryItemTemplateForm + template_name = 'dcim/inventoryitemtemplate_edit.html' def alter_object(self, instance, request): # Set component (if any) @@ -1673,6 +1674,7 @@ class InventoryItemTemplateCreateView(generic.ComponentCreateView): class InventoryItemTemplateEditView(generic.ObjectEditView): queryset = InventoryItemTemplate.objects.all() form = forms.InventoryItemTemplateForm + template_name = 'dcim/inventoryitemtemplate_edit.html' @register_model_view(InventoryItemTemplate, 'delete') @@ -3181,34 +3183,29 @@ class CableView(generic.ObjectView): class CableEditView(generic.ObjectEditView): queryset = Cable.objects.all() template_name = 'dcim/cable_edit.html' + htmx_template_name = 'dcim/htmx/cable_edit.html' - def dispatch(self, request, *args, **kwargs): - - # If creating a new Cable, initialize the form class using URL query params - if 'pk' not in kwargs: - self.form = forms.get_cable_form( - a_type=CABLE_TERMINATION_TYPES.get(request.GET.get('a_terminations_type')), - b_type=CABLE_TERMINATION_TYPES.get(request.GET.get('b_terminations_type')) - ) - - return super().dispatch(request, *args, **kwargs) - - def get_object(self, **kwargs): + def alter_object(self, obj, request, url_args, url_kwargs): """ - Hack into get_object() to set the form class when editing an existing Cable, since ObjectEditView + Hack into alter_object() to set the form class when editing an existing Cable, since ObjectEditView doesn't currently provide a hook for dynamic class resolution. """ - obj = super().get_object(**kwargs) + a_terminations_type = CABLE_TERMINATION_TYPES.get( + request.GET.get('a_terminations_type') or request.POST.get('a_terminations_type') + ) + b_terminations_type = CABLE_TERMINATION_TYPES.get( + request.GET.get('b_terminations_type') or request.POST.get('b_terminations_type') + ) if obj.pk: - # TODO: Optimize this logic - termination_a = obj.terminations.filter(cable_end='A').first() - a_type = termination_a.termination._meta.model if termination_a else None - termination_b = obj.terminations.filter(cable_end='B').first() - b_type = termination_b.termination._meta.model if termination_b else None - self.form = forms.get_cable_form(a_type, b_type) + if not a_terminations_type and (termination_a := obj.terminations.filter(cable_end='A').first()): + a_terminations_type = termination_a.termination._meta.model + if not b_terminations_type and (termination_b := obj.terminations.filter(cable_end='B').first()): + b_terminations_type = termination_b.termination._meta.model - return obj + self.form = forms.get_cable_form(a_terminations_type, b_terminations_type) + + return super().alter_object(obj, request, url_args, url_kwargs) def get_extra_addanother_params(self, request): diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 8f00e11d9..43618506d 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -89,8 +89,11 @@ class EventRuleSerializer(NetBoxModelSerializer): # We need to manually instantiate the serializer for scripts if instance.action_type == EventRuleActionChoices.SCRIPT: script_name = instance.action_parameters['script_name'] - script = instance.action_object.scripts[script_name]() - return NestedScriptSerializer(script, context=context).data + if script_name in instance.action_object.scripts: + script = instance.action_object.scripts[script_name]() + return NestedScriptSerializer(script, context=context).data + else: + return None else: serializer = get_serializer_for_model( model=instance.action_object_type.model_class(), diff --git a/netbox/extras/forms/bulk_import.py b/netbox/extras/forms/bulk_import.py index 59ccc2bf9..2baf373c0 100644 --- a/netbox/extras/forms/bulk_import.py +++ b/netbox/extras/forms/bulk_import.py @@ -116,6 +116,12 @@ class CustomLinkImportForm(CSVModelForm): queryset=ContentType.objects.with_feature('custom_links'), help_text=_("One or more assigned object types") ) + button_class = CSVChoiceField( + label=_('button class'), + required=False, + choices=CustomLinkButtonClassChoices, + help_text=_('The class of the first link in a group will be used for the dropdown button') + ) class Meta: model = CustomLink diff --git a/netbox/extras/forms/model_forms.py b/netbox/extras/forms/model_forms.py index 8f9face41..70b7a78a4 100644 --- a/netbox/extras/forms/model_forms.py +++ b/netbox/extras/forms/model_forms.py @@ -265,6 +265,7 @@ class EventRuleForm(NetBoxModelForm): required=False, help_text=_('Enter parameters to pass to the action in JSON format.') ) + comments = CommentField() fieldsets = ( (_('Event Rule'), ('name', 'description', 'content_types', 'enabled', 'tags')), diff --git a/netbox/extras/migrations/0091_create_managedfiles.py b/netbox/extras/migrations/0091_create_managedfiles.py index 79a80821f..c37ef7022 100644 --- a/netbox/extras/migrations/0091_create_managedfiles.py +++ b/netbox/extras/migrations/0091_create_managedfiles.py @@ -50,6 +50,7 @@ class Migration(migrations.Migration): ], options={ 'proxy': True, + 'ordering': ('file_root', 'file_path'), 'indexes': [], 'constraints': [], }, @@ -61,6 +62,7 @@ class Migration(migrations.Migration): ], options={ 'proxy': True, + 'ordering': ('file_root', 'file_path'), 'indexes': [], 'constraints': [], }, diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index e78d1af23..c316a1c17 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -1,4 +1,5 @@ import decimal +import json import re from datetime import datetime, date @@ -484,7 +485,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): # JSON elif self.type == CustomFieldTypeChoices.TYPE_JSON: - field = JSONField(required=required, initial=initial) + field = JSONField(required=required, initial=json.dumps(initial) if initial else '') # Object elif self.type == CustomFieldTypeChoices.TYPE_OBJECT: diff --git a/netbox/extras/models/reports.py b/netbox/extras/models/reports.py index f6228ef24..f3fa1e888 100644 --- a/netbox/extras/models/reports.py +++ b/netbox/extras/models/reports.py @@ -43,6 +43,7 @@ class ReportModule(PythonModuleMixin, JobsMixin, ManagedFile): class Meta: proxy = True + ordering = ('file_root', 'file_path') verbose_name = _('report module') verbose_name_plural = _('report modules') @@ -52,7 +53,7 @@ class ReportModule(PythonModuleMixin, JobsMixin, ManagedFile): def __str__(self): return self.python_name - @cached_property + @property def reports(self): def _get_name(cls): diff --git a/netbox/extras/models/scripts.py b/netbox/extras/models/scripts.py index 93275acda..f0a0171d6 100644 --- a/netbox/extras/models/scripts.py +++ b/netbox/extras/models/scripts.py @@ -2,6 +2,7 @@ import inspect import logging from functools import cached_property +from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -41,8 +42,16 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile): """ objects = ScriptModuleManager() + event_rules = GenericRelation( + to='extras.EventRule', + content_type_field='action_object_type', + object_id_field='action_object_id', + for_concrete_model=False + ) + class Meta: proxy = True + ordering = ('file_root', 'file_path') verbose_name = _('script module') verbose_name_plural = _('script modules') diff --git a/netbox/extras/models/tags.py b/netbox/extras/models/tags.py index 3aba6df60..97b9087c5 100644 --- a/netbox/extras/models/tags.py +++ b/netbox/extras/models/tags.py @@ -37,7 +37,7 @@ class Tag(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel, TagBase): to='contenttypes.ContentType', related_name='+', blank=True, - help_text=_("The object type(s) to which this this tag can be applied.") + help_text=_("The object type(s) to which this tag can be applied.") ) clone_fields = ( diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index 7d86472c9..d47903f88 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -24,6 +24,7 @@ from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator, from utilities.exceptions import AbortScript, AbortTransaction from utilities.forms import add_blank_choice from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField +from utilities.forms.widgets import DatePicker, DateTimePicker from .context_managers import event_tracking from .forms import ScriptForm @@ -31,6 +32,8 @@ __all__ = ( 'BaseScript', 'BooleanVar', 'ChoiceVar', + 'DateVar', + 'DateTimeVar', 'FileVar', 'IntegerVar', 'IPAddressVar', @@ -172,6 +175,28 @@ class ChoiceVar(ScriptVariable): self.field_attrs['choices'] = add_blank_choice(choices) +class DateVar(ScriptVariable): + """ + A date. + """ + form_field = forms.DateField + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.form_field.widget = DatePicker() + + +class DateTimeVar(ScriptVariable): + """ + A date and a time. + """ + form_field = forms.DateTimeField + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.form_field.widget = DateTimePicker() + + class MultiChoiceVar(ScriptVariable): """ Like ChoiceVar, but allows for the selection of multiple choices. diff --git a/netbox/extras/tables/tables.py b/netbox/extras/tables/tables.py index 8482c5e24..621dfd26a 100644 --- a/netbox/extras/tables/tables.py +++ b/netbox/extras/tables/tables.py @@ -414,15 +414,35 @@ class ConfigTemplateTable(NetBoxTable): tags = columns.TagColumn( url_name='extras:configtemplate_list' ) + role_count = columns.LinkedCountColumn( + viewname='dcim:devicerole_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Device Roles') + ) + platform_count = columns.LinkedCountColumn( + viewname='dcim:platform_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Platforms') + ) + device_count = columns.LinkedCountColumn( + viewname='dcim:device_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Devices') + ) + vm_count = columns.LinkedCountColumn( + viewname='virtualization:virtualmachine_list', + url_params={'config_template_id': 'pk'}, + verbose_name=_('Virtual Machines') + ) class Meta(NetBoxTable.Meta): model = ConfigTemplate fields = ( - 'pk', 'id', 'name', 'description', 'data_source', 'data_file', 'data_synced', 'created', 'last_updated', - 'tags', + 'pk', 'id', 'name', 'description', 'data_source', 'data_file', 'data_synced', 'role_count', + 'platform_count', 'device_count', 'vm_count', 'created', 'last_updated', 'tags', ) default_columns = ( - 'pk', 'name', 'description', 'is_synced', + 'pk', 'name', 'description', 'is_synced', 'device_count', 'vm_count', ) diff --git a/netbox/extras/tests/test_scripts.py b/netbox/extras/tests/test_scripts.py index 64971f1dc..bed8f0fc5 100644 --- a/netbox/extras/tests/test_scripts.py +++ b/netbox/extras/tests/test_scripts.py @@ -1,4 +1,5 @@ import tempfile +from datetime import date, datetime, timezone from django.core.files.uploadedfile import SimpleUploadedFile from django.test import TestCase @@ -322,3 +323,47 @@ class ScriptVariablesTest(TestCase): form = TestScript().as_form(data, None) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data['var1'], IPNetwork(data['var1'])) + + def test_datevar(self): + + class TestScript(Script): + + var1 = DateVar() + var2 = DateVar(required=False) + + # Test date validation + data = {'var1': 'not a date'} + form = TestScript().as_form(data, None) + self.assertFalse(form.is_valid()) + self.assertIn('var1', form.errors) + + # Validate valid data + input_date = date(2024, 4, 1) + data = {'var1': input_date} + form = TestScript().as_form(data, None) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data['var1'], input_date) + # Validate required=False works for this Var type + self.assertEqual(form.cleaned_data['var2'], None) + + def test_datetimevar(self): + + class TestScript(Script): + + var1 = DateTimeVar() + var2 = DateTimeVar(required=False) + + # Test datetime validation + data = {'var1': 'not a datetime'} + form = TestScript().as_form(data, None) + self.assertFalse(form.is_valid()) + self.assertIn('var1', form.errors) + + # Validate valid data + input_datetime = datetime(2024, 4, 1, 8, 0, 0, 0, timezone.utc) + data = {'var1': input_datetime} + form = TestScript().as_form(data, None) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data['var1'], input_datetime) + # Validate required=False works for this Var type + self.assertEqual(form.cleaned_data['var2'], None) diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 2bf5f349b..2e3bd54f0 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -13,6 +13,7 @@ from core.choices import JobStatusChoices, ManagedFileRootPathChoices from core.forms import ManagedFileForm from core.models import Job from core.tables import JobTable +from dcim.models import Device, DeviceRole, Platform from extras.dashboard.forms import DashboardWidgetAddForm, DashboardWidgetForm from extras.dashboard.utils import get_widget_class from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -24,6 +25,7 @@ from utilities.rqworker import get_workers_for_queue from utilities.templatetags.builtins.filters import render_markdown from utilities.utils import copy_safe_request, count_related, get_viewname, normalize_querydict, shallow_compare_dict from utilities.views import ContentTypePermissionRequiredMixin, register_model_view +from virtualization.models import VirtualMachine from . import filtersets, forms, tables from .forms.reports import ReportForm from .models import * @@ -624,7 +626,12 @@ class ObjectConfigContextView(generic.ObjectView): # class ConfigTemplateListView(generic.ObjectListView): - queryset = ConfigTemplate.objects.all() + queryset = ConfigTemplate.objects.annotate( + device_count=count_related(Device, 'config_template'), + vm_count=count_related(VirtualMachine, 'config_template'), + role_count=count_related(DeviceRole, 'config_template'), + platform_count=count_related(Platform, 'config_template'), + ) filterset = filtersets.ConfigTemplateFilterSet filterset_form = forms.ConfigTemplateFilterForm table = tables.ConfigTemplateTable @@ -1035,7 +1042,7 @@ class ReportListView(ContentTypePermissionRequiredMixin, View): return 'extras.view_report' def get(self, request): - report_modules = ReportModule.objects.restrict(request.user) + report_modules = ReportModule.objects.restrict(request.user).prefetch_related('data_source', 'data_file') return render(request, 'extras/report_list.html', { 'model': ReportModule, @@ -1210,7 +1217,7 @@ class ScriptListView(ContentTypePermissionRequiredMixin, View): return 'extras.view_script' def get(self, request): - script_modules = ScriptModule.objects.restrict(request.user) + script_modules = ScriptModule.objects.restrict(request.user).prefetch_related('data_source', 'data_file') return render(request, 'extras/script_list.html', { 'model': ScriptModule, diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 33aa55a93..8dca73d94 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -262,7 +262,7 @@ class AvailableVLANSerializer(serializers.Serializer): Representation of a VLAN which does not exist in the database. """ vid = serializers.IntegerField(read_only=True) - group = NestedVLANGroupSerializer(read_only=True) + group = NestedVLANGroupSerializer(read_only=True, allow_null=True) def to_representation(self, instance): return { @@ -348,9 +348,9 @@ class AvailablePrefixSerializer(serializers.Serializer): """ Representation of a prefix which does not exist in the database. """ - family = serializers.IntegerField(read_only=True) + family = serializers.IntegerField(read_only=True, allow_null=True) prefix = serializers.CharField(read_only=True) - vrf = NestedVRFSerializer(read_only=True) + vrf = NestedVRFSerializer(read_only=True, allow_null=True) def to_representation(self, instance): if self.context.get('vrf'): @@ -429,9 +429,9 @@ class AvailableIPSerializer(serializers.Serializer): """ Representation of an IP address which does not exist in the database. """ - family = serializers.IntegerField(read_only=True) + family = serializers.IntegerField(read_only=True, allow_null=True) address = serializers.CharField(read_only=True) - vrf = NestedVRFSerializer(read_only=True) + vrf = NestedVRFSerializer(read_only=True, allow_null=True) description = serializers.CharField(required=False) def to_representation(self, instance): diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index 62e2b9eca..c5a9331ab 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -119,7 +119,7 @@ class IPRangeViewSet(NetBoxModelViewSet): class IPAddressViewSet(NetBoxModelViewSet): queryset = IPAddress.objects.prefetch_related( - 'vrf__tenant', 'tenant', 'nat_inside', 'nat_outside', 'tags', 'assigned_object' + 'vrf__tenant', 'tenant', 'nat_inside', 'nat_outside', 'tags', 'assigned_object', 'assigned_object_type' ) serializer_class = serializers.IPAddressSerializer filterset_class = filtersets.IPAddressFilterSet diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index 0627a6765..bfff1f4f4 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -378,7 +378,7 @@ class IPAddressImportForm(NetBoxModelImportForm): # Set as primary for device/VM if self.cleaned_data.get('is_primary'): - parent = self.cleaned_data['device'] or self.cleaned_data['virtual_machine'] + parent = self.cleaned_data.get('device') or self.cleaned_data.get('virtual_machine') if self.instance.address.version == 4: parent.primary_ip4 = ipaddress elif self.instance.address.version == 6: diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index 71aa32d52..a0e004298 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -507,6 +507,24 @@ class FHRPGroupAssignmentForm(BootstrapMixin, forms.ModelForm): for ipaddress in ipaddresses: self.fields['group'].widget.add_query_param('related_ip', ipaddress.pk) + def clean_group(self): + group = self.cleaned_data['group'] + + conflicting_assignments = FHRPGroupAssignment.objects.filter( + interface_type=self.instance.interface_type, + interface_id=self.instance.interface_id, + group=group + ) + if self.instance.id: + conflicting_assignments = conflicting_assignments.exclude(id=self.instance.id) + + if conflicting_assignments.exists(): + raise forms.ValidationError( + _('Assignment already exists') + ) + + return group + class VLANGroupForm(NetBoxModelForm): scope_type = ContentTypeChoiceField( diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index ca9592d6e..e7fa90d8f 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -692,7 +692,7 @@ class IPRange(PrimaryModel): ip.address.ip for ip in self.get_child_ips() ]).size - return int(float(child_count) / self.size * 100) + return min(float(child_count) / self.size * 100, 100) class IPAddress(PrimaryModel): diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index 0b0e2036e..84b6fbbca 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -1,3 +1,5 @@ +import json + from django import forms from django.contrib.contenttypes.models import ContentType from django.db.models import Q @@ -34,7 +36,11 @@ class NetBoxModelForm(BootstrapMixin, CheckLastUpdatedMixin, CustomFieldsMixin, def _get_form_field(self, customfield): if self.instance.pk: form_field = customfield.to_form_field(set_initial=False) - form_field.initial = self.instance.custom_field_data.get(customfield.name, None) + initial = self.instance.custom_field_data.get(customfield.name) + if customfield.type == CustomFieldTypeChoices.TYPE_JSON: + form_field.initial = json.dumps(initial) + else: + form_field.initial = initial return form_field return customfield.to_form_field() @@ -73,17 +79,12 @@ class NetBoxModelImportForm(CSVModelForm, NetBoxModelForm): """ Base form for creating a NetBox objects from CSV data. Used for bulk importing. """ - id = forms.IntegerField( - label=_('Id'), - required=False, - help_text='Numeric ID of an existing object to update (if not creating a new object)' - ) tags = CSVModelMultipleChoiceField( label=_('Tags'), queryset=Tag.objects.all(), required=False, to_field_name='slug', - help_text='Tag slugs separated by commas, encased with double quotes (e.g. "tag1,tag2,tag3")' + help_text=_('Tag slugs separated by commas, encased with double quotes (e.g. "tag1,tag2,tag3")') ) def _get_custom_fields(self, content_type): diff --git a/netbox/netbox/search/__init__.py b/netbox/netbox/search/__init__.py index 590188f21..7537c0419 100644 --- a/netbox/netbox/search/__init__.py +++ b/netbox/netbox/search/__init__.py @@ -59,9 +59,10 @@ class SearchIndex: @staticmethod def get_field_value(instance, field_name): """ - Return the value of the specified model field as a string. + Return the value of the specified model field as a string (or None). """ - return str(getattr(instance, field_name)) + if value := getattr(instance, field_name): + return str(value) @classmethod def get_category(cls): diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index e662561ee..23803ccc1 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -28,7 +28,7 @@ from netbox.plugins import PluginConfig # Environment setup # -VERSION = '3.7.5-dev' +VERSION = '3.7.8-dev' # Hostname HOSTNAME = platform.node() @@ -160,6 +160,9 @@ RQ_RETRY_INTERVAL = getattr(configuration, 'RQ_RETRY_INTERVAL', 60) RQ_RETRY_MAX = getattr(configuration, 'RQ_RETRY_MAX', 0) SCRIPTS_ROOT = getattr(configuration, 'SCRIPTS_ROOT', os.path.join(BASE_DIR, 'scripts')).rstrip('/') SEARCH_BACKEND = getattr(configuration, 'SEARCH_BACKEND', 'netbox.search.backends.CachedValueSearchBackend') +SECURE_HSTS_INCLUDE_SUBDOMAINS = getattr(configuration, 'SECURE_HSTS_INCLUDE_SUBDOMAINS', False) +SECURE_HSTS_PRELOAD = getattr(configuration, 'SECURE_HSTS_PRELOAD', False) +SECURE_HSTS_SECONDS = getattr(configuration, 'SECURE_HSTS_SECONDS', 0) SECURE_SSL_REDIRECT = getattr(configuration, 'SECURE_SSL_REDIRECT', False) SENTRY_DSN = getattr(configuration, 'SENTRY_DSN', None) SENTRY_ENABLED = getattr(configuration, 'SENTRY_ENABLED', False) diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index 984358911..48028f248 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -1,6 +1,7 @@ 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.decorators.csrf import csrf_exempt from django.views.static import serve from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView @@ -56,7 +57,13 @@ _patterns = [ path('api/wireless/', include('wireless.api.urls')), path('api/status/', StatusView.as_view(), name='api-status'), - path('api/schema/', SpectacularAPIView.as_view(), name='schema'), + path( + "api/schema/", + cache_page(timeout=86400, key_prefix=f"api_schema_{settings.VERSION}")( + SpectacularAPIView.as_view() + ), + name="schema", + ), path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='api_docs'), path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='api_redocs'), diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 6277e1c5b..57ea45274 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -167,6 +167,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): """ template_name = 'generic/object_edit.html' form = None + htmx_template_name = 'htmx/form.html' def dispatch(self, request, *args, **kwargs): # Determine required permission based on whether we are editing an existing object @@ -228,7 +229,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): # If this is an HTMX request, return only the rendered form HTML if is_htmx(request): - return render(request, 'htmx/form.html', { + return render(request, self.htmx_template_name, { 'form': form, }) @@ -339,10 +340,14 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView): # Compile a mapping of models to instances dependent_objects = defaultdict(list) - for model, instance in collector.instances_with_model(): + for model, instances in collector.instances_with_model(): + # Ignore relations to auto-created models (e.g. many-to-many mappings) + if model._meta.auto_created: + continue # Omit the root object - if instance != obj: - dependent_objects[model].append(instance) + if instances == obj: + continue + dependent_objects[model].append(instances) return dict(dependent_objects) diff --git a/netbox/project-static/dist/netbox-dark.css b/netbox/project-static/dist/netbox-dark.css index 84d1600e3..42f40aeb8 100644 Binary files a/netbox/project-static/dist/netbox-dark.css and b/netbox/project-static/dist/netbox-dark.css differ diff --git a/netbox/project-static/dist/netbox-light.css b/netbox/project-static/dist/netbox-light.css index 9048a3286..df5874b48 100644 Binary files a/netbox/project-static/dist/netbox-light.css and b/netbox/project-static/dist/netbox-light.css differ diff --git a/netbox/project-static/dist/netbox-print.css b/netbox/project-static/dist/netbox-print.css index 7a3cd7859..6a0bec9f9 100644 Binary files a/netbox/project-static/dist/netbox-print.css and b/netbox/project-static/dist/netbox-print.css differ diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 97c4ba79c..b6dd11eda 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 bbb2a3cc0..642874c29 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/src/buttons/connectionToggle.ts b/netbox/project-static/src/buttons/connectionToggle.ts index 74b32dc3a..ed119f738 100644 --- a/netbox/project-static/src/buttons/connectionToggle.ts +++ b/netbox/project-static/src/buttons/connectionToggle.ts @@ -7,10 +7,10 @@ import { isTruthy, apiPatch, hasError, getElements } from '../util'; * * @param element Connection Toggle Button Element */ -function toggleConnection(element: HTMLButtonElement): void { +function setConnectionStatus(element: HTMLButtonElement, status: string): void { + // Get the button's row to change its data-cable-status attribute + const row = element.parentElement?.parentElement as HTMLTableRowElement; const url = element.getAttribute('data-url'); - const connected = element.classList.contains('connected'); - const status = connected ? 'planned' : 'connected'; if (isTruthy(url)) { apiPatch(url, { status }).then(res => { @@ -19,34 +19,18 @@ function toggleConnection(element: HTMLButtonElement): void { createToast('danger', 'Error', res.error).show(); return; } else { - // Get the button's row to change its styles. - const row = element.parentElement?.parentElement as HTMLTableRowElement; - // Get the button's icon to change its CSS class. - const icon = element.querySelector('i.mdi, span.mdi') as HTMLSpanElement; - if (connected) { - row.classList.remove('success'); - row.classList.add('info'); - element.classList.remove('connected', 'btn-warning'); - element.classList.add('btn-info'); - element.title = 'Mark Installed'; - icon.classList.remove('mdi-lan-disconnect'); - icon.classList.add('mdi-lan-connect'); - } else { - row.classList.remove('info'); - row.classList.add('success'); - element.classList.remove('btn-success'); - element.classList.add('connected', 'btn-warning'); - element.title = 'Mark Installed'; - icon.classList.remove('mdi-lan-connect'); - icon.classList.add('mdi-lan-disconnect'); - } + // Update cable status in DOM + row.setAttribute('data-cable-status', status); } }); } } export function initConnectionToggle(): void { - for (const element of getElements('button.cable-toggle')) { - element.addEventListener('click', () => toggleConnection(element)); + for (const element of getElements('button.mark-planned')) { + element.addEventListener('click', () => setConnectionStatus(element, 'planned')); + } + for (const element of getElements('button.mark-installed')) { + element.addEventListener('click', () => setConnectionStatus(element, 'connected')); } } diff --git a/netbox/project-static/styles/netbox.scss b/netbox/project-static/styles/netbox.scss index a38633b5c..360652912 100644 --- a/netbox/project-static/styles/netbox.scss +++ b/netbox/project-static/styles/netbox.scss @@ -1075,4 +1075,41 @@ html { display: none; } } -} + + // Apply row colours to interface lists + &[data-netbox-url-name='device_interfaces'] { + tr[data-cable-status=connected] { + background-color: rgba(map.get($theme-colors, "green"), 0.15); + } + + tr[data-cable-status=planned] { + background-color: rgba(map.get($theme-colors, "blue"), 0.15); + } + + tr[data-cable-status=decommissioning] { + background-color: rgba(map.get($theme-colors, "yellow"), 0.15); + } + + tr[data-mark-connected=true] { + background-color: rgba(map.get($theme-colors, "success"), 0.15); + } + + tr[data-virtual=true] { + background-color: rgba(map.get($theme-colors, "primary"), 0.15); + } + + tr[data-enabled=disabled] { + background-color: rgba(map.get($theme-colors, "danger"), 0.15); + } + + // Only show the correct button depending on the cable status + tr[data-cable-status=connected] button.mark-installed { + display: none; + } + + tr:not([data-cable-status=connected]) button.mark-planned { + display: none; + } + + } +} \ No newline at end of file diff --git a/netbox/templates/base/layout.html b/netbox/templates/base/layout.html index bb3bbc0e1..53dec6369 100644 --- a/netbox/templates/base/layout.html +++ b/netbox/templates/base/layout.html @@ -81,7 +81,7 @@ Blocks: {% if config.MAINTENANCE_MODE and config.BANNER_MAINTENANCE %} {% endif %} diff --git a/netbox/templates/dcim/cable_edit.html b/netbox/templates/dcim/cable_edit.html index 14d763dc3..fbe877d87 100644 --- a/netbox/templates/dcim/cable_edit.html +++ b/netbox/templates/dcim/cable_edit.html @@ -1,90 +1,5 @@ {% extends 'generic/object_edit.html' %} -{% load static %} -{% load helpers %} -{% load form_helpers %} -{% load i18n %} {% block form %} - - {# A side termination #} -
-
-
{% trans "A Side" %}
-
- {% if 'termination_a_device' in form.fields %} - {% render_field form.termination_a_device %} - {% endif %} - {% if 'termination_a_powerpanel' in form.fields %} - {% render_field form.termination_a_powerpanel %} - {% endif %} - {% if 'termination_a_circuit' in form.fields %} - {% render_field form.termination_a_circuit %} - {% endif %} - {% render_field form.a_terminations %} -
- - {# B side termination #} -
-
-
{% trans "B Side" %}
-
- {% if 'termination_b_device' in form.fields %} - {% render_field form.termination_b_device %} - {% endif %} - {% if 'termination_b_powerpanel' in form.fields %} - {% render_field form.termination_b_powerpanel %} - {% endif %} - {% if 'termination_b_circuit' in form.fields %} - {% render_field form.termination_b_circuit %} - {% endif %} - {% render_field form.b_terminations %} -
- - {# Cable attributes #} -
-
-
{% trans "Cable" %}
-
- {% render_field form.status %} - {% render_field form.type %} - {% render_field form.label %} - {% render_field form.description %} - {% render_field form.color %} -
- -
- {{ form.length }} -
-
- {{ form.length_unit }} -
-
-
- {% render_field form.tags %} -
- -
-
-
{% trans "Tenancy" %}
-
- {% render_field form.tenant_group %} - {% render_field form.tenant %} -
- - {% if form.custom_fields %} -
-
-
{% trans "Custom Fields" %}
-
- {% render_custom_fields form %} -
- {% endif %} - - {% if form.comments %} -
-
{% trans "Comments" %}
- {% render_field form.comments %} -
- {% endif %} - + {% include 'dcim/htmx/cable_edit.html' %} {% endblock %} diff --git a/netbox/templates/dcim/device/base.html b/netbox/templates/dcim/device/base.html index 43d5c5ae9..90cb829ac 100644 --- a/netbox/templates/dcim/device/base.html +++ b/netbox/templates/dcim/device/base.html @@ -42,7 +42,7 @@ {% if perms.dcim.add_rearport %}
  • {% trans "Rear Ports" %}
  • {% endif %} - {% if perms.dcim.add_devicebay %} + {% if perms.dcim.add_modulebay %}
  • {% trans "Module Bays" %}
  • {% endif %} {% if perms.dcim.add_devicebay %} diff --git a/netbox/templates/dcim/htmx/cable_edit.html b/netbox/templates/dcim/htmx/cable_edit.html new file mode 100644 index 000000000..5f22fe372 --- /dev/null +++ b/netbox/templates/dcim/htmx/cable_edit.html @@ -0,0 +1,92 @@ +{% load static %} +{% load helpers %} +{% load form_helpers %} +{% load i18n %} + + +{# A side termination #} +
    +
    +
    {% trans "A Side" %}
    +
    + {% render_field form.a_terminations_type %} + {% if 'termination_a_device' in form.fields %} + {% render_field form.termination_a_device %} + {% endif %} + {% if 'termination_a_powerpanel' in form.fields %} + {% render_field form.termination_a_powerpanel %} + {% endif %} + {% if 'termination_a_circuit' in form.fields %} + {% render_field form.termination_a_circuit %} + {% endif %} + {% if 'a_terminations' in form.fields %} + {% render_field form.a_terminations %} + {% endif %} +
    + +{# B side termination #} +
    +
    +
    {% trans "B Side" %}
    +
    + {% render_field form.b_terminations_type %} + {% if 'termination_b_device' in form.fields %} + {% render_field form.termination_b_device %} + {% endif %} + {% if 'termination_b_powerpanel' in form.fields %} + {% render_field form.termination_b_powerpanel %} + {% endif %} + {% if 'termination_b_circuit' in form.fields %} + {% render_field form.termination_b_circuit %} + {% endif %} + {% if 'b_terminations' in form.fields %} + {% render_field form.b_terminations %} + {% endif %} +
    + +{# Cable attributes #} +
    +
    +
    {% trans "Cable" %}
    +
    + {% render_field form.status %} + {% render_field form.type %} + {% render_field form.label %} + {% render_field form.description %} + {% render_field form.color %} +
    + +
    + {{ form.length }} +
    +
    + {{ form.length_unit }} +
    +
    +
    + {% render_field form.tags %} +
    + +
    +
    +
    {% trans "Tenancy" %}
    +
    + {% render_field form.tenant_group %} + {% render_field form.tenant %} +
    + +{% if form.custom_fields %} +
    +
    +
    {% trans "Custom Fields" %}
    +
    + {% render_custom_fields form %} +
    +{% endif %} + +{% if form.comments %} +
    +
    {% trans "Comments" %}
    + {% render_field form.comments %} +
    +{% endif %} \ No newline at end of file diff --git a/netbox/templates/dcim/inc/cable_toggle_buttons.html b/netbox/templates/dcim/inc/cable_toggle_buttons.html index 4d8d995c4..1c5427337 100644 --- a/netbox/templates/dcim/inc/cable_toggle_buttons.html +++ b/netbox/templates/dcim/inc/cable_toggle_buttons.html @@ -1,12 +1,9 @@ {% load i18n %} {% if perms.dcim.change_cable %} - {% if cable.status == 'connected' %} - - {% else %} - - {% endif %} + + {% endif %} diff --git a/netbox/templates/dcim/inventoryitemtemplate_edit.html b/netbox/templates/dcim/inventoryitemtemplate_edit.html new file mode 100644 index 000000000..d3ac58e25 --- /dev/null +++ b/netbox/templates/dcim/inventoryitemtemplate_edit.html @@ -0,0 +1,104 @@ +{% extends 'generic/object_edit.html' %} +{% load static %} +{% load form_helpers %} +{% load helpers %} +{% load i18n %} + +{% block form %} +
    +
    +
    {% trans "Inventory Item" %}
    +
    + {% render_field form.device_type %} + {% render_field form.parent %} + {% render_field form.name %} + {% render_field form.label %} + {% render_field form.role %} + {% render_field form.description %} +
    + +
    +
    +
    {% trans "Hardware" %}
    +
    + {% render_field form.manufacturer %} + {% render_field form.part_id %} +
    + +
    +
    +
    {% trans "Component Assignment" %}
    +
    +
    + +
    +
    +
    + {% render_field form.consoleporttemplate %} +
    +
    + {% render_field form.consoleserverporttemplate %} +
    +
    + {% render_field form.frontporttemplate %} +
    +
    + {% render_field form.interfacetemplate %} +
    +
    + {% render_field form.poweroutlettemplate %} +
    +
    + {% render_field form.powerporttemplate %} +
    +
    + {% render_field form.rearporttemplate %} +
    +
    +
    + + {% if form.custom_fields %} +
    +
    +
    {% trans "Custom Fields" %}
    +
    + {% render_custom_fields form %} +
    + {% endif %} +{% endblock %} diff --git a/netbox/templates/extras/schema/devicetype_schema.jinja2 b/netbox/templates/extras/schema/devicetype_schema.jinja2 index b08ab24de..19cacab69 100644 --- a/netbox/templates/extras/schema/devicetype_schema.jinja2 +++ b/netbox/templates/extras/schema/devicetype_schema.jinja2 @@ -1,5 +1,7 @@ { "type": "object", + "$id": "urn:devicetype-library:generated-schema", + "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "definitions": { "airflow": { diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 80d8b317a..2a5a12ba7 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-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-22 19:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -60,8 +60,8 @@ msgid "Your preferences have been updated." msgstr "" #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "" @@ -71,8 +71,8 @@ msgid "Provisioning" msgstr "" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -81,7 +81,7 @@ msgid "Active" msgstr "" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "" @@ -94,26 +94,26 @@ msgstr "" msgid "Decommissioned" msgstr "" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 #: ipam/filtersets.py:896 virtualization/filtersets.py:45 -#: virtualization/filtersets.py:173 vpn/filtersets.py:330 +#: virtualization/filtersets.py:173 vpn/filtersets.py:341 msgid "Region (ID)" msgstr "" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 #: ipam/filtersets.py:312 ipam/filtersets.py:903 #: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:325 +#: vpn/filtersets.py:336 msgid "Region (slug)" msgstr "" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -121,7 +121,7 @@ msgstr "" msgid "Site group (ID)" msgstr "" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -131,7 +131,7 @@ msgid "Site group (slug)" msgstr "" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -154,8 +154,8 @@ msgstr "" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 ipam/tables/vlans.py:114 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 ipam/tables/vlans.py:114 #: ipam/tables/vlans.py:216 templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 #: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 @@ -172,17 +172,17 @@ msgstr "" #: virtualization/forms/model_forms.py:74 #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:335 +#: vpn/filtersets.py:346 msgid "Site (slug)" msgstr "" @@ -190,58 +190,64 @@ msgstr "" msgid "ASN (ID)" msgstr "" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" msgstr "" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 dcim/filtersets.py:209 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 dcim/filtersets.py:209 #: dcim/filtersets.py:284 dcim/filtersets.py:357 dcim/filtersets.py:927 #: dcim/filtersets.py:1232 dcim/filtersets.py:1727 dcim/filtersets.py:1969 #: dcim/filtersets.py:2028 ipam/filtersets.py:209 ipam/filtersets.py:329 #: ipam/filtersets.py:920 virtualization/filtersets.py:69 -#: virtualization/filtersets.py:197 vpn/filtersets.py:340 +#: virtualization/filtersets.py:197 vpn/filtersets.py:351 msgid "Site (ID)" msgstr "" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 -#: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 +#: netbox/forms/base.py:158 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 #: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:87 #: users/filtersets.py:21 users/filtersets.py:37 users/filtersets.py:69 -#: users/filtersets.py:117 utilities/forms/forms.py:99 +#: users/filtersets.py:117 utilities/forms/forms.py:105 msgid "Search" msgstr "" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -249,11 +255,11 @@ msgstr "" msgid "Circuit" msgstr "" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -360,8 +366,8 @@ msgstr "" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -373,18 +379,18 @@ msgstr "" msgid "Provider" msgstr "" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -396,7 +402,7 @@ msgid "Color" msgstr "" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -415,7 +421,7 @@ msgstr "" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -440,12 +446,12 @@ msgid "Type" msgstr "" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -459,8 +465,8 @@ msgstr "" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -468,7 +474,7 @@ msgstr "" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -487,7 +493,7 @@ msgstr "" #: virtualization/forms/bulk_edit.py:117 virtualization/forms/bulk_import.py:54 #: virtualization/forms/bulk_import.py:80 virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -498,7 +504,7 @@ msgid "Status" msgstr "" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -554,15 +560,15 @@ msgstr "" msgid "Tenant" msgstr "" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "" @@ -573,7 +579,7 @@ msgstr "" #: circuits/forms/bulk_edit.py:169 circuits/forms/model_forms.py:112 #: dcim/forms/model_forms.py:141 dcim/forms/model_forms.py:183 #: dcim/forms/model_forms.py:260 dcim/forms/model_forms.py:679 -#: dcim/forms/model_forms.py:1485 ipam/forms/model_forms.py:61 +#: dcim/forms/model_forms.py:1574 ipam/forms/model_forms.py:61 #: ipam/forms/model_forms.py:114 ipam/forms/model_forms.py:135 #: ipam/forms/model_forms.py:159 ipam/forms/model_forms.py:231 #: ipam/forms/model_forms.py:257 netbox/navigation/menu.py:38 @@ -595,7 +601,7 @@ msgstr "" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "" @@ -614,29 +620,30 @@ msgstr "" #: ipam/forms/bulk_import.py:258 ipam/forms/bulk_import.py:294 #: ipam/forms/bulk_import.py:460 virtualization/forms/bulk_import.py:56 #: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 +#: wireless/forms/bulk_import.py:45 msgid "Operational status" msgstr "" #: circuits/forms/bulk_import.py:104 dcim/forms/bulk_import.py:110 #: dcim/forms/bulk_import.py:155 dcim/forms/bulk_import.py:286 #: dcim/forms/bulk_import.py:428 dcim/forms/bulk_import.py:1171 -#: dcim/forms/bulk_import.py:1319 ipam/forms/bulk_import.py:41 -#: ipam/forms/bulk_import.py:70 ipam/forms/bulk_import.py:98 -#: ipam/forms/bulk_import.py:118 ipam/forms/bulk_import.py:138 -#: ipam/forms/bulk_import.py:167 ipam/forms/bulk_import.py:253 -#: ipam/forms/bulk_import.py:289 ipam/forms/bulk_import.py:455 -#: virtualization/forms/bulk_import.py:70 +#: dcim/forms/bulk_import.py:1319 dcim/forms/bulk_import.py:1383 +#: ipam/forms/bulk_import.py:41 ipam/forms/bulk_import.py:70 +#: ipam/forms/bulk_import.py:98 ipam/forms/bulk_import.py:118 +#: ipam/forms/bulk_import.py:138 ipam/forms/bulk_import.py:167 +#: ipam/forms/bulk_import.py:253 ipam/forms/bulk_import.py:289 +#: ipam/forms/bulk_import.py:455 virtualization/forms/bulk_import.py:70 #: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 #: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 msgid "Assigned tenant" msgstr "" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -660,7 +667,7 @@ msgstr "" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 templates/dcim/location.html:27 #: templates/dcim/powerpanel.html:27 templates/dcim/rack.html:29 @@ -670,13 +677,7 @@ msgstr "" msgid "Location" msgstr "" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -689,7 +690,7 @@ msgstr "" msgid "Contacts" msgstr "" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -704,7 +705,7 @@ msgstr "" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -714,7 +715,7 @@ msgstr "" msgid "Region" msgstr "" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -724,19 +725,15 @@ msgstr "" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -761,7 +758,7 @@ msgstr "" msgid "Attributes" msgstr "" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -782,7 +779,7 @@ msgstr "" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "" @@ -804,8 +801,8 @@ msgid "Unique circuit ID" msgstr "" #: circuits/models/circuits.py:67 core/models/data.py:55 core/models/jobs.py:85 -#: dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -883,7 +880,7 @@ msgstr "" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "" @@ -909,8 +906,8 @@ msgstr "" #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -923,7 +920,7 @@ msgstr "" #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -981,13 +978,13 @@ msgstr "" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1050,9 +1047,9 @@ msgstr "" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1087,7 +1084,7 @@ msgstr "" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1099,7 +1096,7 @@ msgstr "" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1118,6 +1115,10 @@ msgstr "" msgid "ASN Count" msgstr "" +#: core/api/views.py:39 +msgid "This user does not have permission to synchronize this data source." +msgstr "" + #: core/choices.py:18 msgid "New" msgstr "" @@ -1136,7 +1137,7 @@ msgid "Completed" msgstr "" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "" @@ -1218,7 +1219,7 @@ msgstr "" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1246,9 +1247,9 @@ msgstr "" msgid "Ignore rules" msgstr "" -#: core/forms/filtersets.py:26 core/forms/model_forms.py:95 -#: extras/forms/model_forms.py:167 extras/forms/model_forms.py:464 -#: extras/forms/model_forms.py:517 extras/tables/tables.py:149 +#: core/forms/filtersets.py:26 core/forms/model_forms.py:96 +#: extras/forms/model_forms.py:167 extras/forms/model_forms.py:465 +#: extras/forms/model_forms.py:518 extras/tables/tables.py:149 #: extras/tables/tables.py:368 extras/tables/tables.py:403 #: templates/core/datasource.html:31 #: templates/dcim/device/render_config.html:19 @@ -1325,95 +1326,95 @@ msgstr "" msgid "User" msgstr "" -#: core/forms/model_forms.py:52 core/tables/data.py:46 +#: core/forms/model_forms.py:53 core/tables/data.py:46 #: templates/core/datafile.html:36 templates/extras/report/base.html:33 #: templates/extras/script/base.html:32 templates/extras/script_result.html:45 msgid "Source" msgstr "" -#: core/forms/model_forms.py:56 +#: core/forms/model_forms.py:57 msgid "Backend Parameters" msgstr "" -#: core/forms/model_forms.py:94 +#: core/forms/model_forms.py:95 msgid "File Upload" msgstr "" -#: core/forms/model_forms.py:106 +#: core/forms/model_forms.py:107 msgid "Cannot upload a file and sync from an existing file" msgstr "" -#: core/forms/model_forms.py:108 +#: core/forms/model_forms.py:109 msgid "Must upload a file or select a data file to sync" msgstr "" -#: core/forms/model_forms.py:147 templates/core/configrevision.html:43 +#: core/forms/model_forms.py:151 templates/core/configrevision.html:43 #: templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:152 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 msgid "Power" msgstr "" -#: core/forms/model_forms.py:149 netbox/navigation/menu.py:142 +#: core/forms/model_forms.py:153 netbox/navigation/menu.py:142 #: templates/core/configrevision.html:79 msgid "IPAM" msgstr "" -#: core/forms/model_forms.py:150 netbox/navigation/menu.py:218 +#: core/forms/model_forms.py:154 netbox/navigation/menu.py:218 #: templates/core/configrevision.html:95 vpn/forms/bulk_edit.py:76 #: vpn/forms/filtersets.py:42 vpn/forms/model_forms.py:60 #: vpn/forms/model_forms.py:145 msgid "Security" msgstr "" -#: core/forms/model_forms.py:151 templates/core/configrevision.html:107 +#: core/forms/model_forms.py:155 templates/core/configrevision.html:107 msgid "Banners" msgstr "" -#: core/forms/model_forms.py:152 templates/core/configrevision.html:131 +#: core/forms/model_forms.py:156 templates/core/configrevision.html:131 msgid "Pagination" msgstr "" -#: core/forms/model_forms.py:153 extras/forms/model_forms.py:63 +#: core/forms/model_forms.py:157 extras/forms/model_forms.py:63 #: templates/core/configrevision.html:147 msgid "Validation" msgstr "" -#: core/forms/model_forms.py:154 templates/account/preferences.html:6 +#: core/forms/model_forms.py:158 templates/account/preferences.html:6 #: templates/core/configrevision.html:175 msgid "User Preferences" msgstr "" -#: core/forms/model_forms.py:155 dcim/forms/filtersets.py:658 +#: core/forms/model_forms.py:159 dcim/forms/filtersets.py:658 #: templates/core/configrevision.html:193 users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "" -#: core/forms/model_forms.py:158 +#: core/forms/model_forms.py:162 msgid "Config Revision" msgstr "" -#: core/forms/model_forms.py:197 +#: core/forms/model_forms.py:201 msgid "This parameter has been defined statically and cannot be modified." msgstr "" -#: core/forms/model_forms.py:205 +#: core/forms/model_forms.py:209 #, python-brace-format msgid "Current value: {value}" msgstr "" -#: core/forms/model_forms.py:207 +#: core/forms/model_forms.py:211 msgid " (default)" msgstr "" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "" @@ -1471,7 +1472,7 @@ msgstr "" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "" @@ -1644,7 +1645,7 @@ msgstr "" #: core/tables/jobs.py:10 dcim/tables/devicetypes.py:161 #: extras/tables/tables.py:174 extras/tables/tables.py:345 #: netbox/tables/tables.py:184 templates/dcim/virtualchassis_edit.html:53 -#: wireless/tables/wirelesslink.py:16 +#: utilities/forms/forms.py:74 wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "" @@ -1676,12 +1677,16 @@ msgstr "" msgid "Position (U)" msgstr "" +#: dcim/api/serializers.py:671 +msgid "Deprecated in v3.6 in favor of `role`." +msgstr "" + #: dcim/choices.py:21 virtualization/choices.py:21 msgid "Staging" msgstr "" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "" @@ -1741,7 +1746,7 @@ msgstr "" msgid "Millimeters" msgstr "" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "" @@ -1752,9 +1757,9 @@ msgstr "" #: dcim/forms/bulk_import.py:778 dcim/forms/bulk_import.py:1033 #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 -#: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1392 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1766,7 +1771,7 @@ msgstr "" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "" @@ -1815,7 +1820,7 @@ msgstr "" msgid "Side to rear" msgstr "" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "" @@ -1843,8 +1848,8 @@ msgstr "" msgid "Proprietary" msgstr "" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "" @@ -1857,177 +1862,177 @@ msgstr "" msgid "Physical" msgstr "" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 -#: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 +#: dcim/forms/model_forms.py:1286 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "" @@ -2274,7 +2279,7 @@ msgstr "" #: dcim/filtersets.py:1172 dcim/filtersets.py:1264 ipam/filtersets.py:577 #: ipam/filtersets.py:807 ipam/filtersets.py:1026 -#: virtualization/filtersets.py:161 vpn/filtersets.py:351 +#: virtualization/filtersets.py:161 vpn/filtersets.py:362 msgid "Device (ID)" msgstr "" @@ -2283,7 +2288,7 @@ msgid "Rack (name)" msgstr "" #: dcim/filtersets.py:1270 ipam/filtersets.py:572 ipam/filtersets.py:802 -#: ipam/filtersets.py:1032 vpn/filtersets.py:346 +#: ipam/filtersets.py:1032 vpn/filtersets.py:357 msgid "Device (name)" msgstr "" @@ -2304,7 +2309,7 @@ msgid "Virtual Chassis (ID)" msgstr "" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2327,8 +2332,8 @@ msgstr "" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/forms/model_forms.py:1271 dcim/models/device_components.py:712 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2336,8 +2341,8 @@ msgstr "" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2350,7 +2355,7 @@ msgstr "" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "" @@ -2359,12 +2364,12 @@ msgstr "" msgid "VRF (RD)" msgstr "" -#: dcim/filtersets.py:1459 ipam/filtersets.py:967 vpn/filtersets.py:314 +#: dcim/filtersets.py:1459 ipam/filtersets.py:967 vpn/filtersets.py:325 msgid "L2VPN (ID)" msgstr "" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2423,8 +2428,8 @@ msgid "Power panel (ID)" msgstr "" #: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:410 -#: extras/forms/model_forms.py:453 extras/forms/model_forms.py:504 -#: netbox/forms/base.py:82 netbox/forms/mixins.py:81 +#: extras/forms/model_forms.py:454 extras/forms/model_forms.py:505 +#: netbox/forms/base.py:77 netbox/forms/mixins.py:81 #: netbox/tables/columns.py:448 #: templates/circuits/inc/circuit_termination.html:119 #: templates/generic/bulk_edit.html:81 templates/inc/panels/tags.html:5 @@ -2435,7 +2440,7 @@ msgstr "" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2452,7 +2457,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 ipam/filtersets.py:936 #: ipam/forms/bulk_edit.py:528 ipam/forms/bulk_import.py:444 -#: ipam/forms/model_forms.py:509 ipam/tables/fhrp.py:67 +#: ipam/forms/model_forms.py:495 ipam/tables/fhrp.py:67 #: ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2501,9 +2506,9 @@ msgstr "" #: dcim/forms/bulk_import.py:1021 dcim/forms/filtersets.py:299 #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 -#: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/forms/model_forms.py:1400 dcim/forms/object_import.py:186 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 ipam/forms/bulk_edit.py:245 #: ipam/forms/bulk_edit.py:294 ipam/forms/bulk_edit.py:342 #: ipam/forms/bulk_edit.py:546 ipam/forms/bulk_import.py:196 @@ -2512,7 +2517,7 @@ msgstr "" #: ipam/forms/filtersets.py:278 ipam/forms/filtersets.py:346 #: ipam/forms/filtersets.py:490 ipam/forms/model_forms.py:187 #: ipam/forms/model_forms.py:222 ipam/forms/model_forms.py:249 -#: ipam/forms/model_forms.py:647 ipam/tables/ip.py:257 ipam/tables/ip.py:313 +#: ipam/forms/model_forms.py:651 ipam/tables/ip.py:257 ipam/tables/ip.py:313 #: ipam/tables/ip.py:363 ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 #: templates/dcim/inc/panels/inventory_items.html:12 @@ -2529,7 +2534,7 @@ msgstr "" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2623,7 +2628,7 @@ msgstr "" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2637,8 +2642,9 @@ msgstr "" #: dcim/forms/filtersets.py:247 dcim/forms/filtersets.py:332 #: dcim/forms/filtersets.py:417 dcim/forms/filtersets.py:543 #: dcim/forms/filtersets.py:652 dcim/forms/filtersets.py:853 -#: dcim/forms/model_forms.py:596 dcim/forms/model_forms.py:1381 +#: dcim/forms/model_forms.py:596 dcim/forms/model_forms.py:1470 #: templates/dcim/device_edit.html:20 templates/dcim/inventoryitem_edit.html:23 +#: templates/dcim/inventoryitemtemplate_edit.html:22 msgid "Hardware" msgstr "" @@ -2653,9 +2659,9 @@ msgstr "" #: dcim/forms/filtersets.py:858 dcim/forms/filtersets.py:1423 #: dcim/forms/model_forms.py:274 dcim/forms/model_forms.py:288 #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 -#: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 +#: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1405 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2702,7 +2708,7 @@ msgstr "" msgid "Module Type" msgstr "" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "" @@ -2734,13 +2740,15 @@ msgstr "" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "" @@ -2761,19 +2769,19 @@ msgstr "" #: dcim/forms/filtersets.py:1401 dcim/forms/filtersets.py:1412 #: dcim/forms/filtersets.py:1476 dcim/forms/filtersets.py:1500 #: dcim/forms/filtersets.py:1524 dcim/forms/model_forms.py:562 -#: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 -#: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 +#: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1100 +#: dcim/forms/model_forms.py:1549 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2795,7 +2803,7 @@ msgstr "" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2900,8 +2908,8 @@ msgid "Allocated power draw (watts)" msgstr "" #: dcim/forms/bulk_edit.py:968 dcim/forms/bulk_import.py:731 -#: dcim/forms/model_forms.py:855 dcim/forms/model_forms.py:1083 -#: dcim/forms/model_forms.py:1368 dcim/forms/object_import.py:60 +#: dcim/forms/model_forms.py:855 dcim/forms/model_forms.py:1172 +#: dcim/forms/model_forms.py:1457 dcim/forms/object_import.py:60 msgid "Power port" msgstr "" @@ -2934,7 +2942,7 @@ msgid "Wireless role" msgstr "" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1115 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2943,19 +2951,19 @@ msgstr "" msgid "Module" msgstr "" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "" -#: dcim/forms/bulk_edit.py:1310 dcim/forms/model_forms.py:1110 +#: dcim/forms/bulk_edit.py:1310 dcim/forms/model_forms.py:1199 msgid "Virtual device contexts" msgstr "" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -2972,37 +2980,37 @@ msgstr "" msgid "Mode" msgstr "" -#: dcim/forms/bulk_edit.py:1353 dcim/forms/model_forms.py:1159 +#: dcim/forms/bulk_edit.py:1353 dcim/forms/model_forms.py:1248 #: ipam/forms/bulk_import.py:177 ipam/forms/filtersets.py:479 #: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:239 #: virtualization/forms/model_forms.py:324 msgid "VLAN group" msgstr "" -#: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1253 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "" -#: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1262 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "" -#: dcim/forms/bulk_edit.py:1379 dcim/forms/model_forms.py:1146 +#: dcim/forms/bulk_edit.py:1379 dcim/forms/model_forms.py:1235 msgid "Wireless LAN group" msgstr "" -#: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1240 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "" #: dcim/forms/bulk_edit.py:1393 dcim/forms/filtersets.py:1231 -#: dcim/forms/model_forms.py:1192 ipam/forms/bulk_edit.py:270 +#: dcim/forms/model_forms.py:1281 ipam/forms/bulk_edit.py:270 #: ipam/forms/bulk_edit.py:361 ipam/forms/filtersets.py:166 #: templates/dcim/interface.html:126 templates/ipam/prefix.html:96 #: virtualization/forms/model_forms.py:352 @@ -3010,22 +3018,22 @@ msgid "Addressing" msgstr "" #: dcim/forms/bulk_edit.py:1394 dcim/forms/filtersets.py:651 -#: dcim/forms/model_forms.py:1193 virtualization/forms/model_forms.py:353 +#: dcim/forms/model_forms.py:1282 virtualization/forms/model_forms.py:353 msgid "Operation" msgstr "" #: dcim/forms/bulk_edit.py:1395 dcim/forms/filtersets.py:1232 -#: dcim/forms/model_forms.py:887 dcim/forms/model_forms.py:1195 +#: dcim/forms/model_forms.py:887 dcim/forms/model_forms.py:1284 msgid "PoE" msgstr "" -#: dcim/forms/bulk_edit.py:1396 dcim/forms/model_forms.py:1194 +#: dcim/forms/bulk_edit.py:1396 dcim/forms/model_forms.py:1283 #: templates/dcim/interface.html:101 virtualization/forms/bulk_edit.py:266 #: virtualization/forms/model_forms.py:354 msgid "Related Interfaces" msgstr "" -#: dcim/forms/bulk_edit.py:1397 dcim/forms/model_forms.py:1196 +#: dcim/forms/bulk_edit.py:1397 dcim/forms/model_forms.py:1285 #: virtualization/forms/bulk_edit.py:267 #: virtualization/forms/model_forms.py:355 msgid "802.1Q Switching" @@ -3145,7 +3153,8 @@ msgstr "" msgid "Limit platform assignments to this manufacturer" msgstr "" -#: dcim/forms/bulk_import.py:421 tenancy/forms/bulk_import.py:106 +#: dcim/forms/bulk_import.py:421 dcim/forms/bulk_import.py:1376 +#: tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "" @@ -3167,9 +3176,9 @@ msgid "Virtual chassis" msgstr "" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3179,7 +3188,7 @@ msgstr "" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "" @@ -3274,13 +3283,13 @@ msgstr "" msgid "Electrical phase (for three-phase circuits)" msgstr "" -#: dcim/forms/bulk_import.py:782 dcim/forms/model_forms.py:1121 +#: dcim/forms/bulk_import.py:782 dcim/forms/model_forms.py:1210 #: virtualization/forms/bulk_import.py:155 #: virtualization/forms/model_forms.py:308 msgid "Parent interface" msgstr "" -#: dcim/forms/bulk_import.py:789 dcim/forms/model_forms.py:1129 +#: dcim/forms/bulk_import.py:789 dcim/forms/model_forms.py:1218 #: virtualization/forms/bulk_import.py:162 #: virtualization/forms/model_forms.py:316 msgid "Bridged interface" @@ -3343,7 +3352,7 @@ msgid "VDC {vdc} is not assigned to device {device}" msgstr "" #: dcim/forms/bulk_import.py:896 dcim/forms/model_forms.py:900 -#: dcim/forms/model_forms.py:1376 dcim/forms/object_import.py:122 +#: dcim/forms/model_forms.py:1465 dcim/forms/object_import.py:122 msgid "Rear port" msgstr "" @@ -3356,7 +3365,7 @@ msgstr "" msgid "Physical medium classification" msgstr "" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "" @@ -3444,7 +3453,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "" @@ -3566,7 +3575,7 @@ msgstr "" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3574,14 +3583,14 @@ msgstr "" msgid "Connection" msgstr "" -#: dcim/forms/filtersets.py:1245 dcim/forms/model_forms.py:1484 +#: dcim/forms/filtersets.py:1245 dcim/forms/model_forms.py:1573 #: templates/dcim/virtualdevicecontext.html:16 msgid "Virtual Device Context" msgstr "" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 -#: extras/forms/model_forms.py:557 extras/tables/tables.py:487 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 +#: extras/forms/model_forms.py:558 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" msgstr "" @@ -3590,7 +3599,7 @@ msgstr "" msgid "Mgmt only" msgstr "" -#: dcim/forms/filtersets.py:1289 dcim/forms/model_forms.py:1187 +#: dcim/forms/filtersets.py:1289 dcim/forms/model_forms.py:1276 #: dcim/models/device_components.py:630 templates/dcim/interface.html:134 msgid "WWN" msgstr "" @@ -3612,7 +3621,7 @@ msgid "Transmit power (dBm)" msgstr "" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3620,7 +3629,7 @@ msgstr "" msgid "Cable" msgstr "" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "" @@ -3665,7 +3674,7 @@ msgstr "" msgid "Device Role" msgstr "" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "" @@ -3697,18 +3706,52 @@ msgstr "" msgid "Characteristics" msgstr "" -#: dcim/forms/model_forms.py:1137 +#: dcim/forms/model_forms.py:986 +msgid "Console port template" +msgstr "" + +#: dcim/forms/model_forms.py:994 +msgid "Console server port template" +msgstr "" + +#: dcim/forms/model_forms.py:1002 +msgid "Front port template" +msgstr "" + +#: dcim/forms/model_forms.py:1010 +msgid "Interface template" +msgstr "" + +#: dcim/forms/model_forms.py:1018 +msgid "Power outlet template" +msgstr "" + +#: dcim/forms/model_forms.py:1026 +msgid "Power port template" +msgstr "" + +#: dcim/forms/model_forms.py:1034 +msgid "Rear port template" +msgstr "" + +#: dcim/forms/model_forms.py:1087 dcim/forms/model_forms.py:1521 +msgid "An InventoryItem can only be assigned to a single component." +msgstr "" + +#: dcim/forms/model_forms.py:1226 msgid "LAG interface" msgstr "" -#: dcim/forms/model_forms.py:1191 dcim/forms/model_forms.py:1352 +#: dcim/forms/model_forms.py:1280 dcim/forms/model_forms.py:1441 #: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:317 #: ipam/forms/model_forms.py:270 ipam/forms/model_forms.py:279 #: ipam/tables/fhrp.py:64 ipam/tables/ip.py:368 ipam/tables/vlans.py:165 #: templates/circuits/inc/circuit_termination.html:78 #: templates/dcim/frontport.html:113 templates/dcim/interface.html:27 #: templates/dcim/interface.html:190 templates/dcim/interface.html:322 -#: templates/dcim/inventoryitem_edit.html:54 templates/dcim/rearport.html:109 +#: templates/dcim/inventoryitem_edit.html:54 +#: templates/dcim/inventoryitemtemplate_edit.html:51 +#: templates/dcim/rearport.html:109 #: templates/ipam/fhrpgroupassignment_edit.html:11 #: templates/virtualization/vminterface.html:19 #: templates/vpn/tunneltermination.html:32 @@ -3716,59 +3759,54 @@ msgstr "" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "" -#: dcim/forms/model_forms.py:1285 +#: dcim/forms/model_forms.py:1374 msgid "Child Device" msgstr "" -#: dcim/forms/model_forms.py:1286 +#: dcim/forms/model_forms.py:1375 msgid "" "Child devices must first be created and assigned to the site and rack of the " "parent device." msgstr "" -#: dcim/forms/model_forms.py:1328 +#: dcim/forms/model_forms.py:1417 msgid "Console port" msgstr "" -#: dcim/forms/model_forms.py:1336 +#: dcim/forms/model_forms.py:1425 msgid "Console server port" msgstr "" -#: dcim/forms/model_forms.py:1344 +#: dcim/forms/model_forms.py:1433 msgid "Front port" msgstr "" -#: dcim/forms/model_forms.py:1360 +#: dcim/forms/model_forms.py:1449 msgid "Power outlet" msgstr "" -#: dcim/forms/model_forms.py:1380 templates/dcim/inventoryitem.html:17 +#: dcim/forms/model_forms.py:1469 templates/dcim/inventoryitem.html:17 #: templates/dcim/inventoryitem_edit.html:10 +#: templates/dcim/inventoryitemtemplate_edit.html:10 msgid "Inventory Item" msgstr "" -#: dcim/forms/model_forms.py:1432 -msgid "An InventoryItem can only be assigned to a single component." -msgstr "" - -#: dcim/forms/model_forms.py:1446 templates/dcim/inventoryitemrole.html:15 +#: dcim/forms/model_forms.py:1535 templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "" -#: dcim/forms/model_forms.py:1466 templates/dcim/device.html:195 +#: dcim/forms/model_forms.py:1555 templates/dcim/device.html:195 #: templates/dcim/virtualdevicecontext.html:33 #: templates/virtualization/virtualmachine.html:51 msgid "Primary IPv4" msgstr "" -#: dcim/forms/model_forms.py:1475 templates/dcim/device.html:211 +#: dcim/forms/model_forms.py:1564 templates/dcim/device.html:211 #: templates/dcim/virtualdevicecontext.html:44 #: templates/virtualization/virtualmachine.html:67 msgid "Primary IPv6" @@ -3789,7 +3827,7 @@ msgid "" msgstr "" #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "" @@ -3818,7 +3856,7 @@ msgid "" "selected number of rear port positions ({rearport_count})." msgstr "" -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4501,13 +4539,13 @@ msgstr "" msgid "inventory item roles" msgstr "" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "" @@ -4555,7 +4593,7 @@ msgstr "" msgid "manufacturers" msgstr "" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "" @@ -4563,11 +4601,11 @@ msgstr "" msgid "default platform" msgstr "" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "" @@ -4601,7 +4639,7 @@ msgid "" "device type is neither a parent nor a child." msgstr "" -#: dcim/models/devices.py:128 dcim/models/devices.py:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "" @@ -4613,289 +4651,289 @@ msgstr "" msgid "device types" msgstr "" -#: dcim/models/devices.py:289 +#: dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "" -#: dcim/models/devices.py:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate " "a height of {height}U" msgstr "" -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " "instances already mounted within racks." msgstr "" -#: dcim/models/devices.py:330 +#: 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:336 +#: dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "" -#: dcim/models/devices.py:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" -#: dcim/models/devices.py:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "" -#: dcim/models/devices.py:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "" -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "" -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "" -#: dcim/models/devices.py:849 +#: dcim/models/devices.py:851 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "" -#: dcim/models/devices.py:856 +#: dcim/models/devices.py:858 msgid "Cannot select a rack face without assigning a rack." msgstr "" -#: dcim/models/devices.py:860 +#: dcim/models/devices.py:862 msgid "Cannot select a rack position without assigning a rack." msgstr "" -#: dcim/models/devices.py:866 +#: dcim/models/devices.py:868 msgid "Position must be in increments of 0.5 rack units." msgstr "" -#: dcim/models/devices.py:870 +#: dcim/models/devices.py:872 msgid "Must specify rack face when defining rack position." msgstr "" -#: dcim/models/devices.py:878 +#: dcim/models/devices.py:880 #, python-brace-format msgid "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "" -#: dcim/models/devices.py:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "" -#: dcim/models/devices.py:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "" -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " "accommodate this device type: {device_type} ({u_height}U)" msgstr "" -#: dcim/models/devices.py:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "" -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" -#: dcim/models/devices.py:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "" -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " "but this device's type belongs to {devicetype_manufacturer}." msgstr "" -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "" -#: dcim/models/devices.py:986 +#: dcim/models/devices.py:988 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" -#: dcim/models/devices.py:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "" -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, python-brace-format msgid "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" -#: dcim/models/devices.py:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "" -#: dcim/models/devices.py:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" @@ -5260,6 +5298,7 @@ msgstr "" #: dcim/tables/connections.py:27 templates/dcim/consoleport.html:18 #: templates/dcim/consoleserverport.html:75 templates/dcim/frontport.html:119 #: templates/dcim/inventoryitem_edit.html:39 +#: templates/dcim/inventoryitemtemplate_edit.html:36 msgid "Console Port" msgstr "" @@ -5269,9 +5308,10 @@ msgstr "" msgid "Reachable" msgstr "" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 -#: templates/dcim/inventoryitem_edit.html:64 templates/dcim/poweroutlet.html:47 -#: templates/dcim/powerport.html:18 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 +#: templates/dcim/inventoryitem_edit.html:64 +#: templates/dcim/inventoryitemtemplate_edit.html:61 +#: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" msgstr "" @@ -5288,8 +5328,8 @@ msgstr "" msgid "VMs" msgstr "" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 -#: extras/forms/model_forms.py:515 templates/dcim/device.html:114 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 +#: extras/forms/model_forms.py:516 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 #: templates/dcim/devicerole.html:47 templates/dcim/platform.html:44 @@ -5297,64 +5337,64 @@ msgstr "" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 -#: dcim/views.py:1930 netbox/navigation/menu.py:82 +#: dcim/views.py:1932 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 #: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 #: templates/dcim/module.html:34 templates/dcim/moduletype/base.html:34 @@ -5362,53 +5402,53 @@ msgstr "" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5417,12 +5457,12 @@ msgstr "" msgid "IP Addresses" msgstr "" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5431,21 +5471,21 @@ msgstr "" msgid "Tunnel" msgstr "" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 -#: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 +#: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2025 #: netbox/navigation/menu.py:91 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:5 @@ -5453,37 +5493,38 @@ msgstr "" msgid "Inventory Items" msgstr "" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 #: templates/dcim/interface.html:196 templates/dcim/inventoryitem_edit.html:69 +#: templates/dcim/inventoryitemtemplate_edit.html:66 #: templates/dcim/rearport.html:18 templates/dcim/rearport.html:115 msgid "Rear Port" msgstr "" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "" @@ -5497,7 +5538,7 @@ msgid "Module Types" msgstr "" #: dcim/tables/devicetypes.py:53 extras/forms/filtersets.py:379 -#: extras/forms/model_forms.py:423 netbox/navigation/menu.py:66 +#: extras/forms/model_forms.py:424 netbox/navigation/menu.py:66 msgid "Platforms" msgstr "" @@ -5518,7 +5559,7 @@ msgid "Instances" msgstr "" #: dcim/tables/devicetypes.py:113 dcim/views.py:945 dcim/views.py:1184 -#: dcim/views.py:1870 netbox/navigation/menu.py:85 +#: dcim/views.py:1872 netbox/navigation/menu.py:85 #: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 #: templates/dcim/devicetype/base.html:22 templates/dcim/module.html:22 #: templates/dcim/moduletype/base.html:22 @@ -5526,7 +5567,7 @@ msgid "Console Ports" msgstr "" #: dcim/tables/devicetypes.py:116 dcim/views.py:960 dcim/views.py:1199 -#: dcim/views.py:1885 netbox/navigation/menu.py:86 +#: dcim/views.py:1887 netbox/navigation/menu.py:86 #: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 #: templates/dcim/devicetype/base.html:25 templates/dcim/module.html:25 #: templates/dcim/moduletype/base.html:25 @@ -5534,7 +5575,7 @@ msgid "Console Server Ports" msgstr "" #: dcim/tables/devicetypes.py:119 dcim/views.py:975 dcim/views.py:1214 -#: dcim/views.py:1900 netbox/navigation/menu.py:87 +#: dcim/views.py:1902 netbox/navigation/menu.py:87 #: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 #: templates/dcim/devicetype/base.html:28 templates/dcim/module.html:28 #: templates/dcim/moduletype/base.html:28 @@ -5542,7 +5583,7 @@ msgid "Power Ports" msgstr "" #: dcim/tables/devicetypes.py:122 dcim/views.py:990 dcim/views.py:1229 -#: dcim/views.py:1915 netbox/navigation/menu.py:88 +#: dcim/views.py:1917 netbox/navigation/menu.py:88 #: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 #: templates/dcim/devicetype/base.html:31 templates/dcim/module.html:31 #: templates/dcim/moduletype/base.html:31 @@ -5550,27 +5591,27 @@ msgid "Power Outlets" msgstr "" #: dcim/tables/devicetypes.py:128 dcim/views.py:1020 dcim/views.py:1259 -#: dcim/views.py:1951 netbox/navigation/menu.py:83 +#: dcim/views.py:1953 netbox/navigation/menu.py:83 #: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 #: templates/dcim/module.html:37 templates/dcim/moduletype/base.html:37 msgid "Front Ports" msgstr "" #: dcim/tables/devicetypes.py:131 dcim/views.py:1035 dcim/views.py:1274 -#: dcim/views.py:1966 netbox/navigation/menu.py:84 +#: dcim/views.py:1968 netbox/navigation/menu.py:84 #: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 #: templates/dcim/devicetype/base.html:40 templates/dcim/module.html:40 #: templates/dcim/moduletype/base.html:40 msgid "Rear Ports" msgstr "" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1065 dcim/views.py:2004 +#: dcim/tables/devicetypes.py:134 dcim/views.py:1065 dcim/views.py:2006 #: netbox/navigation/menu.py:90 templates/dcim/device/base.html:49 #: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1050 dcim/views.py:1985 +#: dcim/tables/devicetypes.py:137 dcim/views.py:1050 dcim/views.py:1987 #: netbox/navigation/menu.py:89 templates/dcim/device/base.html:46 #: templates/dcim/device_list.html:64 templates/dcim/devicetype/base.html:43 msgid "Module Bays" @@ -5616,7 +5657,7 @@ msgid "Max Weight" msgstr "" #: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:359 extras/forms/model_forms.py:403 +#: extras/forms/filtersets.py:359 extras/forms/model_forms.py:404 #: ipam/forms/bulk_edit.py:128 ipam/forms/model_forms.py:152 #: ipam/tables/asn.py:66 netbox/navigation/menu.py:16 #: netbox/navigation/menu.py:18 @@ -5640,17 +5681,17 @@ msgstr "" msgid "Non-Racked Devices" msgstr "" -#: dcim/views.py:2036 extras/forms/model_forms.py:463 +#: dcim/views.py:2038 extras/forms/model_forms.py:464 #: templates/extras/configcontext.html:10 #: virtualization/forms/model_forms.py:228 virtualization/views.py:408 msgid "Config Context" msgstr "" -#: dcim/views.py:2046 virtualization/views.py:418 +#: dcim/views.py:2048 virtualization/views.py:418 msgid "Render Config" msgstr "" -#: dcim/views.py:2974 ipam/tables/ip.py:233 +#: dcim/views.py:2976 ipam/tables/ip.py:233 msgid "Children" msgstr "" @@ -5894,7 +5935,7 @@ msgid "White" msgstr "" #: extras/choices.py:306 extras/forms/model_forms.py:235 -#: extras/forms/model_forms.py:321 templates/extras/webhook.html:11 +#: extras/forms/model_forms.py:322 templates/extras/webhook.html:11 msgid "Webhook" msgstr "" @@ -6041,7 +6082,7 @@ msgid "Cluster type (slug)" msgstr "" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "" @@ -6170,8 +6211,8 @@ msgid "Is active" msgstr "" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6180,8 +6221,8 @@ msgid "Content types" msgstr "" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "" @@ -6225,29 +6266,38 @@ msgid "" "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" msgstr "" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +msgid "" +"The class of the first link in a group will be used for the dropdown button" +msgstr "" + +#: extras/forms/bulk_import.py:188 msgid "Action object" msgstr "" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 msgid "Webhook name or script as dotted path module.Class" msgstr "" -#: extras/forms/bulk_import.py:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "" @@ -6261,7 +6311,7 @@ msgid "Choices" msgstr "" #: extras/forms/filtersets.py:141 extras/forms/filtersets.py:327 -#: extras/forms/filtersets.py:417 extras/forms/model_forms.py:458 +#: extras/forms/filtersets.py:417 extras/forms/model_forms.py:459 #: templates/core/job.html:86 templates/extras/configcontext.html:86 #: templates/extras/eventrule.html:111 msgid "Data" @@ -6281,7 +6331,7 @@ msgstr "" msgid "HTTP content type" msgstr "" -#: extras/forms/filtersets.py:254 extras/forms/model_forms.py:271 +#: extras/forms/filtersets.py:254 extras/forms/model_forms.py:272 #: templates/extras/eventrule.html:46 msgid "Events" msgstr "" @@ -6306,7 +6356,7 @@ msgstr "" msgid "Job starts" msgstr "" -#: extras/forms/filtersets.py:306 extras/forms/model_forms.py:290 +#: extras/forms/filtersets.py:306 extras/forms/model_forms.py:291 msgid "Job terminations" msgstr "" @@ -6318,44 +6368,44 @@ msgstr "" msgid "Allowed object type" msgstr "" -#: extras/forms/filtersets.py:349 extras/forms/model_forms.py:393 +#: extras/forms/filtersets.py:349 extras/forms/model_forms.py:394 #: netbox/navigation/menu.py:19 msgid "Regions" msgstr "" -#: extras/forms/filtersets.py:354 extras/forms/model_forms.py:398 +#: extras/forms/filtersets.py:354 extras/forms/model_forms.py:399 msgid "Site groups" msgstr "" -#: extras/forms/filtersets.py:364 extras/forms/model_forms.py:408 +#: extras/forms/filtersets.py:364 extras/forms/model_forms.py:409 #: netbox/navigation/menu.py:21 msgid "Locations" msgstr "" -#: extras/forms/filtersets.py:369 extras/forms/model_forms.py:413 +#: extras/forms/filtersets.py:369 extras/forms/model_forms.py:414 msgid "Device types" msgstr "" -#: extras/forms/filtersets.py:374 extras/forms/model_forms.py:418 +#: extras/forms/filtersets.py:374 extras/forms/model_forms.py:419 msgid "Roles" msgstr "" -#: extras/forms/filtersets.py:384 extras/forms/model_forms.py:428 +#: extras/forms/filtersets.py:384 extras/forms/model_forms.py:429 msgid "Cluster types" msgstr "" -#: extras/forms/filtersets.py:390 extras/forms/model_forms.py:433 +#: extras/forms/filtersets.py:390 extras/forms/model_forms.py:434 msgid "Cluster groups" msgstr "" -#: extras/forms/filtersets.py:395 extras/forms/model_forms.py:438 +#: extras/forms/filtersets.py:395 extras/forms/model_forms.py:439 #: netbox/navigation/menu.py:243 netbox/navigation/menu.py:245 #: templates/virtualization/clustertype.html:33 #: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "" -#: extras/forms/filtersets.py:400 extras/forms/model_forms.py:443 +#: extras/forms/filtersets.py:400 extras/forms/model_forms.py:444 msgid "Tenant groups" msgstr "" @@ -6373,7 +6423,7 @@ msgstr "" msgid "Time" msgstr "" -#: extras/forms/filtersets.py:504 extras/forms/model_forms.py:273 +#: extras/forms/filtersets.py:504 extras/forms/model_forms.py:274 #: extras/tables/tables.py:445 templates/extras/eventrule.html:90 #: templates/extras/objectchange.html:50 msgid "Action" @@ -6434,7 +6484,7 @@ msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" -#: extras/forms/model_forms.py:160 extras/forms/model_forms.py:509 +#: extras/forms/model_forms.py:160 extras/forms/model_forms.py:510 msgid "Template code" msgstr "" @@ -6446,11 +6496,11 @@ msgstr "" msgid "Rendering" msgstr "" -#: extras/forms/model_forms.py:182 extras/forms/model_forms.py:534 +#: extras/forms/model_forms.py:182 extras/forms/model_forms.py:535 msgid "Template content is populated from the remote source selected below." msgstr "" -#: extras/forms/model_forms.py:189 extras/forms/model_forms.py:541 +#: extras/forms/model_forms.py:189 extras/forms/model_forms.py:542 msgid "Must specify either local content or a data file" msgstr "" @@ -6481,55 +6531,55 @@ msgid "" "\">JSON format." msgstr "" -#: extras/forms/model_forms.py:270 templates/extras/eventrule.html:11 +#: extras/forms/model_forms.py:271 templates/extras/eventrule.html:11 msgid "Event Rule" msgstr "" -#: extras/forms/model_forms.py:272 templates/extras/eventrule.html:78 +#: extras/forms/model_forms.py:273 templates/extras/eventrule.html:78 msgid "Conditions" msgstr "" -#: extras/forms/model_forms.py:286 +#: extras/forms/model_forms.py:287 msgid "Creations" msgstr "" -#: extras/forms/model_forms.py:287 +#: extras/forms/model_forms.py:288 msgid "Updates" msgstr "" -#: extras/forms/model_forms.py:288 +#: extras/forms/model_forms.py:289 msgid "Deletions" msgstr "" -#: extras/forms/model_forms.py:289 +#: extras/forms/model_forms.py:290 msgid "Job executions" msgstr "" -#: extras/forms/model_forms.py:375 users/forms/model_forms.py:286 +#: extras/forms/model_forms.py:376 users/forms/model_forms.py:286 msgid "Object types" msgstr "" -#: extras/forms/model_forms.py:448 netbox/navigation/menu.py:40 +#: extras/forms/model_forms.py:449 netbox/navigation/menu.py:40 #: tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "" -#: extras/forms/model_forms.py:465 ipam/forms/filtersets.py:141 +#: extras/forms/model_forms.py:466 ipam/forms/filtersets.py:141 #: ipam/forms/filtersets.py:527 templates/extras/configcontext.html:62 #: templates/ipam/ipaddress.html:62 templates/ipam/vlan_edit.html:30 #: tenancy/forms/filtersets.py:86 users/forms/model_forms.py:324 msgid "Assignment" msgstr "" -#: extras/forms/model_forms.py:491 +#: extras/forms/model_forms.py:492 msgid "Data is populated from the remote source selected below." msgstr "" -#: extras/forms/model_forms.py:497 +#: extras/forms/model_forms.py:498 msgid "Must specify either local data or a data file" msgstr "" -#: extras/forms/model_forms.py:516 templates/core/datafile.html:65 +#: extras/forms/model_forms.py:517 templates/core/datafile.html:65 msgid "Content" msgstr "" @@ -7129,15 +7179,6 @@ msgstr "" msgid "Links with the same group will appear as a dropdown menu" msgstr "" -#: extras/models/models.py:353 -msgid "button class" -msgstr "" - -#: extras/models/models.py:357 -msgid "" -"The class of the first link in a group will be used for the dropdown button" -msgstr "" - #: extras/models/models.py:360 msgid "new window" msgstr "" @@ -7321,7 +7362,7 @@ msgid "staged changes" msgstr "" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +msgid "The object type(s) to which this tag can be applied." msgstr "" #: extras/models/tags.py:49 @@ -7549,19 +7590,19 @@ msgstr "" msgid "Invalid IP address format: {address}" msgstr "" -#: ipam/filtersets.py:47 vpn/filtersets.py:276 +#: ipam/filtersets.py:47 vpn/filtersets.py:287 msgid "Import target" msgstr "" -#: ipam/filtersets.py:53 vpn/filtersets.py:282 +#: ipam/filtersets.py:53 vpn/filtersets.py:293 msgid "Import target (name)" msgstr "" -#: ipam/filtersets.py:58 vpn/filtersets.py:287 +#: ipam/filtersets.py:58 vpn/filtersets.py:298 msgid "Export target" msgstr "" -#: ipam/filtersets.py:64 vpn/filtersets.py:293 +#: ipam/filtersets.py:64 vpn/filtersets.py:304 msgid "Export target (name)" msgstr "" @@ -7611,16 +7652,16 @@ msgstr "" msgid "Mask length" msgstr "" -#: ipam/filtersets.py:339 vpn/filtersets.py:399 +#: ipam/filtersets.py:339 vpn/filtersets.py:410 msgid "VLAN (ID)" msgstr "" -#: ipam/filtersets.py:343 vpn/filtersets.py:394 +#: ipam/filtersets.py:343 vpn/filtersets.py:405 msgid "VLAN number (1-4094)" msgstr "" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "" @@ -7634,25 +7675,25 @@ msgid "Parent prefix" msgstr "" #: ipam/filtersets.py:582 ipam/filtersets.py:812 ipam/filtersets.py:1042 -#: vpn/filtersets.py:357 +#: vpn/filtersets.py:368 msgid "Virtual machine (name)" msgstr "" #: ipam/filtersets.py:587 ipam/filtersets.py:817 ipam/filtersets.py:1036 #: virtualization/filtersets.py:278 virtualization/filtersets.py:317 -#: vpn/filtersets.py:362 +#: vpn/filtersets.py:373 msgid "Virtual machine (ID)" msgstr "" -#: ipam/filtersets.py:593 vpn/filtersets.py:97 vpn/filtersets.py:368 +#: ipam/filtersets.py:593 vpn/filtersets.py:97 vpn/filtersets.py:379 msgid "Interface (name)" msgstr "" -#: ipam/filtersets.py:598 vpn/filtersets.py:102 vpn/filtersets.py:373 +#: ipam/filtersets.py:598 vpn/filtersets.py:102 vpn/filtersets.py:384 msgid "Interface (ID)" msgstr "" -#: ipam/filtersets.py:604 vpn/filtersets.py:108 vpn/filtersets.py:379 +#: ipam/filtersets.py:604 vpn/filtersets.py:108 vpn/filtersets.py:390 msgid "VM interface (name)" msgstr "" @@ -7789,7 +7830,7 @@ msgid "Authentication key" msgstr "" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -7806,11 +7847,11 @@ msgstr "" msgid "Maximum child VLAN VID" msgstr "" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "" @@ -7819,8 +7860,8 @@ msgstr "" msgid "Site & Group" msgstr "" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -7859,7 +7900,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8034,8 +8075,8 @@ msgstr "" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8058,7 +8099,7 @@ msgstr "" msgid "IP Range" msgstr "" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "" @@ -8071,7 +8112,7 @@ msgstr "" msgid "An IP address can only be assigned to a single object." msgstr "" -#: ipam/forms/model_forms.py:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8082,45 +8123,39 @@ msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" -#: ipam/forms/model_forms.py:373 -#, python-brace-format -msgid "{ip} is a network ID, which may not be assigned to an interface." -msgstr "" - -#: ipam/forms/model_forms.py:379 -#, python-brace-format -msgid "{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "" - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "" -#: ipam/forms/model_forms.py:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8280,12 +8315,12 @@ msgstr "" msgid "Cannot create prefix with /0 mask." msgstr "" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "" @@ -8378,12 +8413,22 @@ msgstr "" msgid "Cannot create IP address with /0 mask." msgstr "" -#: ipam/models/ip.py:856 +#: ipam/models/ip.py:850 +#, python-brace-format +msgid "{ip} is a network ID, which may not be assigned to an interface." +msgstr "" + +#: ipam/models/ip.py:861 +#, python-brace-format +msgid "{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "" + +#: ipam/models/ip.py:875 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "" -#: ipam/models/ip.py:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "" @@ -8912,15 +8957,17 @@ msgstr "" msgid "Object type(s)" msgstr "" -#: netbox/forms/base.py:77 -msgid "Id" +#: netbox/forms/base.py:81 +msgid "" +"Tag slugs separated by commas, encased with double quotes (e.g. \"tag1,tag2," +"tag3\")" msgstr "" -#: netbox/forms/base.py:116 +#: netbox/forms/base.py:111 msgid "Add tags" msgstr "" -#: netbox/forms/base.py:121 +#: netbox/forms/base.py:116 msgid "Remove tags" msgstr "" @@ -9141,7 +9188,7 @@ msgstr "" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "" @@ -9192,8 +9239,9 @@ msgstr "" #: netbox/navigation/menu.py:310 #: templates/circuits/circuittermination_edit.html:53 #: templates/dcim/cable_edit.html:77 templates/dcim/device_edit.html:103 -#: templates/dcim/inventoryitem_edit.html:102 templates/dcim/rack_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 +#: templates/dcim/inventoryitem_edit.html:102 +#: templates/dcim/inventoryitemtemplate_edit.html:99 +#: templates/dcim/rack_edit.html:81 templates/dcim/virtualchassis_add.html:31 #: templates/dcim/virtualchassis_edit.html:41 #: templates/generic/bulk_edit.html:92 templates/htmx/form.html:32 #: templates/inc/panels/custom_fields.html:7 @@ -9420,31 +9468,31 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/settings.py:724 +#: netbox/settings.py:727 msgid "English" msgstr "" -#: netbox/settings.py:725 +#: netbox/settings.py:728 msgid "Spanish" msgstr "" -#: netbox/settings.py:726 +#: netbox/settings.py:729 msgid "French" msgstr "" -#: netbox/settings.py:727 +#: netbox/settings.py:730 msgid "Japanese" msgstr "" -#: netbox/settings.py:728 +#: netbox/settings.py:731 msgid "Portuguese" msgstr "" -#: netbox/settings.py:729 +#: netbox/settings.py:732 msgid "Russian" msgstr "" -#: netbox/settings.py:730 +#: netbox/settings.py:733 msgid "Turkish" msgstr "" @@ -9904,6 +9952,7 @@ msgstr "" #: templates/dcim/consoleport.html:78 templates/dcim/consoleserverport.html:78 #: templates/dcim/frontport.html:18 templates/dcim/frontport.html:122 #: templates/dcim/interface.html:193 templates/dcim/inventoryitem_edit.html:49 +#: templates/dcim/inventoryitemtemplate_edit.html:46 #: templates/dcim/rearport.html:112 msgid "Front Port" msgstr "" @@ -10054,7 +10103,7 @@ msgstr "" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" +msgid "every %(interval)s minutes" msgstr "" #: templates/dcim/bulk_disconnect.html:9 @@ -10144,6 +10193,7 @@ msgstr "" #: templates/dcim/consoleport.html:75 templates/dcim/consoleserverport.html:18 #: templates/dcim/frontport.html:116 templates/dcim/inventoryitem_edit.html:44 +#: templates/dcim/inventoryitemtemplate_edit.html:41 msgid "Console Server Port" msgstr "" @@ -10572,11 +10622,13 @@ msgid "This will also delete all child inventory items of those listed" msgstr "" #: templates/dcim/inventoryitem_edit.html:33 +#: templates/dcim/inventoryitemtemplate_edit.html:30 msgid "Component Assignment" msgstr "" -#: templates/dcim/inventoryitem_edit.html:59 templates/dcim/poweroutlet.html:18 -#: templates/dcim/powerport.html:81 +#: templates/dcim/inventoryitem_edit.html:59 +#: templates/dcim/inventoryitemtemplate_edit.html:56 +#: templates/dcim/poweroutlet.html:18 templates/dcim/powerport.html:81 msgid "Power Outlet" msgstr "" @@ -12525,95 +12577,95 @@ msgstr "" msgid "Invalid filter for {model}: {error}" msgstr "" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "" -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "" -#: users/models.py:174 +#: users/models.py:175 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "" -#: users/models.py:186 +#: users/models.py:187 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" -#: users/models.py:252 +#: users/models.py:253 msgid "expires" msgstr "" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "" -#: users/models.py:283 +#: users/models.py:284 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for " "no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" msgstr "" -#: users/models.py:291 +#: users/models.py:296 msgid "token" msgstr "" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "" -#: users/models.py:379 +#: users/models.py:384 msgid "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" -#: users/models.py:386 +#: users/models.py:391 msgid "permission" msgstr "" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "" @@ -12841,16 +12893,21 @@ msgstr "" msgid "Use regular expressions" msgstr "" -#: utilities/forms/forms.py:87 +#: utilities/forms/forms.py:76 +msgid "" +"Numeric ID of an existing object to update (if not creating a new object)" +msgstr "" + +#: utilities/forms/forms.py:93 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "" -#: utilities/forms/forms.py:113 +#: utilities/forms/forms.py:119 msgid "Available Columns" msgstr "" -#: utilities/forms/forms.py:121 +#: utilities/forms/forms.py:127 msgid "Selected Columns" msgstr "" @@ -12860,43 +12917,50 @@ msgid "" "the object's change log for details." msgstr "" -#: utilities/forms/utils.py:42 utilities/forms/utils.py:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "" -#: utilities/forms/utils.py:225 +#: utilities/forms/utils.py:74 +#, python-brace-format +msgid "" +"Invalid range: Ending value ({end}) must be greater than beginning value " +"({begin})." +msgstr "" + +#: utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "" -#: utilities/forms/utils.py:231 +#: utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "" -#: utilities/forms/utils.py:240 +#: utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" -#: utilities/forms/utils.py:263 +#: utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "" -#: utilities/forms/utils.py:265 +#: utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" -#: utilities/forms/utils.py:269 +#: utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" -#: utilities/forms/utils.py:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "" @@ -13013,7 +13077,7 @@ msgstr "" msgid "Testing" msgstr "" -#: utilities/testing/views.py:625 +#: utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "" @@ -13370,31 +13434,31 @@ msgstr "" msgid "Outside IP (ID)" msgstr "" -#: vpn/filtersets.py:235 +#: vpn/filtersets.py:142 vpn/filtersets.py:246 msgid "IKE policy (ID)" msgstr "" -#: vpn/filtersets.py:241 +#: vpn/filtersets.py:148 vpn/filtersets.py:252 msgid "IKE policy (name)" msgstr "" -#: vpn/filtersets.py:245 +#: vpn/filtersets.py:256 msgid "IPSec policy (ID)" msgstr "" -#: vpn/filtersets.py:251 +#: vpn/filtersets.py:262 msgid "IPSec policy (name)" msgstr "" -#: vpn/filtersets.py:320 +#: vpn/filtersets.py:331 msgid "L2VPN (slug)" msgstr "" -#: vpn/filtersets.py:384 +#: vpn/filtersets.py:395 msgid "VM Interface (ID)" msgstr "" -#: vpn/filtersets.py:390 +#: vpn/filtersets.py:401 msgid "VLAN (name)" msgstr "" @@ -13502,6 +13566,11 @@ msgstr "" msgid "Assigned Object Type" msgstr "" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "" diff --git a/netbox/translations/es/LC_MESSAGES/django.mo b/netbox/translations/es/LC_MESSAGES/django.mo index 6ea16e7ff..ef13cd45b 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 66c0bad1f..65ebd312d 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-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+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" @@ -63,8 +63,8 @@ msgid "Your preferences have been updated." msgstr "Se han actualizado tus preferencias." #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "Planificado" @@ -74,8 +74,8 @@ msgid "Provisioning" msgstr "Aprovisionamiento" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -84,7 +84,7 @@ msgid "Active" msgstr "Activo" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "Desconectado" @@ -97,7 +97,7 @@ msgstr "Desaprovisionamiento" msgid "Decommissioned" msgstr "Desmantelado" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -106,7 +106,7 @@ msgstr "Desmantelado" msgid "Region (ID)" msgstr "Región (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -116,7 +116,7 @@ msgstr "Región (ID)" msgid "Region (slug)" msgstr "Región (slug)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -124,7 +124,7 @@ msgstr "Región (slug)" msgid "Site group (ID)" msgstr "Grupo de sitios (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -134,7 +134,7 @@ msgid "Site group (slug)" msgstr "Grupo de sitios (slug)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -157,8 +157,8 @@ msgstr "Grupo de sitios (slug)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -180,13 +180,13 @@ msgstr "Grupo de sitios (slug)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "Sitio" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -198,33 +198,39 @@ msgstr "Sitio (babosa)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "Proveedor (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "Proveedor (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "Proveedor (babosa)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "Cuenta de proveedor (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "Red de proveedores (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "Tipo de circuito (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "Tipo de circuito (slug)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -234,13 +240,13 @@ msgstr "Tipo de circuito (slug)" msgid "Site (ID)" msgstr "Sitio (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -250,7 +256,7 @@ msgstr "Sitio (ID)" msgid "Search" msgstr "Búsqueda" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -258,11 +264,11 @@ msgstr "Búsqueda" msgid "Circuit" msgstr "Circuito" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "Red de proveedores (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -373,8 +379,8 @@ msgstr "Descripción" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -386,18 +392,18 @@ msgstr "Descripción" msgid "Provider" msgstr "Proveedor" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "ID de servicio" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -409,7 +415,7 @@ msgid "Color" msgstr "Color" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -428,7 +434,7 @@ msgstr "Color" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -453,12 +459,12 @@ msgid "Type" msgstr "Tipo" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "Cuenta de proveedor" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -472,8 +478,8 @@ msgstr "Cuenta de proveedor" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -481,7 +487,7 @@ msgstr "Cuenta de proveedor" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -502,7 +508,7 @@ msgstr "Cuenta de proveedor" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -513,7 +519,7 @@ msgid "Status" msgstr "Estado" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -571,15 +577,15 @@ msgstr "Estado" msgid "Tenant" msgstr "Inquilino" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "Fecha de instalación" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "Fecha de terminación" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "Velocidad de confirmación (Kbps)" @@ -612,7 +618,7 @@ msgstr "Proveedor asignado" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "Color RGB en hexadecimal. Ejemplo:" @@ -648,12 +654,12 @@ msgstr "Estado operativo" msgid "Assigned tenant" msgstr "Inquilino asignado" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "Red de proveedores" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -677,7 +683,7 @@ msgstr "Red de proveedores" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -687,13 +693,7 @@ msgstr "Red de proveedores" msgid "Location" msgstr "Ubicación" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -706,7 +706,7 @@ msgstr "ASN" msgid "Contacts" msgstr "Contactos" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -721,7 +721,7 @@ msgstr "Contactos" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -731,7 +731,7 @@ msgstr "Contactos" msgid "Region" msgstr "Región" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -741,19 +741,15 @@ msgstr "Región" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "Grupo de sitios" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (legado)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -779,7 +775,7 @@ msgstr "ASN (legado)" msgid "Attributes" msgstr "Atributos" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -800,7 +796,7 @@ msgstr "Tipo de circuito" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "color" @@ -822,8 +818,8 @@ msgid "Unique circuit ID" msgstr "ID de circuito único" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -902,7 +898,7 @@ msgstr "ID del panel de conexiones y números de puerto" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "descripción" @@ -932,8 +928,8 @@ msgstr "" #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -946,7 +942,7 @@ msgstr "" #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1004,13 +1000,13 @@ msgstr "redes de proveedores" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1076,9 +1072,9 @@ msgstr "redes de proveedores" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1113,7 +1109,7 @@ msgstr "Tasa de compromiso" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1125,7 +1121,7 @@ msgstr "Tasa de compromiso" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1162,7 +1158,7 @@ msgid "Completed" msgstr "Completado" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "Falló" @@ -1244,7 +1240,7 @@ msgstr "Fuente de datos (nombre)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1381,7 +1377,7 @@ msgstr "" msgid "Rack Elevations" msgstr "Elevaciones de estanterías" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1442,7 +1438,7 @@ msgstr " (predeterminado)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "creado" @@ -1500,7 +1496,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "habilitado" @@ -1718,7 +1714,7 @@ msgid "Staging" msgstr "Puesta en escena" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "Desmantelamiento" @@ -1778,7 +1774,7 @@ msgstr "Obsoleto" msgid "Millimeters" msgstr "Milímetros" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "Pulgadas" @@ -1790,8 +1786,8 @@ msgstr "Pulgadas" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1804,7 +1800,7 @@ msgstr "Pulgadas" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "Padre" @@ -1853,7 +1849,7 @@ msgstr "De derecha a izquierda" msgid "Side to rear" msgstr "De lado a atrás" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "Pasivo" @@ -1881,8 +1877,8 @@ msgstr "Internacional/ITA" msgid "Proprietary" msgstr "Proprietario" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "Otros" @@ -1895,177 +1891,177 @@ msgstr "ITA/Internacional" msgid "Physical" msgstr "Físico" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "Virtual" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "inalámbrico" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "Interfaces virtuales" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "puente" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "Grupo de agregación de enlaces (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "Ethernet (fijo)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "Ethernet (modular)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "Ethernet (placa base)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "Celular" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "serie" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "Coaxial" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "Apilamiento" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "Mitad" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "Lleno" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "Acceso" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Etiquetado" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "Etiquetado (Todos)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "Estándar IEEE" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "Pasivo 24 V (2 pares)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "Pasivo de 24 V (4 pares)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "Pasivo 48 V (2 pares)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "Pasivo de 48 V (4 pares)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "Cobre" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "Fibra óptica" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "Fibra" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "Conectado" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "Kilómetros" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "Medidores" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "Centímetros" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "Millas" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "Pies" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "Kilogramos" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "Gramos" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "Libras" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "Onzas" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "Primaria" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "Redundante" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "Monofásico" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "Trifásico" @@ -2342,7 +2338,7 @@ msgid "Virtual Chassis (ID)" msgstr "Chasis virtual (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2366,7 +2362,7 @@ msgstr "VID asignado" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2374,8 +2370,8 @@ msgstr "VID asignado" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2388,7 +2384,7 @@ msgstr "VID asignado" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2402,7 +2398,7 @@ msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2473,7 +2469,7 @@ msgstr "Etiquetas" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2492,7 +2488,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2542,8 +2538,8 @@ msgstr "Zona horaria" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2552,7 +2548,7 @@ msgstr "Zona horaria" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2570,7 +2566,7 @@ msgstr "Zona horaria" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2664,7 +2660,7 @@ msgstr "Unidad de peso" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2697,7 +2693,7 @@ msgstr "Hardware" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2744,7 +2740,7 @@ msgstr "Tipo de dispositivo" msgid "Module Type" msgstr "Tipo de módulo" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "Función de máquina virtual" @@ -2776,13 +2772,15 @@ msgstr "Función del dispositivo" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "Plataforma" @@ -2806,16 +2804,16 @@ msgstr "Plataforma" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2837,7 +2835,7 @@ msgstr "Plataforma" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2977,7 +2975,7 @@ msgid "Wireless role" msgstr "Función inalámbrica" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2986,7 +2984,7 @@ msgstr "Función inalámbrica" msgid "Module" msgstr "Módulo" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "DESFASE" @@ -2998,7 +2996,7 @@ msgstr "Contextos de dispositivos virtuales" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3023,13 +3021,13 @@ msgid "VLAN group" msgstr "Grupo de VLAN" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "VLAN sin etiquetar" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "VLAN etiquetadas" @@ -3039,7 +3037,7 @@ msgid "Wireless LAN group" msgstr "Grupo LAN inalámbrico" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "LAN inalámbricas" @@ -3211,9 +3209,9 @@ msgid "Virtual chassis" msgstr "Chasis virtual" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3225,7 +3223,7 @@ msgstr "Chasis virtual" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "Clúster" @@ -3408,7 +3406,7 @@ msgstr "Puerto trasero correspondiente" msgid "Physical medium classification" msgstr "Clasificación de medios físicos" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "Dispositivo instalado" @@ -3496,7 +3494,7 @@ 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:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "Maestro" @@ -3622,7 +3620,7 @@ msgstr "Ocupado" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3636,7 +3634,7 @@ msgid "Virtual Device Context" msgstr "Contexto de dispositivo virtual" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3668,7 +3666,7 @@ msgid "Transmit power (dBm)" msgstr "Potencia de transmisión (dBm)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3676,7 +3674,7 @@ msgstr "Potencia de transmisión (dBm)" msgid "Cable" msgstr "Cable" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "Descubierto" @@ -3723,7 +3721,7 @@ msgstr "Chasis" msgid "Device Role" msgstr "Función del dispositivo" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "La unidad con el número más bajo ocupado por el dispositivo" @@ -3776,9 +3774,7 @@ msgstr "Interfaz LAG" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "Interfaz" @@ -3855,7 +3851,7 @@ msgstr "" "{pattern_count} se esperan." #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "Puertos traseros" @@ -3894,7 +3890,7 @@ msgstr "" "coincidir con el número seleccionado de posiciones de los puertos traseros " "({rearport_count})." -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4638,13 +4634,13 @@ msgstr "rol de artículo de inventario" msgid "inventory item roles" msgstr "roles de artículos de inventario" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "número de serie" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "etiqueta de activo" @@ -4695,7 +4691,7 @@ msgstr "fabricante" msgid "manufacturers" msgstr "fabricantes" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "modelo" @@ -4703,11 +4699,11 @@ msgstr "modelo" msgid "default platform" msgstr "plataforma predeterminada" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "número de pieza" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Número de pieza discreto (opcional)" @@ -4746,7 +4742,7 @@ 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:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "flujo de aire" @@ -4758,11 +4754,11 @@ msgstr "tipo de dispositivo" msgid "device types" msgstr "tipos de dispositivos" -#: dcim/models/devices.py:289 +#: 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:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -4771,7 +4767,7 @@ msgstr "" "Dispositivo {device} en un estante {rack} no tiene espacio suficiente para " "acomodar una altura de {height}U" -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4781,7 +4777,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instancias ya está montado dentro" " de bastidores." -#: dcim/models/devices.py:330 +#: dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -4790,155 +4786,155 @@ msgstr "" "asociadas a este dispositivo antes de desclasificarlo como dispositivo " "principal." -#: dcim/models/devices.py:336 +#: 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:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "tipo de módulo" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "tipos de módulos" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "Se pueden asignar máquinas virtuales a esta función" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "rol del dispositivo" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "funciones del dispositivo" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 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:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "plataforma" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "plataformas" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "La función que cumple este dispositivo" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Número de serie del chasis, asignado por el fabricante" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "Una etiqueta única que se utiliza para identificar este dispositivo" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "posición (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "cara del estante" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "IPv4 principal" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "IPv6 principal" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "IP fuera de banda" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "Posición VC" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "Posición virtual del chasis" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "Prioridad VC" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "Prioridad de elección del maestro del chasis virtual" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "latitud" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 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:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "longitud" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "El nombre del dispositivo debe ser único por sitio." -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "dispositivo" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "dispositivos" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Estante {rack} no pertenece al sitio {site}." -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, 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:849 +#: dcim/models/devices.py:851 #, 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:856 +#: dcim/models/devices.py:858 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:860 +#: dcim/models/devices.py:862 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:866 +#: dcim/models/devices.py:868 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:870 +#: dcim/models/devices.py:872 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:878 +#: dcim/models/devices.py:880 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -4946,7 +4942,7 @@ msgstr "" "Un tipo de dispositivo 0U ({device_type}) no se puede asignar a una posición" " de estantería." -#: dcim/models/devices.py:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -4954,7 +4950,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:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -4962,7 +4958,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:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4971,23 +4967,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:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} no es una dirección IPv4." -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, 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:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} no es una dirección IPv6." -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4997,25 +4993,25 @@ msgstr "" "dispositivos, pero el tipo de este dispositivo pertenece a " "{devicetype_manufacturer}." -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, 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:986 +#: dcim/models/devices.py:988 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:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "módulo" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "módulos" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5024,22 +5020,22 @@ msgstr "" "El módulo debe instalarse en un compartimiento de módulos que pertenezca al " "dispositivo asignado ({device})." -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "dominio" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "chasis virtual" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, 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:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5048,33 +5044,33 @@ msgstr "" "No se puede eliminar el chasis virtual {self}. Hay interfaces miembros que " "forman interfaces LAG entre chasis." -#: dcim/models/devices.py:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificador" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "Identificador numérico exclusivo del dispositivo principal" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "comentarios" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "contexto de dispositivo virtual" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "contextos de dispositivos virtuales" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} no es un IPv{family} dirección." -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 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 " @@ -5465,7 +5461,7 @@ msgstr "Puerto de consola" msgid "Reachable" msgstr "Accesible" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5484,7 +5480,7 @@ msgstr "Dispositivos" msgid "VMs" msgstr "VM" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5493,62 +5489,62 @@ msgstr "VM" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "Plantilla de configuración" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "Dirección IP" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "Dirección IPv4" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "Dirección IPv6" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "Posición VC" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "Prioridad VC" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principal" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "Posición (bahía de dispositivos)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "Puertos de consola" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "Puertos de servidor de consola" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "Puertos de alimentación" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "tomas de corriente" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5558,53 +5554,53 @@ msgstr "tomas de corriente" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "Puertos frontales" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "Compartimentos para dispositivos" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "Bahías de módulos" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "Artículos de inventario" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Bahía de módulos" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "Color del cable" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "Vincula a tus compañeros" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "Marcar conectado" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "Consumo máximo (W)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "Sorteo asignado (W)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5613,12 +5609,12 @@ msgstr "Sorteo asignado (W)" msgid "IP Addresses" msgstr "Direcciones IP" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "Grupos FHRP" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5627,20 +5623,20 @@ msgstr "Grupos FHRP" msgid "Tunnel" msgstr "Túnel" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "Solo administración" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "Enlace inalámbrico" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5649,7 +5645,7 @@ msgstr "VDC" msgid "Inventory Items" msgstr "Artículos de inventario" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5658,28 +5654,28 @@ msgstr "Artículos de inventario" msgid "Rear Port" msgstr "Puerto trasero" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "Módulo instalado" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "Serie del módulo" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "Etiqueta de activo del módulo" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "Estado del módulo" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "Componente" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "Artículos" @@ -6244,7 +6240,7 @@ msgid "Cluster type (slug)" msgstr "Tipo de clúster (babosa)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "Grupo de clústeres" @@ -6375,8 +6371,8 @@ msgid "Is active" msgstr "Está activo" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6385,8 +6381,8 @@ msgid "Content types" msgstr "Tipos de contenido" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Uno o más tipos de objetos asignados" @@ -6434,29 +6430,39 @@ msgstr "" " opcionales separadas por dos puntos: «Choice1:First Choice, Choice2:Second " "Choice»" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "clase de botones" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +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:188 msgid "Action object" msgstr "Objeto de acción" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 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:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} no se encontró" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "Guión {name} no se encontró" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "Tipo de objeto asignado" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "La clasificación de entrada" @@ -7422,16 +7428,6 @@ msgstr "Código de plantilla Jinja2 para la URL del enlace" 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:353 -msgid "button class" -msgstr "clase de botones" - -#: extras/models/models.py:357 -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/models/models.py:360 msgid "new window" msgstr "ventana nueva" @@ -7621,7 +7617,7 @@ msgid "staged changes" msgstr "cambios por etapas" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +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 @@ -7922,7 +7918,7 @@ msgid "VLAN number (1-4094)" msgstr "Número de VLAN (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "Dirección" @@ -8091,7 +8087,7 @@ msgid "Authentication key" msgstr "Clave de autenticación" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -8108,11 +8104,11 @@ msgstr "VLAN (VID) secundaria mínima" msgid "Maximum child VLAN VID" msgstr "VLAN (VID) secundaria máxima" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "Tipo de ámbito" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "Alcance" @@ -8121,8 +8117,8 @@ msgstr "Alcance" msgid "Site & Group" msgstr "Sitio y grupo" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -8162,7 +8158,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo principal de la interfaz asignada (si existe)" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8340,8 +8336,8 @@ msgstr "Puerto" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8364,7 +8360,7 @@ msgstr "Asignación de sitio/VLAN" msgid "IP Range" msgstr "Rango de IP" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "Grupo FHRP" @@ -8377,7 +8373,7 @@ msgstr "Haga que esta sea la IP principal del dispositivo/VM" 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:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8392,34 +8388,25 @@ msgstr "" "Solo las direcciones IP asignadas a una interfaz se pueden designar como IP " "principales." -#: ipam/forms/model_forms.py:373 -#, 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/forms/model_forms.py:379 -#, python-brace-format -msgid "" -"{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "" -"{ip} es una dirección de transmisión, que puede no estar asignada a una " -"interfaz." - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "Dirección IP virtual" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "La asignación ya existe" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupo VLAN" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "VLAN secundarias" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -8427,15 +8414,15 @@ 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:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Plantilla de servicio" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "Plantilla de servicio" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8603,12 +8590,12 @@ msgstr "prefijos" msgid "Cannot create prefix with /0 mask." msgstr "No se puede crear un prefijo con la máscara /0." -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "tabla global" @@ -8705,12 +8692,25 @@ msgstr "direcciones IP" 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:856 +#: ipam/models/ip.py:850 +#, 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:861 +#, python-brace-format +msgid "" +"{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "" +"{ip} es una dirección de transmisión, que puede no estar asignada a una " +"interfaz." + +#: ipam/models/ip.py:875 #, 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:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Solo a las direcciones IPv6 se les puede asignar el estado SLAAC" @@ -9504,7 +9504,7 @@ msgstr "Máquinas virtuales" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "Discos virtuales" @@ -10431,8 +10431,8 @@ msgstr "Programación" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "cada %(interval)s segundos" +msgid "every %(interval)s minutes" +msgstr "cada %(interval)s minutos" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -12994,68 +12994,68 @@ msgstr "Este tipo de objeto no admite restricciones." msgid "Invalid filter for {model}: {error}" msgstr "Filtro no válido para {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "usuario" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "usuarios" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "Ya existe un usuario con este nombre de usuario." -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "grupo" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "grupos" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "preferencias de usuario" -#: users/models.py:174 +#: users/models.py:175 #, 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.py:186 +#: users/models.py:187 #, 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.py:252 +#: users/models.py:253 msgid "expires" msgstr "caduca" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "utilizado por última vez" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "clave" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "escritura habilitada" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "" "Permitir operaciones de creación/actualización/eliminación con esta clave" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "IP permitidas" -#: users/models.py:283 +#: users/models.py:284 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\"" @@ -13064,34 +13064,34 @@ 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.py:291 +#: users/models.py:296 msgid "token" msgstr "simbólico" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "fichas" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "La lista de acciones concedidas por este permiso" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "restricciones" -#: users/models.py:379 +#: users/models.py:384 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.py:386 +#: users/models.py:391 msgid "permission" msgstr "permiso" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "permisos" @@ -13366,47 +13366,56 @@ 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:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Gama»{value}«no es válido." -#: utilities/forms/utils.py:225 +#: utilities/forms/utils.py:74 +#, python-brace-format +msgid "" +"Invalid range: Ending value ({end}) must be greater than beginning value " +"({begin})." +msgstr "" +"Intervalo no válido: valor final ({end}) debe ser mayor que el valor inicial" +" ({begin})." + +#: 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:231 +#: 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:240 +#: 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:263 +#: 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:265 +#: 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:269 +#: 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:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Encabezado de columna obligatorio»{header}«no se encontró." @@ -14048,6 +14057,11 @@ msgstr "Propuesta" msgid "Assigned Object Type" msgstr "Tipo de objeto asignado" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "Interfaz de túnel" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "Primera rescisión" diff --git a/netbox/translations/fr/LC_MESSAGES/django.mo b/netbox/translations/fr/LC_MESSAGES/django.mo index 234a12ba9..4bb44f73d 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 374b65e7e..cc489f360 100644 --- a/netbox/translations/fr/LC_MESSAGES/django.po +++ b/netbox/translations/fr/LC_MESSAGES/django.po @@ -6,15 +6,16 @@ # Translators: # Jonathan Senecal, 2024 # Jeremy Stretch, 2024 +# Quentin Laurent, 2024 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Quentin Laurent, 2024\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" @@ -64,8 +65,8 @@ msgid "Your preferences have been updated." msgstr "Vos préférences ont été mises à jour." #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "Planifié" @@ -75,8 +76,8 @@ msgid "Provisioning" msgstr "Approvisionnement" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -85,7 +86,7 @@ msgid "Active" msgstr "Actif" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "Hors ligne" @@ -98,7 +99,7 @@ msgstr "Déprovisionnement" msgid "Decommissioned" msgstr "Mis hors service" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -107,7 +108,7 @@ msgstr "Mis hors service" msgid "Region (ID)" msgstr "Région (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -117,7 +118,7 @@ msgstr "Région (ID)" msgid "Region (slug)" msgstr "Région (slug)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -125,7 +126,7 @@ msgstr "Région (slug)" msgid "Site group (ID)" msgstr "Groupe de sites (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -135,7 +136,7 @@ msgid "Site group (slug)" msgstr "Groupe de sites (slug)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -158,8 +159,8 @@ msgstr "Groupe de sites (slug)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -181,13 +182,13 @@ msgstr "Groupe de sites (slug)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -199,33 +200,39 @@ msgstr "Site (slug)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "Fournisseur (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "Fournisseur (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "Fournisseur (slug)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "Compte fournisseur (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "Réseau fournisseur (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "Type de circuit (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "Type de circuit (slug)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -235,13 +242,13 @@ msgstr "Type de circuit (slug)" msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -251,7 +258,7 @@ msgstr "Site (ID)" msgid "Search" msgstr "Rechercher" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -259,11 +266,11 @@ msgstr "Rechercher" msgid "Circuit" msgstr "Circuit" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "Réseau fournisseur (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -374,8 +381,8 @@ msgstr "Description" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -387,18 +394,18 @@ msgstr "Description" msgid "Provider" msgstr "Prestataire" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "Identifiant du service" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -410,7 +417,7 @@ msgid "Color" msgstr "Couleur" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -429,7 +436,7 @@ msgstr "Couleur" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -454,12 +461,12 @@ msgid "Type" msgstr "Type" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "Identifiant de compte du prestataire" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -473,8 +480,8 @@ msgstr "Identifiant de compte du prestataire" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -482,7 +489,7 @@ msgstr "Identifiant de compte du prestataire" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -503,7 +510,7 @@ msgstr "Identifiant de compte du prestataire" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -514,7 +521,7 @@ msgid "Status" msgstr "Statut" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -572,15 +579,15 @@ msgstr "Statut" msgid "Tenant" msgstr "Locataire" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "Date d'installation" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "Date de résiliation" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "Débit engagé (Kbits/s)" @@ -613,7 +620,7 @@ msgstr "Prestataire assigné" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "Couleur RVB en hexadécimal. Exemple :" @@ -649,12 +656,12 @@ msgstr "État opérationnel" msgid "Assigned tenant" msgstr "Locataire assigné" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "Réseau de fournisseurs" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -678,7 +685,7 @@ msgstr "Réseau de fournisseurs" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -688,13 +695,7 @@ msgstr "Réseau de fournisseurs" msgid "Location" msgstr "Emplacement" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -707,7 +708,7 @@ msgstr "ASN" msgid "Contacts" msgstr "Contacts" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -722,7 +723,7 @@ msgstr "Contacts" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -732,7 +733,7 @@ msgstr "Contacts" msgid "Region" msgstr "Région" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -742,19 +743,15 @@ msgstr "Région" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "Groupe de sites" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (ancien)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -780,7 +777,7 @@ msgstr "ASN (ancien)" msgid "Attributes" msgstr "Attributs" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -801,7 +798,7 @@ msgstr "Type de circuit" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "couleur" @@ -823,8 +820,8 @@ msgid "Unique circuit ID" msgstr "ID de circuit unique" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -903,7 +900,7 @@ msgstr "ID du panneau de raccordement et numéro (s) de port" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "description" @@ -933,8 +930,8 @@ msgstr "" #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -947,7 +944,7 @@ msgstr "" #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1005,13 +1002,13 @@ msgstr "réseaux de fournisseurs" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1077,9 +1074,9 @@ msgstr "réseaux de fournisseurs" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1114,7 +1111,7 @@ msgstr "Taux d'engagement" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1126,7 +1123,7 @@ msgstr "Taux d'engagement" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1163,7 +1160,7 @@ msgid "Completed" msgstr "Terminé" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "Échoué" @@ -1245,7 +1242,7 @@ msgstr "Source de données (nom)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1384,7 +1381,7 @@ msgstr "" msgid "Rack Elevations" msgstr "Élévations des rayonnages" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1446,7 +1443,7 @@ msgstr " (par défaut)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "créé" @@ -1504,7 +1501,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "activé" @@ -1723,7 +1720,7 @@ msgid "Staging" msgstr "Mise en scène" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "Démantèlement" @@ -1783,7 +1780,7 @@ msgstr "Obsolète" msgid "Millimeters" msgstr "Millimètres" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "Pouces" @@ -1795,8 +1792,8 @@ msgstr "Pouces" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1809,7 +1806,7 @@ msgstr "Pouces" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "Parent" @@ -1858,7 +1855,7 @@ msgstr "De droite à gauche" msgid "Side to rear" msgstr "D'un côté à l'arrière" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "Passif" @@ -1886,8 +1883,8 @@ msgstr "International/ITA" msgid "Proprietary" msgstr "Propriétaire" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "Autres" @@ -1900,177 +1897,177 @@ msgstr "ITA/International" msgid "Physical" msgstr "Physique" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "Virtuel" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "Sans fil" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "Interfaces virtuelles" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "Passerelle" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "Groupe d'agrégation de liens (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "Ethernet (fixe)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "Ethernet (modulaire)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "Ethernet (panneau arrière)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "Cellulaire" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "Série" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "Coaxiale" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "Empilage" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "La moitié" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "Complet" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "Automatique" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "Accès" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Tagué" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "Tagué (Tous)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "Norme IEEE" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "24 V passif (2 paires)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "24 V passif (4 paires)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "48 V passif (2 paires)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "48 V passif (4 paires)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "Cuivre" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "fibre optique" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "Fibre" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "Connecté" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "Kilomètres" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "Compteurs" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "Centimètres" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "Miles" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "Pieds" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "Kilogrammes" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "Grammes" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "Livres" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "Onces" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "Primaire" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "Redondant" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "Monophasé" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "Triphasé" @@ -2347,7 +2344,7 @@ msgid "Virtual Chassis (ID)" msgstr "Châssis virtuel (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2371,7 +2368,7 @@ msgstr "VID attribué" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2379,8 +2376,8 @@ msgstr "VID attribué" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2393,7 +2390,7 @@ msgstr "VID attribué" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2407,7 +2404,7 @@ msgid "L2VPN (ID)" msgstr "L2VPN (IDENTIFIANT)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2478,7 +2475,7 @@ msgstr "Balises" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2497,7 +2494,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2547,8 +2544,8 @@ msgstr "Fuseau horaire" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2557,7 +2554,7 @@ msgstr "Fuseau horaire" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2575,7 +2572,7 @@ msgstr "Fuseau horaire" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2669,7 +2666,7 @@ msgstr "Unité de poids" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2702,7 +2699,7 @@ msgstr "Matériel" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2749,7 +2746,7 @@ msgstr "Type d'appareil" msgid "Module Type" msgstr "Type de module" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "rôle de machine virtuelle" @@ -2781,13 +2778,15 @@ msgstr "Rôle de l'appareil" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "Plateforme" @@ -2811,16 +2810,16 @@ msgstr "Plateforme" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2842,7 +2841,7 @@ msgstr "Plateforme" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2982,7 +2981,7 @@ msgid "Wireless role" msgstr "Rôle sans fil" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2991,7 +2990,7 @@ msgstr "Rôle sans fil" msgid "Module" msgstr "Modules" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "DÉCALAGE" @@ -3003,7 +3002,7 @@ msgstr "Contextes des appareils virtuels" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3028,13 +3027,13 @@ msgid "VLAN group" msgstr "groupe VLAN" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "VLAN non balisé" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "VLAN balisés" @@ -3044,7 +3043,7 @@ msgid "Wireless LAN group" msgstr "Groupe LAN sans fil" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Réseaux locaux sans fil" @@ -3216,9 +3215,9 @@ msgid "Virtual chassis" msgstr "Châssis virtuel" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3230,7 +3229,7 @@ msgstr "Châssis virtuel" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "Cluster" @@ -3412,7 +3411,7 @@ msgstr "Port arrière correspondant" msgid "Physical medium classification" msgstr "Classification des supports physiques" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "Appareil installé" @@ -3500,7 +3499,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminaison latérale introuvable : {device} {name}" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "Maître" @@ -3627,7 +3626,7 @@ msgstr "Occupé" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3641,7 +3640,7 @@ msgid "Virtual Device Context" msgstr "Contexte du périphérique virtuel" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3673,7 +3672,7 @@ msgid "Transmit power (dBm)" msgstr "Puissance de transmission (dBm)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3681,7 +3680,7 @@ msgstr "Puissance de transmission (dBm)" msgid "Cable" msgstr "câble" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "Découvert" @@ -3718,7 +3717,7 @@ msgstr "Réservation" #: dcim/forms/model_forms.py:301 dcim/forms/model_forms.py:384 #: utilities/forms/fields/fields.py:47 msgid "Slug" -msgstr "limace" +msgstr "Identifiant" #: dcim/forms/model_forms.py:308 templates/dcim/devicetype.html:12 msgid "Chassis" @@ -3728,7 +3727,7 @@ msgstr "Châssis" msgid "Device Role" msgstr "Rôle de l'appareil" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "L'unité la moins numérotée occupée par l'appareil" @@ -3780,9 +3779,7 @@ msgstr "Interface LAG" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "Interface" @@ -3859,7 +3856,7 @@ msgstr "" "sont attendus." #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "Ports arrière" @@ -3897,7 +3894,7 @@ msgstr "" "Le nombre de ports frontaux à créer ({frontport_count}) doit correspondre au" " nombre sélectionné de positions des ports arrière ({rearport_count})." -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4643,13 +4640,13 @@ msgstr "rôle des articles d'inventaire" msgid "inventory item roles" msgstr "rôles des articles d'inventaire" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "numéro de série" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "étiquette d'actif" @@ -4699,7 +4696,7 @@ msgstr "fabricant" msgid "manufacturers" msgstr "fabricants" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "modèle" @@ -4707,11 +4704,11 @@ msgstr "modèle" msgid "default platform" msgstr "plateforme par défaut" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "numéro de pièce" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Numéro de pièce discret (facultatif)" @@ -4749,7 +4746,7 @@ 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:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "débit d'air" @@ -4761,12 +4758,12 @@ msgstr "type d'appareil" msgid "device types" msgstr "types d'appareils" -#: dcim/models/devices.py:289 +#: 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é de rack." -#: dcim/models/devices.py:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -4775,7 +4772,7 @@ msgstr "" "Appareil {device} en rack {rack} ne dispose pas de suffisamment d'espace " "pour accueillir une hauteur de {height}U" -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4785,7 +4782,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} les instances déjà monté dans des" " racks." -#: dcim/models/devices.py:330 +#: dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -4793,153 +4790,153 @@ 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:336 +#: 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:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "type de module" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "types de modules" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "Des machines virtuelles peuvent être affectées à ce rôle" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "rôle de l'appareil" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "rôles des appareils" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 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:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "plateforme" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "plateformes" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "La fonction de cet appareil" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 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:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "Un tag unique utilisé pour identifier cet appareil" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "position (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "face du rack" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "IPv4 principal" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "IPv6 principal" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "IP hors bande" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "Position en VC" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "Position virtuelle du châssis" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "Priorité VC" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "Priorité d'élection principale du châssis virtuel" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "latitude" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 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:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "longitude" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "Le nom de l'appareil doit être unique par site." -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "appareil" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "appareils" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Étagère {rack} n'appartient pas au site {site}." -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, 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:849 +#: dcim/models/devices.py:851 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Étagère {rack} n'appartient pas au lieu {location}." -#: dcim/models/devices.py:856 +#: dcim/models/devices.py:858 msgid "Cannot select a rack face without assigning a rack." msgstr "Impossible de sélectionner une face de rack sans attribuer un rack." -#: dcim/models/devices.py:860 +#: dcim/models/devices.py:862 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Impossible de sélectionner une position de rack sans attribuer un rack." -#: dcim/models/devices.py:866 +#: dcim/models/devices.py:868 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 rack." -#: dcim/models/devices.py:870 +#: dcim/models/devices.py:872 msgid "Must specify rack face when defining rack position." msgstr "" "Doit spécifier la face du rack lors de la définition de la position du rack." -#: dcim/models/devices.py:878 +#: dcim/models/devices.py:880 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -4947,7 +4944,7 @@ msgstr "" "Un appareil de type 0U ({device_type}) ne peut pas être attribué à une " "position de rack." -#: dcim/models/devices.py:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -4955,7 +4952,7 @@ msgstr "" "Les types d'appareils pour enfants ne peuvent pas être attribués à une face " "de rack. Il s'agit d'un attribut de l'appareil parent." -#: dcim/models/devices.py:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -4963,7 +4960,7 @@ msgstr "" "Les types d'appareils pour enfants ne peuvent pas être affectés à une " "position en rack. Il s'agit d'un attribut de l'appareil parent." -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4972,22 +4969,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:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} n'est pas une adresse IPv4." -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, 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:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} n'est pas une adresse IPv6." -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4997,25 +4994,25 @@ msgstr "" "d'appareils, mais le type de cet appareil appartient à " "{devicetype_manufacturer}." -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, 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:986 +#: dcim/models/devices.py:988 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:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "module" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "modules" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5024,22 +5021,22 @@ msgstr "" "Le module doit être installé dans une baie de modules appartenant au " "périphérique attribué ({device})." -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "domaine" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "châssis virtuel" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, 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:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5048,33 +5045,33 @@ 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:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificateur" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "Identifiant numérique propre à l'appareil parent" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "commentaires" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "contexte du périphérique virtuel" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "contextes de périphériques virtuels" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} n'est pas un IPV{family} adresse." -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 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 " @@ -5465,7 +5462,7 @@ msgstr "Port de console" msgid "Reachable" msgstr "Joignable" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5484,7 +5481,7 @@ msgstr "Appareils" msgid "VMs" msgstr "machines virtuelles" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5493,62 +5490,62 @@ msgstr "machines virtuelles" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "Modèle de configuration" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "Adresse IP" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "Adresse IPv4" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "Adresse IPv6" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "Position en VC" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "Priorité VC" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Appareil parent" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "Position (baie de l'appareil)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "Ports de console" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "Ports du serveur de consoles" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "Ports d'alimentation" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "Prises de courant" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5558,53 +5555,53 @@ msgstr "Prises de courant" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "Ports avant" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "Baies pour appareils" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "Baies pour modules" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "Articles d'inventaire" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Module Bay" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "Couleur du câble" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "Lier les pairs" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "Marquer comme connecté" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "Tirage maximal (W)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "Tirage alloué (W)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5613,12 +5610,12 @@ msgstr "Tirage alloué (W)" msgid "IP Addresses" msgstr "Adresses IP" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "Groupes FHRP" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5627,20 +5624,20 @@ msgstr "Groupes FHRP" msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "Gestion uniquement" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "Liaison sans fil" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5649,7 +5646,7 @@ msgstr "VDC" msgid "Inventory Items" msgstr "Articles d'inventaire" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5658,28 +5655,28 @@ msgstr "Articles d'inventaire" msgid "Rear Port" msgstr "Port arrière" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "Module installé" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "Série du module" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "Étiquette d'actif du module" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "État du module" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "Composant" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "Objets" @@ -5817,7 +5814,7 @@ msgstr "Poids maximum" #: ipam/tables/asn.py:66 netbox/navigation/menu.py:16 #: netbox/navigation/menu.py:18 msgid "Sites" -msgstr "Des sites" +msgstr "Sites" #: dcim/tests/test_api.py:49 msgid "Test case must set peer_termination_type" @@ -6249,7 +6246,7 @@ msgid "Cluster type (slug)" msgstr "Type de cluster (slug)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "Groupe de clusters" @@ -6380,8 +6377,8 @@ msgid "Is active" msgstr "Est actif" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6390,8 +6387,8 @@ msgid "Content types" msgstr "Types de contenu" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Un ou plusieurs types d'objets attribués" @@ -6438,29 +6435,39 @@ msgstr "" "virgules avec des libellés facultatifs séparés par deux points : " "« Choice1:First Choice, Choice2:Second Choice »" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "classe de boutons" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +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:188 msgid "Action object" msgstr "Objet d'action" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 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:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} introuvable" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "Scénario {name} introuvable" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "Type d'objet attribué" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "La classification de l'entrée" @@ -7432,16 +7439,6 @@ msgstr "Code modèle Jinja2 pour l'URL du lien" 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:353 -msgid "button class" -msgstr "classe de boutons" - -#: extras/models/models.py:357 -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/models/models.py:360 msgid "new window" msgstr "nouvelle fenêtre" @@ -7634,7 +7631,7 @@ msgid "staged changes" msgstr "modifications échelonnées" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +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 @@ -7935,7 +7932,7 @@ msgid "VLAN number (1-4094)" msgstr "Numéro de VLAN (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "Adresse" @@ -8104,7 +8101,7 @@ msgid "Authentication key" msgstr "Clé d'authentification" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -8121,11 +8118,11 @@ msgstr "VID VLAN minimum pour enfants" msgid "Maximum child VLAN VID" msgstr "VID VLAN maximum pour enfants" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "Type de portée" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "Champ" @@ -8134,8 +8131,8 @@ msgstr "Champ" msgid "Site & Group" msgstr "Site et groupe" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -8175,7 +8172,7 @@ 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:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8354,8 +8351,8 @@ msgstr "Port" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8378,7 +8375,7 @@ msgstr "Affectation de site/VLAN" msgid "IP Range" msgstr "Plage IP" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "Groupe FHRP" @@ -8392,7 +8389,7 @@ msgstr "" 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:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8407,36 +8404,25 @@ msgstr "" "Seules les adresses IP attribuées à une interface peuvent être désignées " "comme adresses IP principales." -#: ipam/forms/model_forms.py:373 -#, 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/forms/model_forms.py:379 -#, python-brace-format -msgid "" -"{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "" -"{ip} est une adresse de diffusion, qui ne peut pas être attribuée à une " -"interface." - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "Adresse IP virtuelle" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "L'affectation existe déjà" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Groupe VLAN" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "VLAN pour enfants" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -8444,15 +8430,15 @@ 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:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modèle de service" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "Modèle de service" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8621,12 +8607,12 @@ msgstr "préfixes" msgid "Cannot create prefix with /0 mask." msgstr "Impossible de créer un préfixe avec le masque /0." -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "tableau global" @@ -8725,12 +8711,27 @@ msgstr "Adresses IP" msgid "Cannot create IP address with /0 mask." msgstr "Impossible de créer une adresse IP avec le masque /0." -#: ipam/models/ip.py:856 +#: ipam/models/ip.py:850 +#, 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:861 +#, python-brace-format +msgid "" +"{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "" +"{ip} est une adresse de diffusion, qui ne peut pas être attribuée à une " +"interface." + +#: ipam/models/ip.py:875 #, 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:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Seules les adresses IPv6 peuvent se voir attribuer le statut SLAAC" @@ -9522,7 +9523,7 @@ msgstr "Machines virtuelles" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "Disques virtuels" @@ -10451,8 +10452,8 @@ msgstr "Planification" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "chaque %(interval)s secondes" +msgid "every %(interval)s minutes" +msgstr "chaque %(interval)s minutes" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -13014,70 +13015,70 @@ msgstr "Les contraintes ne sont pas prises en charge pour ce type d'objet." msgid "Invalid filter for {model}: {error}" msgstr "Filtre non valide pour {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "utilisateur" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "utilisateurs" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "Un utilisateur avec ce nom d'utilisateur existe déjà." -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "groupe" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "groupes" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "préférences de l'utilisateur" -#: users/models.py:174 +#: users/models.py:175 #, 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.py:186 +#: users/models.py:187 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Clé '{path}'est un dictionnaire ; impossible d'attribuer une valeur autre " "que celle du dictionnaire" -#: users/models.py:252 +#: users/models.py:253 msgid "expires" msgstr "expire" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "utilisé pour la dernière fois" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "clé" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "écriture activée" -#: users/models.py:270 +#: users/models.py:271 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.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "adresses IP autorisées" -#: users/models.py:283 +#: users/models.py:284 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\"" @@ -13086,34 +13087,34 @@ 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.py:291 +#: users/models.py:296 msgid "token" msgstr "jeton" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "jetons" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "La liste des actions accordées par cette autorisation" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "entraves" -#: users/models.py:379 +#: users/models.py:384 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.py:386 +#: users/models.py:391 msgid "permission" msgstr "autorisation" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "autorisations" @@ -13355,7 +13356,7 @@ msgstr "" #: utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" -msgstr "Raccourci unique et convivial pour les URL" +msgstr "Identifiant unique utilisable dans les URL" #: utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." @@ -13392,47 +13393,56 @@ 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:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Gamme »{value}« n'est pas valide." -#: utilities/forms/utils.py:225 +#: utilities/forms/utils.py:74 +#, python-brace-format +msgid "" +"Invalid range: Ending value ({end}) must be greater than beginning value " +"({begin})." +msgstr "" +"Plage non valide : valeur de fin ({end}) doit être supérieur à la valeur de " +"départ ({begin})." + +#: utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "En-tête de colonne dupliqué ou en conflit pour »{field}«" -#: utilities/forms/utils.py:231 +#: utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "En-tête de colonne dupliqué ou en conflit pour »{header}«" -#: utilities/forms/utils.py:240 +#: utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Rangée {row}: Prévu {count_expected} colonnes mais trouvées {count_found}" -#: utilities/forms/utils.py:263 +#: utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "En-tête de colonne inattendu »{field}« trouvé." -#: utilities/forms/utils.py:265 +#: 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:269 +#: 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:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "En-tête de colonne obligatoire »{header}« introuvable." @@ -14073,6 +14083,11 @@ msgstr "Proposition" msgid "Assigned Object Type" msgstr "Type d'objet attribué" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "Interface de tunnel" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "Première résiliation" diff --git a/netbox/translations/ja/LC_MESSAGES/django.mo b/netbox/translations/ja/LC_MESSAGES/django.mo index c190f234c..da77c423a 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 14ecb3cb8..34193822c 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-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+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" @@ -65,8 +65,8 @@ msgid "Your preferences have been updated." msgstr "設定が更新されました。" #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "計画中" @@ -76,8 +76,8 @@ msgid "Provisioning" msgstr "開通" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -86,7 +86,7 @@ msgid "Active" msgstr "アクティブ" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "オフライン" @@ -99,7 +99,7 @@ msgstr "解約" msgid "Decommissioned" msgstr "廃止" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -108,7 +108,7 @@ msgstr "廃止" msgid "Region (ID)" msgstr "リージョン (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -118,7 +118,7 @@ msgstr "リージョン (ID)" msgid "Region (slug)" msgstr "リージョン (slug)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -126,7 +126,7 @@ msgstr "リージョン (slug)" msgid "Site group (ID)" msgstr "サイトグループ (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -136,7 +136,7 @@ msgid "Site group (slug)" msgstr "サイトグループ (slug)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -159,8 +159,8 @@ msgstr "サイトグループ (slug)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -182,13 +182,13 @@ msgstr "サイトグループ (slug)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "サイト" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -200,33 +200,39 @@ msgstr "サイト (slug)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "プロバイダ (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "プロバイダ (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "プロバイダ (slug)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "プロバイダアカウント (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "プロバイダネットワーク (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "回線タイプ (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "回線タイプ (slug)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -236,13 +242,13 @@ msgstr "回線タイプ (slug)" msgid "Site (ID)" msgstr "サイト (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -252,7 +258,7 @@ msgstr "サイト (ID)" msgid "Search" msgstr "検索" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -260,11 +266,11 @@ msgstr "検索" msgid "Circuit" msgstr "回線" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "プロバイダネットワーク (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -375,8 +381,8 @@ msgstr "説明" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -388,18 +394,18 @@ msgstr "説明" msgid "Provider" msgstr "プロバイダ" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "サービス ID" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -411,7 +417,7 @@ msgid "Color" msgstr "色" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -430,7 +436,7 @@ msgstr "色" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -455,12 +461,12 @@ msgid "Type" msgstr "タイプ" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "プロバイダアカウント" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -474,8 +480,8 @@ msgstr "プロバイダアカウント" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -483,7 +489,7 @@ msgstr "プロバイダアカウント" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -504,7 +510,7 @@ msgstr "プロバイダアカウント" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -515,7 +521,7 @@ msgid "Status" msgstr "ステータス" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -573,15 +579,15 @@ msgstr "ステータス" msgid "Tenant" msgstr "テナント" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "開通日" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "終了日" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "保証帯域 (Kbps)" @@ -614,7 +620,7 @@ msgstr "割当プロバイダ" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "16 進数の RGB カラーコード。例:" @@ -650,12 +656,12 @@ msgstr "運用状況" msgid "Assigned tenant" msgstr "割当テナント" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "プロバイダネットワーク" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -679,7 +685,7 @@ msgstr "プロバイダネットワーク" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -689,13 +695,7 @@ msgstr "プロバイダネットワーク" msgid "Location" msgstr "ロケーション" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -708,7 +708,7 @@ msgstr "ASN" msgid "Contacts" msgstr "連絡先" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -723,7 +723,7 @@ msgstr "連絡先" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -733,7 +733,7 @@ msgstr "連絡先" msgid "Region" msgstr "リージョン" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -743,19 +743,15 @@ msgstr "リージョン" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "サイトグループ" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (レガシー)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -781,7 +777,7 @@ msgstr "ASN (レガシー)" msgid "Attributes" msgstr "属性" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -802,7 +798,7 @@ msgstr "回線タイプ" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "色" @@ -824,8 +820,8 @@ msgid "Unique circuit ID" msgstr "一意な回線 ID" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -904,7 +900,7 @@ msgstr "パッチパネル ID とポート番号" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "説明" @@ -930,8 +926,8 @@ msgstr "回線終端をサイトとプロバイダーネットワークの両方 #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -944,7 +940,7 @@ msgstr "回線終端をサイトとプロバイダーネットワークの両方 #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1002,13 +998,13 @@ msgstr "プロバイダネットワーク" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1074,9 +1070,9 @@ msgstr "プロバイダネットワーク" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1111,7 +1107,7 @@ msgstr "保証帯域" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1123,7 +1119,7 @@ msgstr "保証帯域" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1160,7 +1156,7 @@ msgid "Completed" msgstr "完了" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "失敗" @@ -1242,7 +1238,7 @@ msgstr "データソース (名前)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1377,7 +1373,7 @@ msgstr "同期するファイルをアップロードするか、データファ msgid "Rack Elevations" msgstr "ラック図" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1438,7 +1434,7 @@ msgstr " (デフォルト)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "作成日時" @@ -1496,7 +1492,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "有効" @@ -1707,7 +1703,7 @@ msgid "Staging" msgstr "ステージング" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "廃止" @@ -1767,7 +1763,7 @@ msgstr "廃止済" msgid "Millimeters" msgstr "ミリメートル" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "インチ" @@ -1779,8 +1775,8 @@ msgstr "インチ" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1793,7 +1789,7 @@ msgstr "インチ" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "親" @@ -1842,7 +1838,7 @@ msgstr "右から左" msgid "Side to rear" msgstr "側面から背面" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "パッシブ" @@ -1870,8 +1866,8 @@ msgstr "International/ITA" msgid "Proprietary" msgstr "独自規格" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "その他" @@ -1884,177 +1880,177 @@ msgstr "ITA/International" msgid "Physical" msgstr "物理" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "仮想" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "無線" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "仮想インタフェース" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "ブリッジ" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "リンクアグリゲーション (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "イーサネット (固定)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "イーサネット (モジュール)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "イーサネット (バックプレーン)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "セルラー" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "シリアル" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "同軸" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "スタック" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "半二重" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "全二重" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "自動" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "アクセス" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "タグ付き" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "タグ付き (全て)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "IEEE スタンダード" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "パッシブ 24V (2 ペア)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "パッシブ 24V (4ペア)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "パッシブ 48V (2 ペア)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "パッシブ 48V (4ペア)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "カッパー" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "光ファイバー" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "ファイバー" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "接続済" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "キロメートル" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "メートル" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "センチメートル" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "マイル" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "フィート" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "キログラム" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "グラム" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "ポンド" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "オンス" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "プライマリ" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "冗長" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "単相" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "三相" @@ -2331,7 +2327,7 @@ msgid "Virtual Chassis (ID)" msgstr "バーチャルシャーシ (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2355,7 +2351,7 @@ msgstr "割当 VID" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2363,8 +2359,8 @@ msgstr "割当 VID" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2377,7 +2373,7 @@ msgstr "割当 VID" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2391,7 +2387,7 @@ msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2462,7 +2458,7 @@ msgstr "タグ" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2479,7 +2475,7 @@ msgstr "英数字の範囲が使用できます。(作成する名前の数と #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2529,8 +2525,8 @@ msgstr "タイムゾーン" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2539,7 +2535,7 @@ msgstr "タイムゾーン" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2557,7 +2553,7 @@ msgstr "タイムゾーン" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2651,7 +2647,7 @@ msgstr "重量単位" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2684,7 +2680,7 @@ msgstr "ハードウェア" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2731,7 +2727,7 @@ msgstr "デバイスタイプ" msgid "Module Type" msgstr "モジュールタイプ" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "仮想マシンのロール" @@ -2763,13 +2759,15 @@ msgstr "デバイスロール" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "プラットフォーム" @@ -2793,16 +2791,16 @@ msgstr "プラットフォーム" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2824,7 +2822,7 @@ msgstr "プラットフォーム" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2964,7 +2962,7 @@ msgid "Wireless role" msgstr "無線ロール" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2973,7 +2971,7 @@ msgstr "無線ロール" msgid "Module" msgstr "モジュール" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "LAG" @@ -2985,7 +2983,7 @@ msgstr "仮想デバイスコンテキスト" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3010,13 +3008,13 @@ msgid "VLAN group" msgstr "VLAN グループ" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "タグなし VLAN" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "タグ付き VLAN" @@ -3026,7 +3024,7 @@ msgid "Wireless LAN group" msgstr "無線 LAN グループ" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "無線 LAN" @@ -3197,9 +3195,9 @@ msgid "Virtual chassis" msgstr "バーチャルシャーシ" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3211,7 +3209,7 @@ msgstr "バーチャルシャーシ" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "クラスタ" @@ -3388,7 +3386,7 @@ msgstr "対応する背面ポート" msgid "Physical medium classification" msgstr "物理媒体の分類" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "取付済みデバイス" @@ -3476,7 +3474,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} サイドターミネーションが見つかりません: {device} {name}" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "マスター" @@ -3598,7 +3596,7 @@ msgstr "専有済" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3612,7 +3610,7 @@ msgid "Virtual Device Context" msgstr "仮想デバイスコンテキスト" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3644,7 +3642,7 @@ msgid "Transmit power (dBm)" msgstr "送信出力 (dBm)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3652,7 +3650,7 @@ msgstr "送信出力 (dBm)" msgid "Cable" msgstr "ケーブル" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "自動検出" @@ -3697,7 +3695,7 @@ msgstr "シャーシ" msgid "Device Role" msgstr "デバイスロール" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "デバイスが使用している最も小さいユニット番号" @@ -3748,9 +3746,7 @@ msgstr "LAG インタフェース" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "インタフェース" @@ -3821,7 +3817,7 @@ msgid "" msgstr "パターンは {value_count} 個の値を示す範囲を指定しますが、 {pattern_count} 個の値が必要です。" #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "背面ポート" @@ -3853,7 +3849,7 @@ msgid "" msgstr "" "前面ポートの数 ({frontport_count}) は選択した背面ポートの数 ({rearport_count}) と一致する必要があります。" -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4545,13 +4541,13 @@ msgstr "在庫品目ロール" msgid "inventory item roles" msgstr "在庫品目ロール" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "シリアル番号" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "アセットタグ" @@ -4599,7 +4595,7 @@ msgstr "メーカ" msgid "manufacturers" msgstr "メーカ" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "型" @@ -4607,11 +4603,11 @@ msgstr "型" msgid "default platform" msgstr "デフォルトプラットフォーム" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "パーツ番号" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "個別の部品番号 (オプション)" @@ -4645,7 +4641,7 @@ msgid "" "device type is neither a parent nor a child." msgstr "親デバイスはデバイスベイに子デバイスを収納します。このデバイスタイプが親でも子供でもない場合は、空白のままにしてください。" -#: dcim/models/devices.py:128 dcim/models/devices.py:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "エアフロー" @@ -4657,18 +4653,18 @@ msgstr "デバイスタイプ" msgid "device types" msgstr "デバイスタイプ" -#: dcim/models/devices.py:289 +#: 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:306 +#: 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:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4677,173 +4673,173 @@ msgstr "" "高さは 0U にできません: {racked_instance_count} インスタンス " "がラックに取り付け済みです。" -#: dcim/models/devices.py:330 +#: 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:336 +#: dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "子デバイスタイプは 0U でなければなりません。" -#: dcim/models/devices.py:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "モジュールタイプ" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "モジュールタイプ" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "仮想マシンをこのロールに割り当てることができます" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "デバイスロール" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "デバイスロール" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "オプションで、このプラットフォームを特定のメーカのデバイスに限定できます" -#: dcim/models/devices.py:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "プラットフォーム" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "プラットフォーム" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "このデバイスが果たす機能" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "製造元によって割当られた、シャーシのシリアル番号" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "このデバイスを識別するために使用される一意のタグ" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "ポジション (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "ラックフェイス" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "プライマリ IPv4" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "プライマリ IPv6" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "out-of-band IP" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "VCポジション" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "バーチャルシャーシポジション" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "VC プライオリティ" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "バーチャルシャーシのマスター選択優先順位" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "緯度" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "10 進数形式の GPS 座標 (xx.yyyyyy)" -#: dcim/models/devices.py:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "経度" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "デバイス名はサイトごとに一意である必要があります。" -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "デバイス" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "デバイス" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "ラック {rack} はサイト{site}に属していません 。" -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "ロケーション {location} はサイト{site}に属していません 。" -#: dcim/models/devices.py:849 +#: dcim/models/devices.py:851 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "ラック {rack} はロケーション{location}に属していません 。" -#: dcim/models/devices.py:856 +#: dcim/models/devices.py:858 msgid "Cannot select a rack face without assigning a rack." msgstr "ラックを割り当てないとラックフェースは選択できません。" -#: dcim/models/devices.py:860 +#: dcim/models/devices.py:862 msgid "Cannot select a rack position without assigning a rack." msgstr "ラックを割り当てないとラックポジションを選択できません。" -#: dcim/models/devices.py:866 +#: dcim/models/devices.py:868 msgid "Position must be in increments of 0.5 rack units." msgstr "ポジションは 0.5 ラックユニット単位で入力する必要があります。" -#: dcim/models/devices.py:870 +#: dcim/models/devices.py:872 msgid "Must specify rack face when defining rack position." msgstr "ラックの位置を定義するときは、ラックの面を指定する必要があります。" -#: dcim/models/devices.py:878 +#: dcim/models/devices.py:880 #, 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:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "子デバイスタイプをラックフェースに割り当てることはできません。これは親デバイスの属性です。" -#: dcim/models/devices.py:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "子デバイスタイプをラックポジションに割り当てることはできません。これは親デバイスの属性です。" -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4852,22 +4848,22 @@ msgstr "" "U{position} が既に占有されているか、このデバイスタイプを収容するのに十分なスペースがありません: {device_type} " "({u_height}U)" -#: dcim/models/devices.py:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} は IPv4 アドレスではありません。" -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "指定された IP アドレス ({ip}) はこのデバイスに割り当てられていません。" -#: dcim/models/devices.py:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} IPv6 アドレスではありません。" -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4876,78 +4872,78 @@ msgstr "" "割当られたプラットフォームは{platform_manufacturer} のデバイスタイプに限定されます 。しかし、このデバイスのタイプは " "{devicetype_manufacturer}に属します。" -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "割当クラスタは別のサイトに属しています ({site})" -#: dcim/models/devices.py:986 +#: dcim/models/devices.py:988 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "仮想シャーシに割当られたデバイスには、その位置が定義されている必要があります。" -#: dcim/models/devices.py:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "モジュール" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "モジュール" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "モジュールは、割当デバイスに属するモジュールベイ内に取り付ける必要があります ({device})。" -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "ドメイン" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "バーチャルシャーシ" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "選択したマスター ({master}) はこの仮想シャーシに割り当てられていません。" -#: dcim/models/devices.py:1354 +#: dcim/models/devices.py:1359 #, 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:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "識別子" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "親デバイスに固有の数値識別子" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "コメント" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "仮想デバイスコンテキスト" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "仮想デバイスコンテキスト" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip}は IPv{family}アドレスではありません。" -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "プライマリ IP アドレスは、割当デバイスのインタフェースに属している必要があります。" @@ -5322,7 +5318,7 @@ msgstr "コンソールポート" msgid "Reachable" msgstr "到達可能" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5341,7 +5337,7 @@ msgstr "デバイス" msgid "VMs" msgstr "仮想マシン" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5350,62 +5346,62 @@ msgstr "仮想マシン" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "設定テンプレート" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "IP アドレス" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "IPv4 アドレス" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "IPv6 アドレス" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "VC ポジション" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "VC プライオリティ" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "親デバイス" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "位置 (デバイスベイ)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "コンソールポート" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "コンソールサーバポート" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "電源ポート" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "電源コンセント" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5415,53 +5411,53 @@ msgstr "電源コンセント" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "インタフェース" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "前面ポート" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "デバイスベイ" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "モジュールベイ" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "在庫品目" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "モジュールベイ" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "ケーブル色" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "対向" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "接続済みとしてマークする" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "最大電力 (W)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "割当電力 (W)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5470,12 +5466,12 @@ msgstr "割当電力 (W)" msgid "IP Addresses" msgstr "IP アドレス" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "FHRP グループ" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5484,20 +5480,20 @@ msgstr "FHRP グループ" msgid "Tunnel" msgstr "トンネル" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "管理のみ" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "無線リンク" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5506,7 +5502,7 @@ msgstr "VDC" msgid "Inventory Items" msgstr "在庫品目" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5515,28 +5511,28 @@ msgstr "在庫品目" msgid "Rear Port" msgstr "背面ポート" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "取付済みモジュール" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "モジュールシリアル番号" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "モジュール資産タグ" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "モジュールステータス" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "構成要素" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "アイテム" @@ -6094,7 +6090,7 @@ msgid "Cluster type (slug)" msgstr "クラスタタイプ (slug)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "クラスタグループ" @@ -6225,8 +6221,8 @@ msgid "Is active" msgstr "有効" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6235,8 +6231,8 @@ msgid "Content types" msgstr "コンテンツタイプ" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "1 つ以上の割当オブジェクトタイプ" @@ -6278,33 +6274,44 @@ msgstr "定義済みの選択肢の基本セット (存在する場合)" msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" -msgstr "カンマで区切られたフィールド選択肢とコロンで区切られたオプションのラベルを引用符で囲んだ文字列:「選択肢1:第一選択、選択肢2:第二選択」" +msgstr "" +"引用符で囲んだ、カンマ区切りの選択肢。コロン区切りでラベル設定可能: \"choice1:First Choice,choice2:Second " +"Choice\"" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "ボタンクラス" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +msgid "" +"The class of the first link in a group will be used for the dropdown button" +msgstr "グループ内の最初のリンクのクラスがドロップダウンボタンに使用されます" + +#: extras/forms/bulk_import.py:188 msgid "Action object" msgstr "アクションオブジェクト" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 msgid "Webhook name or script as dotted path module.Class" -msgstr "ドットパス形式のウェブフック名またはスクリプト module.Class" +msgstr "ドットパス形式 (module.Class) のウェブフック名またはスクリプト" -#: extras/forms/bulk_import.py:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "ウェブフック {name} 見つかりません" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "スクリプト {name} 見つかりません" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "割当オブジェクトタイプ" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" -msgstr "エントリーの分類" +msgstr "エントリの分類" #: extras/forms/filtersets.py:53 msgid "Field type" @@ -6320,7 +6327,7 @@ msgstr "選択肢" #: templates/core/job.html:86 templates/extras/configcontext.html:86 #: templates/extras/eventrule.html:111 msgid "Data" -msgstr "[データ]" +msgstr "データ" #: extras/forms/filtersets.py:152 extras/forms/filtersets.py:341 #: extras/forms/filtersets.py:427 utilities/choices.py:219 @@ -6330,11 +6337,11 @@ msgstr "データファイル" #: extras/forms/filtersets.py:185 msgid "Content type" -msgstr "コンテンツタイプ" +msgstr "Content type" #: extras/forms/filtersets.py:232 extras/models/models.py:209 msgid "HTTP content type" -msgstr "HTTP コンテンツタイプ" +msgstr "HTTP content type" #: extras/forms/filtersets.py:254 extras/forms/model_forms.py:271 #: templates/extras/eventrule.html:46 @@ -6359,7 +6366,7 @@ msgstr "オブジェクト削除" #: extras/forms/filtersets.py:299 msgid "Job starts" -msgstr "ジョブ開始" +msgstr "ジョブの開始" #: extras/forms/filtersets.py:306 extras/forms/model_forms.py:290 msgid "Job terminations" @@ -6416,11 +6423,11 @@ msgstr "テナントグループ" #: extras/forms/filtersets.py:454 extras/forms/filtersets.py:495 msgid "After" -msgstr "後" +msgstr "以降" #: extras/forms/filtersets.py:459 extras/forms/filtersets.py:500 msgid "Before" -msgstr "変更前" +msgstr "以前" #: extras/forms/filtersets.py:490 extras/tables/tables.py:431 #: templates/extras/htmx/report_result.html:43 @@ -6448,26 +6455,25 @@ msgstr "動作" #: extras/forms/model_forms.py:62 msgid "Values" -msgstr "価値" +msgstr "値" #: extras/forms/model_forms.py:71 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." -msgstr "" -"このフィールドに保存されているデータのタイプ。オブジェクト/マルチオブジェクトフィールドの場合は、関連するオブジェクトタイプを以下から選択してください。" +msgstr "このフィールドのタイプ。オブジェクト/マルチオブジェクトフィールドの場合は、関連するオブジェクトタイプを以下から選択してください。" #: extras/forms/model_forms.py:74 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." -msgstr "これはフォームフィールドのヘルプテキストとして表示されます。Markdown はサポートされています。" +msgstr "これはフォームフィールドのヘルプテキストとして表示されます。Markdown がサポートされています。" #: extras/forms/model_forms.py:91 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 つの選択肢を入力します。各選択肢にコロンを付けることでオプションのラベルを指定できます。例:" +msgstr "1 行に 1 つの選択肢を入力します。必要に応じて、各選択肢にコロンを付けることで、ラベルを指定できます。例:" #: extras/forms/model_forms.py:132 templates/extras/customlink.html:10 msgid "Custom Link" @@ -6506,7 +6512,7 @@ msgstr "レンダリング" #: extras/forms/model_forms.py:182 extras/forms/model_forms.py:534 msgid "Template content is populated from the remote source selected below." -msgstr "テンプレートコンテンツは、以下で選択したリモートソースから入力されます。" +msgstr "選択したリモートソースから、テンプレートコンテンツが入力されます。" #: extras/forms/model_forms.py:189 extras/forms/model_forms.py:541 msgid "Must specify either local content or a data file" @@ -6527,17 +6533,17 @@ msgstr "SSL" #: extras/forms/model_forms.py:257 msgid "Action choice" -msgstr "アクション選択" +msgstr "スクリプト" #: extras/forms/model_forms.py:262 msgid "Enter conditions in JSON format." -msgstr "に条件を入力 JSON フォーマット。" +msgstr "JSON フォーマットで条件を入力。" #: extras/forms/model_forms.py:266 msgid "" "Enter parameters to pass to the action in JSON format." -msgstr "アクションに渡すパラメータを入力してください JSON フォーマット。" +msgstr "JSON フォーマットでアクションに渡すパラメータを入力してください。" #: extras/forms/model_forms.py:270 templates/extras/eventrule.html:11 msgid "Event Rule" @@ -6549,11 +6555,11 @@ msgstr "条件" #: extras/forms/model_forms.py:286 msgid "Creations" -msgstr "クリエーション" +msgstr "作成" #: extras/forms/model_forms.py:287 msgid "Updates" -msgstr "アップデート" +msgstr "更新" #: extras/forms/model_forms.py:288 msgid "Deletions" @@ -6577,7 +6583,7 @@ msgstr "テナント" #: templates/ipam/ipaddress.html:62 templates/ipam/vlan_edit.html:30 #: tenancy/forms/filtersets.py:86 users/forms/model_forms.py:324 msgid "Assignment" -msgstr "アサイメント" +msgstr "割当" #: extras/forms/model_forms.py:491 msgid "Data is populated from the remote source selected below." @@ -6589,28 +6595,28 @@ msgstr "ローカルデータまたはデータファイルのいずれかを指 #: extras/forms/model_forms.py:516 templates/core/datafile.html:65 msgid "Content" -msgstr "[コンテンツ]" +msgstr "コンテンツ" #: extras/forms/reports.py:18 extras/forms/scripts.py:24 msgid "Schedule at" -msgstr "のスケジュール" +msgstr "スケジュール" #: extras/forms/reports.py:19 msgid "Schedule execution of report to a set time" -msgstr "レポートの実行を設定された時間にスケジュールする" +msgstr "レポートの実行をスケジュールする" #: extras/forms/reports.py:24 extras/forms/scripts.py:30 msgid "Recurs every" -msgstr "毎回繰り返す" +msgstr "繰り返す" #: extras/forms/reports.py:28 msgid "Interval at which this report is re-run (in minutes)" -msgstr "このレポートが再実行される間隔 (分単位)" +msgstr "実行される間隔 (分)" #: extras/forms/reports.py:36 extras/forms/scripts.py:42 #, python-brace-format msgid " (current time: {now})" -msgstr " (現在の時刻: {now})" +msgstr " (現在時刻: {now})" #: extras/forms/reports.py:46 extras/forms/scripts.py:52 msgid "Scheduled time must be in the future." @@ -6622,23 +6628,23 @@ msgstr "変更をコミット" #: extras/forms/scripts.py:19 msgid "Commit changes to the database (uncheck for a dry-run)" -msgstr "変更をデータベースにコミットする (ドライランの場合はチェックを外す)" +msgstr "変更をDBにコミットする (dry runの場合はチェックを外す)" #: extras/forms/scripts.py:25 msgid "Schedule execution of script to a set time" -msgstr "設定した時間にスクリプトの実行をスケジュールする" +msgstr "スクリプトの実行をスケジュールする" #: extras/forms/scripts.py:34 msgid "Interval at which this script is re-run (in minutes)" -msgstr "このスクリプトが再実行される間隔 (分単位)" +msgstr "実行される間隔 (分単位)" #: extras/management/commands/reindex.py:66 msgid "No indexers found!" -msgstr "インデクサーが見つかりません!" +msgstr "indexerが見つかりません" #: extras/models/change_logging.py:24 msgid "time" -msgstr "時間" +msgstr "時刻" #: extras/models/change_logging.py:37 msgid "user name" @@ -6658,7 +6664,7 @@ msgstr "変更前データ" #: extras/models/change_logging.py:87 msgid "post-change data" -msgstr "変更後のデータ" +msgstr "変更後データ" #: extras/models/change_logging.py:101 msgid "object change" @@ -6666,12 +6672,12 @@ msgstr "オブジェクト変更" #: extras/models/change_logging.py:102 msgid "object changes" -msgstr "オブジェクトの変更" +msgstr "オブジェクト変更" #: extras/models/change_logging.py:118 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." -msgstr "このオブジェクトタイプでは変更ログはサポートされていません ({type})。" +msgstr "このオブジェクトタイプ ({type}) では変更ログはサポートされていません。" #: extras/models/configs.py:130 msgid "config context" @@ -6679,7 +6685,7 @@ msgstr "コンフィグコンテキスト" #: extras/models/configs.py:131 msgid "config contexts" -msgstr "設定コンテキスト" +msgstr "コンフィグコンテキスト" #: extras/models/configs.py:149 extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" @@ -6689,7 +6695,7 @@ msgstr "JSON データはオブジェクト形式である必要があります msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" -msgstr "ローカル構成コンテキストデータは、最終的にレンダリングされた構成コンテキストのソースコンテキストよりも優先されます" +msgstr "最終的なコンフィグコンテキストでは、ローカルコンフィグコンテキストが優先されます。" #: extras/models/configs.py:224 msgid "template code" @@ -6709,9 +6715,9 @@ msgid "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">additional" " parameters to pass when constructing the Jinja2 environment." msgstr "" -"任意 追加パラメータ" -" Jinja2 環境を構築するときに渡されます。" +" はJinja2 環境を構築するときに渡されます。" #: extras/models/configs.py:240 msgid "config template" @@ -6739,7 +6745,7 @@ msgstr "内部フィールド名" #: extras/models/customfields.py:96 msgid "Only alphanumeric characters and underscores are allowed." -msgstr "英数字とアンダースコアのみを使用できます。" +msgstr "英数字とアンダースコアのみ使用できます。" #: extras/models/customfields.py:101 msgid "Double underscores are not permitted in custom field names." @@ -6749,7 +6755,7 @@ msgstr "カスタムフィールド名には二重アンダースコアを使用 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" -msgstr "ユーザに表示されるフィールドの名前 (指定しない場合は、「フィールドの名前が使用されます)」" +msgstr "表示されるフィールド名 (指定しない場合は、フィールド名が使用されます)" #: extras/models/customfields.py:116 extras/models/models.py:347 msgid "group name" @@ -6767,17 +6773,17 @@ msgstr "必須" msgid "" "If true, this field is required when creating new objects or editing an " "existing object." -msgstr "true の場合、新しいオブジェクトを作成したり、既存のオブジェクトを編集したりするときに、このフィールドは必須です。" +msgstr "true の場合、オブジェクトを作成・編集する際に、このフィールドは必須です。" #: extras/models/customfields.py:132 msgid "search weight" -msgstr "検索ウェイト" +msgstr "検索優先度" #: extras/models/customfields.py:135 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." -msgstr "検索用の重み付け。値が小さいほど重要であると見なされます。検索ウェイトが 0 のフィールドは無視されます。" +msgstr "検索用の重み付け。値が小さいほど優先されます。検索優先度が 0 のフィールドは無視されます。" #: extras/models/customfields.py:140 msgid "filter logic" @@ -6787,7 +6793,7 @@ msgstr "フィルターロジック" msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." -msgstr "Loose は指定した文字列の任意のインスタンスと一致し、exact はフィールド全体と一致します。" +msgstr "Loose は指定した文字列が含まれる場合に一致し、exact はフィールド全体と一致します。" #: extras/models/customfields.py:147 msgid "default" @@ -6801,11 +6807,11 @@ msgstr "フィールドのデフォルト値 (JSON 値である必要があり #: extras/models/customfields.py:156 msgid "display weight" -msgstr "ディスプレイ重量" +msgstr "表示優先度" #: extras/models/customfields.py:157 msgid "Fields with higher weights appear lower in a form." -msgstr "重みが大きいフィールドは、フォームの下位に表示されます。" +msgstr "値が大きいフィールドは、フォームの下に表示されます。" #: extras/models/customfields.py:162 msgid "minimum value" @@ -6825,7 +6831,7 @@ msgstr "最大許容値 (数値フィールド用)" #: extras/models/customfields.py:175 msgid "validation regex" -msgstr "検証正規表現" +msgstr "バリデーション正規表現" #: extras/models/customfields.py:177 #, python-brace-format @@ -6835,11 +6841,11 @@ msgid "" "values to exactly three uppercase letters." msgstr "" "テキストフィールド値に適用する正規表現。^ と $ を使用して文字列全体を強制的に一致させます。例えば、 ^ " -"[アルファベット順]{3}$ 値をちょうど 3 文字の大文字に制限します。" +"[A-Z]{3}$ は値を3 字の大文字に制限します。" #: extras/models/customfields.py:185 msgid "choice set" -msgstr "チョイスセット" +msgstr "選択肢" #: extras/models/customfields.py:194 msgid "Specifies whether the custom field is displayed in the UI" @@ -6851,11 +6857,11 @@ msgstr "カスタムフィールド値を UI で編集できるかどうかを #: extras/models/customfields.py:205 msgid "is cloneable" -msgstr "クローン可能" +msgstr "複製可能" #: extras/models/customfields.py:206 msgid "Replicate this value when cloning objects" -msgstr "オブジェクトのクローニング時にこの値を複製する" +msgstr "オブジェクトの複製時にこの値を複製する" #: extras/models/customfields.py:219 msgid "custom field" @@ -6868,7 +6874,7 @@ msgstr "カスタムフィールド" #: extras/models/customfields.py:309 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" -msgstr "デフォルト値が無効です」{value}「: {error}" +msgstr "デフォルト値が無効です \"{value}\": {error}" #: extras/models/customfields.py:316 msgid "A minimum value may be set only for numeric fields" @@ -6902,7 +6908,7 @@ msgstr "{type} フィールドはオブジェクトタイプを定義できま #: extras/models/customfields.py:434 msgid "True" -msgstr "本当" +msgstr "真" #: extras/models/customfields.py:435 msgid "False" @@ -6911,7 +6917,7 @@ msgstr "偽" #: extras/models/customfields.py:517 #, python-brace-format msgid "Values must match this regex: {regex}" -msgstr "値は次の正規表現と一致する必要があります。 {regex}" +msgstr "値は次の正規表現とマッチする必要があります。 {regex}" #: extras/models/customfields.py:611 msgid "Value must be a string." @@ -6920,7 +6926,7 @@ msgstr "値は文字列でなければなりません。" #: extras/models/customfields.py:613 #, python-brace-format msgid "Value must match regex '{regex}'" -msgstr "値は正規表現 'と一致する必要があります{regex}'" +msgstr "値は正規表現 '{regex}'と一致する必要があります" #: extras/models/customfields.py:618 msgid "Value must be an integer." @@ -6929,16 +6935,16 @@ msgstr "値は整数でなければなりません。" #: extras/models/customfields.py:621 extras/models/customfields.py:636 #, python-brace-format msgid "Value must be at least {minimum}" -msgstr "値は少なくとも次の値でなければなりません {minimum}" +msgstr "値は {minimum} 以上でなければなりません" #: extras/models/customfields.py:625 extras/models/customfields.py:640 #, python-brace-format msgid "Value must not exceed {maximum}" -msgstr "値を超えてはいけません {maximum}" +msgstr "値は {maximum} を超えてはいけません" #: extras/models/customfields.py:633 msgid "Value must be a decimal." -msgstr "値は10進数でなければなりません。" +msgstr "値は実数でなければなりません。" #: extras/models/customfields.py:645 msgid "Value must be true or false." @@ -6950,27 +6956,27 @@ msgstr "日付値は ISO 8601 フォーマット (YYYY-MM-DD) である必要が #: extras/models/customfields.py:662 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) である必要があります。" +msgstr "日付と時刻の値は ISO 8601 フォーマット (YYYY-MM-DD HH:MM:SS) である必要があります。" #: extras/models/customfields.py:669 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." -msgstr "選択が無効です ({value}) チョイスセット用 {choiceset}。" +msgstr "{value}は選択肢 {choiceset} に含まれていません。" #: extras/models/customfields.py:679 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." -msgstr "選択が無効です ({value}) チョイスセット用 {choiceset}。" +msgstr "{value}は選択肢 {choiceset} に含まれていません。" #: extras/models/customfields.py:688 #, python-brace-format msgid "Value must be an object ID, not {type}" -msgstr "値はオブジェクトIDでなければならず、そうではありません {type}" +msgstr "{type}ではなく、オブジェクトIDを指定してください" #: extras/models/customfields.py:694 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" -msgstr "値はオブジェクト ID のリストでなければならず、そうではありません {type}" +msgstr "{type} ではなくオブジェクト ID のリストを入力してください" #: extras/models/customfields.py:698 #, python-brace-format @@ -6991,11 +6997,11 @@ msgstr "選択肢は自動的にアルファベット順に並べられます" #: extras/models/customfields.py:739 msgid "custom field choice set" -msgstr "カスタムフィールド選択セット" +msgstr "カスタムフィールド選択肢" #: extras/models/customfields.py:740 msgid "custom field choice sets" -msgstr "カスタムフィールド選択セット" +msgstr "カスタムフィールド選択肢" #: extras/models/customfields.py:776 msgid "Must define base or extra choices." @@ -7007,7 +7013,7 @@ msgstr "レイアウト" #: extras/models/dashboard.py:23 msgid "config" -msgstr "設定する" +msgstr "設定" #: extras/models/dashboard.py:28 msgid "dashboard" @@ -7094,7 +7100,7 @@ msgstr "イベントルール" msgid "" "At least one event type must be selected: create, update, delete, job start," " and/or job end." -msgstr "少なくとも 1 つのイベントタイプ (作成、更新、削除、ジョブの開始、ジョブの終了) を選択する必要があります。" +msgstr "少なくとも 1 つのイベントタイプを選択する必要があります。 : 作成、更新、削除、ジョブの開始、ジョブの終了" #: extras/models/models.py:196 msgid "" @@ -7140,13 +7146,13 @@ msgid "" "username, request_id, and data." msgstr "" "カスタムリクエストボディ用の Jinja2 テンプレート。空欄の場合は、変更を表す JSON " -"オブジェクトが含まれます。利用可能なコンテキストデータには以下が含まれます。 出来事、 " -"タイムスタンプユーザ名リクエスト ID、および " -"データ。" +"オブジェクトが含まれます。利用可能なコンテキストデータには以下が含まれます。 event, " +"model, timestamp, username, " +"request_id, and data." #: extras/models/models.py:234 msgid "secret" -msgstr "秘密" +msgstr "シークレット" #: extras/models/models.py:238 msgid "" @@ -7154,8 +7160,8 @@ msgid "" "header containing a HMAC hex digest of the payload body using the secret as " "the key. The secret is not transmitted in the request." msgstr "" -"提供された場合、リクエストには以下が含まれます X フック-シグネチャー シークレットをキーとして使用したペイロード本体の " -"HMAC 16 進ダイジェストを含むヘッダー。シークレットはリクエストでは送信されません。" +"提供された場合、リクエストにはシークレットをキーとして使用したペイロード本体のHMAC 16 進ダイジェストを含むX-Hook-" +"Signature ヘッダー が含まれます 。シークレットはリクエストでは送信されません。" #: extras/models/models.py:245 msgid "Enable SSL certificate verification. Disable with caution!" @@ -7207,15 +7213,6 @@ msgstr "リンク URL の Jinja2 テンプレートコード" msgid "Links with the same group will appear as a dropdown menu" msgstr "同じグループのリンクはドロップダウンメニューとして表示されます" -#: extras/models/models.py:353 -msgid "button class" -msgstr "ボタンクラス" - -#: extras/models/models.py:357 -msgid "" -"The class of the first link in a group will be used for the dropdown button" -msgstr "グループ内の最初のリンクのクラスがドロップダウンボタンに使用されます" - #: extras/models/models.py:360 msgid "new window" msgstr "新しいウィンドウ" @@ -7241,12 +7238,12 @@ msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." msgstr "" -"Jinja2 テンプレートコード。エクスポートされるオブジェクトのリストは、という名前のコンテキスト変数として渡されます。 " -"クエリーセット。" +"Jinja2 テンプレートコード。エクスポートされるオブジェクトのリストは、 " +"クエリーセットという名前のコンテキスト変数として渡されます。" #: extras/models/models.py:440 msgid "Defaults to text/plain; charset=utf-8" -msgstr "デフォルトは テキスト/プレーン; 文字セット=utf-8" +msgstr "デフォルトは text/plain; charset=utf-8" #: extras/models/models.py:443 msgid "file extension" @@ -7262,20 +7259,20 @@ msgstr "添付ファイルとして" #: extras/models/models.py:451 msgid "Download file as attachment" -msgstr "ファイルを添付ファイルとしてダウンロード" +msgstr "ファイルを直接ダウンロードする" #: extras/models/models.py:460 msgid "export template" -msgstr "テンプレートをエクスポート" +msgstr "エクスポートテンプレート" #: extras/models/models.py:461 msgid "export templates" -msgstr "テンプレートをエクスポートする" +msgstr "エクスポートテンプレート" #: extras/models/models.py:478 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." -msgstr "「{name}「は予約名です。別の名前を選択してください。" +msgstr "\"{name}\"は予約されています。別の名前を選択してください。" #: extras/models/models.py:528 msgid "The object type(s) to which this filter applies." @@ -7287,19 +7284,19 @@ msgstr "共有した" #: extras/models/models.py:573 msgid "saved filter" -msgstr "保存済みフィルター" +msgstr "保存済みフィルタ" #: extras/models/models.py:574 msgid "saved filters" -msgstr "保存済みフィルター" +msgstr "保存済みフィルタ" #: extras/models/models.py:592 msgid "Filter parameters must be stored as a dictionary of keyword arguments." -msgstr "フィルターパラメータは、キーワード引数の辞書として保存する必要があります。" +msgstr "フィルタパラメータは、キーワード引数の辞書として保存する必要があります。" #: extras/models/models.py:620 msgid "image height" -msgstr "画像の高さ" +msgstr "画像高さ" #: extras/models/models.py:623 msgid "image width" @@ -7307,16 +7304,16 @@ msgstr "画像幅" #: extras/models/models.py:640 msgid "image attachment" -msgstr "画像添付" +msgstr "添付画像" #: extras/models/models.py:641 msgid "image attachments" -msgstr "画像添付ファイル" +msgstr "添付画像" #: extras/models/models.py:655 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." -msgstr "このオブジェクトタイプにはイメージ添付ファイルを割り当てることができません ({type})。" +msgstr "このオブジェクトタイプ ({type})には添付画像を割り当てることができません。" #: extras/models/models.py:718 msgid "kind" @@ -7333,7 +7330,7 @@ msgstr "ジャーナルエントリ" #: extras/models/models.py:748 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." -msgstr "このオブジェクトタイプではジャーナリングはサポートされていません ({type})。" +msgstr "このオブジェクトタイプ({type})ではジャーナリングはサポートされていません 。" #: extras/models/models.py:790 msgid "bookmark" @@ -7346,7 +7343,7 @@ msgstr "ブックマーク" #: extras/models/models.py:804 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." -msgstr "このオブジェクトタイプにはブックマークを割り当てられません ({type})。" +msgstr "このオブジェクトタイプ ({type})にはブックマークを割り当てられません。" #: extras/models/reports.py:46 msgid "report module" @@ -7382,7 +7379,7 @@ msgstr "キャッシュ値" #: extras/models/search.py:59 msgid "cached values" -msgstr "キャッシュされた値" +msgstr "キャッシュ値" #: extras/models/staging.py:44 msgid "branch" @@ -7390,7 +7387,7 @@ msgstr "ブランチ" #: extras/models/staging.py:45 msgid "branches" -msgstr "枝" +msgstr "ブランチ" #: extras/models/staging.py:97 msgid "staged change" @@ -7398,15 +7395,15 @@ msgstr "段階的変更" #: extras/models/staging.py:98 msgid "staged changes" -msgstr "段階的な変更" +msgstr "段階的変更" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +msgid "The object type(s) to which this tag can be applied." msgstr "このタグを適用できるオブジェクトタイプ。" #: extras/models/tags.py:49 msgid "tag" -msgstr "鬼ごっこ" +msgstr "タグ" #: extras/models/tags.py:50 msgid "tags" @@ -7430,7 +7427,7 @@ msgstr "スクリプトデータ" #: extras/scripts.py:375 msgid "Script Execution Parameters" -msgstr "スクリプト実行パラメーター" +msgstr "スクリプト実行パラメータ" #: extras/signals.py:121 #, python-brace-format @@ -7441,7 +7438,7 @@ msgstr "削除は保護ルールによって禁止されています。 {message #: extras/tables/tables.py:143 extras/tables/tables.py:208 #: extras/tables/tables.py:285 msgid "Content Types" -msgstr "コンテンツタイプ" +msgstr "コンテントタイプ" #: extras/tables/tables.py:50 msgid "Visible" @@ -7457,7 +7454,7 @@ msgstr "チョイスセット" #: extras/tables/tables.py:68 msgid "Is Cloneable" -msgstr "クローニング可能" +msgstr "複製可能" #: extras/tables/tables.py:98 msgid "Count" @@ -7469,7 +7466,7 @@ msgstr "アルファベット順に並べる" #: extras/tables/tables.py:125 templates/extras/customlink.html:34 msgid "New Window" -msgstr "[新規ウィンドウ]" +msgstr "新規ウィンドウ" #: extras/tables/tables.py:146 msgid "As Attachment" @@ -7493,11 +7490,11 @@ msgstr "同期済み" #: extras/tables/tables.py:178 msgid "Content Type" -msgstr "コンテンツタイプ" +msgstr "コンテントタイプ" #: extras/tables/tables.py:185 msgid "Image" -msgstr "[イメージ]" +msgstr "画像" #: extras/tables/tables.py:190 msgid "Size (Bytes)" @@ -7537,12 +7534,12 @@ msgstr "コメント (ショート)" #: extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." -msgstr "この値が次の値と等しいことを確認してください %(limit_value)s。" +msgstr "%(limit_value)sと等しいことを確認する 。" #: extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." -msgstr "この値が等しくないことを確認してください %(limit_value)s。" +msgstr "%(limit_value)sと等しくないことを確認する。" #: extras/validators.py:37 msgid "This field must be empty." @@ -7555,7 +7552,7 @@ msgstr "このフィールドは空であってはなりません。" #: extras/validators.py:121 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" -msgstr "属性が無効です」{name}「用 {model}" +msgstr "{model}において{name}属性は無効です" #: extras/views.py:880 msgid "Your dashboard has been reset." @@ -7563,7 +7560,7 @@ msgstr "ダッシュボードがリセットされました。" #: ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." -msgstr "オプションのマスクを使用して有効な IPv4 または IPv6 アドレスを入力します。" +msgstr "有効な IPv4 または IPv6 アドレスを入力してください。(サブネットマスクが使用可能)" #: ipam/api/field_serializers.py:24 #, python-brace-format @@ -7594,7 +7591,7 @@ msgstr "DHCP" #: ipam/choices.py:73 msgid "SLAAC" -msgstr "スラーク" +msgstr "SLAAC" #: ipam/choices.py:89 msgid "Loopback" @@ -7668,7 +7665,7 @@ msgstr "プレフィックス" #: ipam/filtersets.py:136 ipam/filtersets.py:175 ipam/filtersets.py:198 msgid "RIR (ID)" -msgstr "リル (アイディー)" +msgstr "RIR (ID)" #: ipam/filtersets.py:142 ipam/filtersets.py:181 ipam/filtersets.py:204 msgid "RIR (slug)" @@ -7684,7 +7681,7 @@ msgstr "プレフィックス内およびプレフィックスを含む" #: ipam/filtersets.py:259 msgid "Prefixes which contain this prefix or IP" -msgstr "このプレフィックスまたは IP を含むプレフィックス" +msgstr "このプレフィックス / IP を含むプレフィックス" #: ipam/filtersets.py:270 ipam/filtersets.py:538 ipam/forms/bulk_edit.py:326 #: ipam/forms/filtersets.py:191 ipam/forms/filtersets.py:317 @@ -7700,14 +7697,14 @@ msgid "VLAN number (1-4094)" msgstr "VLAN 番号 (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" -msgstr "住所" +msgstr "アドレス" #: ipam/filtersets.py:445 msgid "Ranges which contain this prefix or IP" -msgstr "このプレフィックスまたは IP を含む範囲" +msgstr "このプレフィックス / IP を含む範囲" #: ipam/filtersets.py:473 ipam/filtersets.py:529 msgid "Parent prefix" @@ -7746,11 +7743,11 @@ msgstr "FHRP グループ (ID)" #: ipam/filtersets.py:618 msgid "Is assigned to an interface" -msgstr "インタフェースに割り当てられている" +msgstr "インタフェースに割り当てられているか" #: ipam/filtersets.py:622 msgid "Is assigned" -msgstr "割り当てられている" +msgstr "割当済みか" #: ipam/filtersets.py:1047 msgid "IP address (ID)" @@ -7817,7 +7814,7 @@ msgstr "非公開です" #: templates/ipam/aggregate.html:19 templates/ipam/asn.html:28 #: templates/ipam/asnrange.html:20 templates/ipam/rir.html:20 msgid "RIR" -msgstr "リル" +msgstr "RIR" #: ipam/forms/bulk_edit.py:168 msgid "Date added" @@ -7869,7 +7866,7 @@ msgid "Authentication key" msgstr "認証キー" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -7884,13 +7881,13 @@ msgstr "子 VLAN VID の最小値" #: ipam/forms/bulk_edit.py:420 msgid "Maximum child VLAN VID" -msgstr "子 VLAN VID の最大数" +msgstr "子 VLAN VID の最大値" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "スコープタイプ" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "スコープ" @@ -7899,8 +7896,8 @@ msgstr "スコープ" msgid "Site & Group" msgstr "サイトとグループ" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -7908,11 +7905,11 @@ msgstr "ポート" #: ipam/forms/bulk_import.py:47 msgid "Import route targets" -msgstr "ルートターゲットをインポート" +msgstr "インポートルートターゲット" #: ipam/forms/bulk_import.py:53 msgid "Export route targets" -msgstr "ルートターゲットをエクスポートする" +msgstr "エクスポートルートターゲット" #: ipam/forms/bulk_import.py:91 ipam/forms/bulk_import.py:111 #: ipam/forms/bulk_import.py:131 @@ -7940,7 +7937,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "割当インタフェースの親デバイス (存在する場合)" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8115,8 +8112,8 @@ msgstr "ポート" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8139,7 +8136,7 @@ msgstr "サイト/VLAN 割り当て" msgid "IP Range" msgstr "IP アドレス範囲" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "FHRP グループ" @@ -8152,7 +8149,7 @@ msgstr "これをデバイス/仮想マシンのプライマリIPにする" msgid "An IP address can only be assigned to a single object." msgstr "IP アドレスは 1 つのオブジェクトにのみ割り当てることができます。" -#: ipam/forms/model_forms.py:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8163,46 +8160,39 @@ msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "プライマリ IP として指定できるのは、インタフェースに割当 IP アドレスのみです。" -#: ipam/forms/model_forms.py:373 -#, python-brace-format -msgid "{ip} is a network ID, which may not be assigned to an interface." -msgstr "{ip} はネットワーク ID で、インタフェースに割り当てることはできません。" - -#: ipam/forms/model_forms.py:379 -#, python-brace-format -msgid "" -"{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "{ip} はブロードキャストアドレスで、インタフェースに割り当てることはできません。" - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "仮想 IP アドレス" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "アサインメントは既に存在します" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN グループ" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "子 VLAN" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "1 つ以上のポート番号をカンマで区切ったリスト。範囲はハイフンを使用して指定できます。" -#: ipam/forms/model_forms.py:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "サービステンプレート" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "サービステンプレート" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "サービステンプレートを使用しない場合は、名前、プロトコル、およびポートを指定する必要があります。" @@ -8362,12 +8352,12 @@ msgstr "プレフィックス" msgid "Cannot create prefix with /0 mask." msgstr "/0 マスクではプレフィックスを作成できません。" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "グローバルテーブル" @@ -8460,12 +8450,23 @@ msgstr "IP アドレス" msgid "Cannot create IP address with /0 mask." msgstr "/0 マスクで IP アドレスを作成することはできません。" -#: ipam/models/ip.py:856 +#: ipam/models/ip.py:850 +#, python-brace-format +msgid "{ip} is a network ID, which may not be assigned to an interface." +msgstr "{ip} はネットワーク ID で、インタフェースに割り当てることはできません。" + +#: ipam/models/ip.py:861 +#, python-brace-format +msgid "" +"{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "{ip} はブロードキャストアドレスで、インタフェースに割り当てることはできません。" + +#: ipam/models/ip.py:875 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "重複した IP アドレスが見つかりました {table}: {ipaddress}" -#: ipam/models/ip.py:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "SLAAC ステータスを割り当てることができるのは IPv6 アドレスのみです" @@ -9224,7 +9225,7 @@ msgstr "[仮想マシン]" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "仮想ディスク" @@ -10140,8 +10141,8 @@ msgstr "スケジューリング" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "ごと %(interval)s 秒" +msgid "every %(interval)s minutes" +msgstr "ごと %(interval)s 分" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -12651,65 +12652,65 @@ msgstr "このオブジェクトタイプでは制約はサポートされてい msgid "Invalid filter for {model}: {error}" msgstr "のフィルタが無効です {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "ユーザ" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "ユーザ" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "このユーザ名のユーザはすでに存在します。" -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "グループ" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "グループ" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "ユーザプリファレンス" -#: users/models.py:174 +#: users/models.py:175 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "キー '{path}'はリーフノードです。新しいキーを割り当てることはできません" -#: users/models.py:186 +#: users/models.py:187 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "キー '{path}'はディクショナリです。ディクショナリ以外の値は割り当てられません" -#: users/models.py:252 +#: users/models.py:253 msgid "expires" msgstr "期限切れ" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "最終使用日" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "キー" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "書き込み有効" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "このキーを使用して作成/更新/削除操作を許可する" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "許可された IP" -#: users/models.py:283 +#: users/models.py:284 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\"" @@ -12718,32 +12719,32 @@ msgstr "" "ネットワーク。制限がない場合は空白のままにしてください。例:10.1.1.0/24、192.168.10.16/32、2001: DB 8:1:: " "/64\"" -#: users/models.py:291 +#: users/models.py:296 msgid "token" msgstr "トークン" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "トークン" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "この権限によって付与されたアクションのリスト" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "制約" -#: users/models.py:379 +#: users/models.py:384 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "選択したタイプの該当するオブジェクトに一致するクエリーセットフィルタ" -#: users/models.py:386 +#: users/models.py:391 msgid "permission" msgstr "許可" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "許可" @@ -13000,43 +13001,50 @@ msgid "" "the object's change log for details." msgstr "このオブジェクトは、フォームがレンダリングされてから変更されました。詳細については、オブジェクトの変更ログを参照してください。" -#: utilities/forms/utils.py:42 utilities/forms/utils.py:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "レンジ」{value}「は無効です。" -#: utilities/forms/utils.py:225 +#: 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 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "「」の列ヘッダーが重複しているか、重複しています{field}」" -#: utilities/forms/utils.py:231 +#: utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "「」の列ヘッダーが重複しているか、重複しています{header}」" -#: utilities/forms/utils.py:240 +#: 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:263 +#: utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "予期しない列ヘッダー」{field}「が見つかりました。" -#: utilities/forms/utils.py:265 +#: 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:269 +#: 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:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "必須の列ヘッダー」{header}「が見つかりません。" @@ -13648,6 +13656,11 @@ msgstr "提案" msgid "Assigned Object Type" msgstr "割当オブジェクトタイプ" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "トンネルインターフェイス" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "1 回目の解約" diff --git a/netbox/translations/pt/LC_MESSAGES/django.mo b/netbox/translations/pt/LC_MESSAGES/django.mo index 04bb56897..ad8ae9463 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 6ee21865d..5e6b470e5 100644 --- a/netbox/translations/pt/LC_MESSAGES/django.po +++ b/netbox/translations/pt/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Portuguese (https://app.transifex.com/netbox-community/teams/178115/pt/)\n" @@ -64,8 +64,8 @@ msgid "Your preferences have been updated." msgstr "Suas preferências foram atualizadas." #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "Planejado" @@ -75,8 +75,8 @@ msgid "Provisioning" msgstr "Provisionamento" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -85,7 +85,7 @@ msgid "Active" msgstr "Ativo" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "Off-line" @@ -98,7 +98,7 @@ msgstr "Desprovisionamento" msgid "Decommissioned" msgstr "Desativado" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -107,7 +107,7 @@ msgstr "Desativado" msgid "Region (ID)" msgstr "Região (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -117,7 +117,7 @@ msgstr "Região (ID)" msgid "Region (slug)" msgstr "Região (slug)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -125,7 +125,7 @@ msgstr "Região (slug)" msgid "Site group (ID)" msgstr "Grupo de sites (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -135,7 +135,7 @@ msgid "Site group (slug)" msgstr "Grupo de sites (slug)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -158,8 +158,8 @@ msgstr "Grupo de sites (slug)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -181,13 +181,13 @@ msgstr "Grupo de sites (slug)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -199,33 +199,39 @@ msgstr "Site (slug)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "Provedor (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "Provedor (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "Provedor (slug)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "Conta do provedor (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "Rede do provedor (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "Tipo de circuito (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "Tipo de circuito (slug)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -235,13 +241,13 @@ msgstr "Tipo de circuito (slug)" msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -251,7 +257,7 @@ msgstr "Site (ID)" msgid "Search" msgstr "Busca" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -259,11 +265,11 @@ msgstr "Busca" msgid "Circuit" msgstr "Circuito" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "Rede do provedor (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -374,8 +380,8 @@ msgstr "Descrição" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -387,18 +393,18 @@ msgstr "Descrição" msgid "Provider" msgstr "Provedor" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "ID do serviço" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -410,7 +416,7 @@ msgid "Color" msgstr "Cor" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -429,7 +435,7 @@ msgstr "Cor" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -454,12 +460,12 @@ msgid "Type" msgstr "Tipo" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "Conta do provedor" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -473,8 +479,8 @@ msgstr "Conta do provedor" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -482,7 +488,7 @@ msgstr "Conta do provedor" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -503,7 +509,7 @@ msgstr "Conta do provedor" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -514,7 +520,7 @@ msgid "Status" msgstr "Status" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -572,15 +578,15 @@ msgstr "Status" msgid "Tenant" msgstr "Inquilino" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "Data de instalação" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "Data de rescisão" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "Taxa de confirmação (Kbps)" @@ -613,7 +619,7 @@ msgstr "Provedor atribuído" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "Cor RGB em hexadecimal. Exemplo:" @@ -649,12 +655,12 @@ msgstr "Status operacional" msgid "Assigned tenant" msgstr "Inquilino designado" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "Rede de provedores" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -678,7 +684,7 @@ msgstr "Rede de provedores" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -688,13 +694,7 @@ msgstr "Rede de provedores" msgid "Location" msgstr "Localização" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -707,7 +707,7 @@ msgstr "ASN" msgid "Contacts" msgstr "Contatos" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -722,7 +722,7 @@ msgstr "Contatos" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -732,7 +732,7 @@ msgstr "Contatos" msgid "Region" msgstr "Região" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -742,19 +742,15 @@ msgstr "Região" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "Grupo de sites" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (legado)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -780,7 +776,7 @@ msgstr "ASN (legado)" msgid "Attributes" msgstr "Atributos" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -801,7 +797,7 @@ msgstr "Tipo de circuito" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "cor" @@ -823,8 +819,8 @@ msgid "Unique circuit ID" msgstr "ID de circuito exclusivo" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -903,7 +899,7 @@ msgstr "ID do painel de patch e número (s) de porta" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "descrição" @@ -933,8 +929,8 @@ msgstr "" #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -947,7 +943,7 @@ msgstr "" #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1005,13 +1001,13 @@ msgstr "redes de provedores" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1077,9 +1073,9 @@ msgstr "redes de provedores" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1114,7 +1110,7 @@ msgstr "Taxa de comprometimento" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1126,7 +1122,7 @@ msgstr "Taxa de comprometimento" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1163,7 +1159,7 @@ msgid "Completed" msgstr "Concluído" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "Falhou" @@ -1245,7 +1241,7 @@ msgstr "Fonte de dados (nome)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1384,7 +1380,7 @@ msgstr "" msgid "Rack Elevations" msgstr "Elevações da cremalheira" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1445,7 +1441,7 @@ msgstr " (padrão)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "criada" @@ -1503,7 +1499,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "permitido" @@ -1720,7 +1716,7 @@ msgid "Staging" msgstr "Encenação" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "Descomissionamento" @@ -1780,7 +1776,7 @@ msgstr "Obsoleto" msgid "Millimeters" msgstr "Milímetros" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "Polegadas" @@ -1792,8 +1788,8 @@ msgstr "Polegadas" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1806,7 +1802,7 @@ msgstr "Polegadas" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "Pai" @@ -1855,7 +1851,7 @@ msgstr "Da direita para a esquerda" msgid "Side to rear" msgstr "De lado para trás" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "Passivo" @@ -1883,8 +1879,8 @@ msgstr "Internacional/ITA" msgid "Proprietary" msgstr "Proprietário" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "Outros" @@ -1897,177 +1893,177 @@ msgstr "ITA/Internacional" msgid "Physical" msgstr "Físico" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "Virtual" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "Sem fio" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "Interfaces virtuais" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "Ponte" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "Grupo de agregação de links (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "Ethernet (fixa)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "Ethernet (modular)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "Ethernet (painel traseiro)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "Celular" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "Serial" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "Coaxial" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "Empilhamento" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "Metade" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "Completo" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "Automático" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "Acesso" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Marcado" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "Marcado (Todos)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "Padrão IEEE" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "24V passivo (2 pares)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "24V passivo (4 pares)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "48V passivo (2 pares)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "48V passivo (4 pares)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "Cobre" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "Fibra óptica" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "Fibra" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "Conectado" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "Quilômetros" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "Metros" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "Centímetros" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "Miles" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "Pés" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "Quilogramas" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "Gramas" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "Libras" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "Onças" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "Primário" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "Redundante" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "Fase única" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "Trifásico" @@ -2344,7 +2340,7 @@ msgid "Virtual Chassis (ID)" msgstr "Chassi virtual (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2368,7 +2364,7 @@ msgstr "VID atribuído" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2376,8 +2372,8 @@ msgstr "VID atribuído" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2390,7 +2386,7 @@ msgstr "VID atribuído" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2404,7 +2400,7 @@ msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2475,7 +2471,7 @@ msgstr "Etiquetas" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2494,7 +2490,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2544,8 +2540,8 @@ msgstr "Fuso horário" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2554,7 +2550,7 @@ msgstr "Fuso horário" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2572,7 +2568,7 @@ msgstr "Fuso horário" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2666,7 +2662,7 @@ msgstr "Unidade de peso" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2699,7 +2695,7 @@ msgstr "Hardware" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2746,7 +2742,7 @@ msgstr "Tipo de dispositivo" msgid "Module Type" msgstr "Tipo de módulo" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "Função da VM" @@ -2778,13 +2774,15 @@ msgstr "Função do dispositivo" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "Plataforma" @@ -2808,16 +2806,16 @@ msgstr "Plataforma" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2839,7 +2837,7 @@ msgstr "Plataforma" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2979,7 +2977,7 @@ msgid "Wireless role" msgstr "Função sem fio" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2988,7 +2986,7 @@ msgstr "Função sem fio" msgid "Module" msgstr "Módulo" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "DEFASAGEM" @@ -3000,7 +2998,7 @@ msgstr "Contextos de dispositivos virtuais" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3025,13 +3023,13 @@ msgid "VLAN group" msgstr "Grupo de VLAN" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "VLAN sem etiqueta" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "VLANs marcadas" @@ -3041,7 +3039,7 @@ msgid "Wireless LAN group" msgstr "Grupo de LAN sem fio" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "LANs sem fio" @@ -3212,9 +3210,9 @@ msgid "Virtual chassis" msgstr "Chassi virtual" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3226,7 +3224,7 @@ msgstr "Chassi virtual" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "Cluster" @@ -3407,7 +3405,7 @@ msgstr "Porta traseira correspondente" msgid "Physical medium classification" msgstr "Classificação física do meio" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "Dispositivo instalado" @@ -3495,7 +3493,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminação lateral não encontrada: {device} {name}" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "Dominar" @@ -3621,7 +3619,7 @@ msgstr "Ocupado" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3635,7 +3633,7 @@ msgid "Virtual Device Context" msgstr "Contexto do dispositivo virtual" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3667,7 +3665,7 @@ msgid "Transmit power (dBm)" msgstr "Potência de transmissão (dBm)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3675,7 +3673,7 @@ msgstr "Potência de transmissão (dBm)" msgid "Cable" msgstr "Cabo" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "Descoberto" @@ -3722,7 +3720,7 @@ msgstr "Chassi" msgid "Device Role" msgstr "Função do dispositivo" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "A unidade de menor número ocupada pelo dispositivo" @@ -3774,9 +3772,7 @@ msgstr "Interface LAG" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "Interface" @@ -3853,7 +3849,7 @@ msgstr "" " esperados." #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "Portas traseiras" @@ -3892,7 +3888,7 @@ msgstr "" "corresponder ao número selecionado de posições da porta traseira " "({rearport_count})." -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4630,13 +4626,13 @@ msgstr "função do item de inventário" msgid "inventory item roles" msgstr "funções do item de inventário" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "número de série" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "etiqueta de ativo" @@ -4686,7 +4682,7 @@ msgstr "fabricante" msgid "manufacturers" msgstr "fabricantes" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "modelo" @@ -4694,11 +4690,11 @@ msgstr "modelo" msgid "default platform" msgstr "plataforma padrão" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "número da peça" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Número de peça discreto (opcional)" @@ -4736,7 +4732,7 @@ msgstr "" " dispositivos. Deixe em branco se esse tipo de dispositivo não for pai nem " "filho." -#: dcim/models/devices.py:128 dcim/models/devices.py:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "fluxo de ar" @@ -4748,11 +4744,11 @@ msgstr "tipo de dispositivo" msgid "device types" msgstr "tipos de dispositivos" -#: dcim/models/devices.py:289 +#: 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,5 unidades de rack." -#: dcim/models/devices.py:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -4761,7 +4757,7 @@ msgstr "" "Dispositivo {device} na prateleira {rack} não tem espaço suficiente para " "acomodar uma altura de {height}U" -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4771,7 +4767,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instâncias já montado dentro de " "racks." -#: dcim/models/devices.py:330 +#: dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -4780,151 +4776,151 @@ msgstr "" "associados a esse dispositivo antes de desclassificá-lo como dispositivo " "principal." -#: dcim/models/devices.py:336 +#: dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Os tipos de dispositivos infantis devem ser 0U." -#: dcim/models/devices.py:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "tipo de módulo" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "tipos de módulo" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "Máquinas virtuais podem ser atribuídas a essa função" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "função do dispositivo" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "funções do dispositivo" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Opcionalmente, limite essa plataforma a dispositivos de um determinado " "fabricante" -#: dcim/models/devices.py:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "plataforma" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "plataformas" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "A função que este dispositivo serve" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Número de série do chassi, atribuído pelo fabricante" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "Uma tag exclusiva usada para identificar esse dispositivo" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "posição (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "face de cremalheira" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "IPv4 primário" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "IPv6 primário" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "IP fora de banda" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "Posição VC" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "Posição do chassi virtual" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "Prioridade VC" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "Prioridade de eleição do mestre do chassi virtual" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "latitude" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 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:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "longitude" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "O nome do dispositivo deve ser exclusivo por site." -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "dispositivo" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "dispositivos" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, 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:843 +#: dcim/models/devices.py:845 #, 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:849 +#: dcim/models/devices.py:851 #, 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:856 +#: dcim/models/devices.py:858 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:860 +#: dcim/models/devices.py:862 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:866 +#: dcim/models/devices.py:868 msgid "Position must be in increments of 0.5 rack units." msgstr "A posição deve estar em incrementos de 0,5 unidades de rack." -#: dcim/models/devices.py:870 +#: dcim/models/devices.py:872 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:878 +#: dcim/models/devices.py:880 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -4932,7 +4928,7 @@ msgstr "" "Um tipo de dispositivo 0U ({device_type}) não pode ser atribuído a uma " "posição de rack." -#: dcim/models/devices.py:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -4940,7 +4936,7 @@ msgstr "" "Os tipos de dispositivos secundários não podem ser atribuídos a uma face de " "rack. Esse é um atributo do dispositivo principal." -#: dcim/models/devices.py:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -4948,7 +4944,7 @@ msgstr "" "Os tipos de dispositivos infantis não podem ser atribuídos a uma posição de " "rack. Esse é um atributo do dispositivo principal." -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4957,23 +4953,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:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} não é um endereço IPv4." -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, 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á atribuído a este dispositivo." -#: dcim/models/devices.py:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} não é um endereço IPv6." -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4983,25 +4979,25 @@ msgstr "" "dispositivo, mas o tipo desse dispositivo pertence a " "{devicetype_manufacturer}." -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "O cluster atribuído pertence a um site diferente ({site})" -#: dcim/models/devices.py:986 +#: dcim/models/devices.py:988 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Um dispositivo atribuído a um chassi virtual deve ter sua posição definida." -#: dcim/models/devices.py:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "módulo" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "módulos" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5010,22 +5006,22 @@ msgstr "" "O módulo deve ser instalado dentro de um compartimento de módulo pertencente" " ao dispositivo atribuído ({device})." -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "dominar" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "chassi virtual" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "O mestre selecionado ({master}) não está atribuído a esse chassi virtual." -#: dcim/models/devices.py:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5034,33 +5030,33 @@ msgstr "" "Não é possível excluir o chassi virtual {self}. Existem interfaces de " "membros que formam interfaces LAG entre chassis." -#: dcim/models/devices.py:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificador" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "Identificador numérico exclusivo para o dispositivo principal" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "comentários" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "contexto de dispositivo virtual" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "contextos de dispositivos virtuais" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} não é um IPv{family} endereço." -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "O endereço IP principal deve pertencer a uma interface no dispositivo " @@ -5447,7 +5443,7 @@ msgstr "Porta de console" msgid "Reachable" msgstr "Acessível" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5466,7 +5462,7 @@ msgstr "Dispositivos" msgid "VMs" msgstr "VMs" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5475,62 +5471,62 @@ msgstr "VMs" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "Modelo de configuração" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "Endereço IP" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "Endereço IPv4" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "Endereço IPv6" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "Posição VC" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "Prioridade VC" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principal" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "Posição (compartimento do dispositivo)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "Portas de console" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "Portas do servidor de console" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "Portas de alimentação" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "Tomadas elétricas" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5540,53 +5536,53 @@ msgstr "Tomadas elétricas" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "Portas frontais" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "Compartimentos para dispositivos" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "Compartimentos de módulos" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "Itens de inventário" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Compartimento do módulo" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "Cor do cabo" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "Vincular pares" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "Marcar Conectado" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "Consumo máximo (W)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "Sorteio alocado (W)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5595,12 +5591,12 @@ msgstr "Sorteio alocado (W)" msgid "IP Addresses" msgstr "Endereços IP" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "Grupos FHRP" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5609,20 +5605,20 @@ msgstr "Grupos FHRP" msgid "Tunnel" msgstr "Túnel" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "Somente gerenciamento" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "Link sem fio" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "VDCs" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5631,7 +5627,7 @@ msgstr "VDCs" msgid "Inventory Items" msgstr "Itens de inventário" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5640,28 +5636,28 @@ msgstr "Itens de inventário" msgid "Rear Port" msgstr "Porta traseira" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "Módulo instalado" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "Módulo serial" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "Etiqueta de ativo do módulo" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "Status do módulo" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "Parte" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "Itens" @@ -6229,7 +6225,7 @@ msgid "Cluster type (slug)" msgstr "Tipo de cluster (slug)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "Grupo de clusters" @@ -6360,8 +6356,8 @@ msgid "Is active" msgstr "Está ativo" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6370,8 +6366,8 @@ msgid "Content types" msgstr "Tipos de conteúdo" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Um ou mais tipos de objetos atribuídos" @@ -6418,29 +6414,39 @@ msgstr "" "opcionais separados por dois pontos: “Choice1:First Choice, Choice2:Second " "Choice”" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "classe de botão" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +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:188 msgid "Action object" msgstr "Objeto de ação" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 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:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} não encontrado" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "Roteiro {name} não encontrado" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "Tipo de objeto atribuído" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "A classificação da entrada" @@ -7397,16 +7403,6 @@ msgstr "Código de modelo Jinja2 para URL do link" 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:353 -msgid "button class" -msgstr "classe de botão" - -#: extras/models/models.py:357 -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/models/models.py:360 msgid "new window" msgstr "nova janela" @@ -7598,7 +7594,7 @@ msgid "staged changes" msgstr "mudanças encenadas" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +msgid "The object type(s) to which this tag can be applied." msgstr "O (s) tipo (s) de objeto aos quais essa tag pode ser aplicada." #: extras/models/tags.py:49 @@ -7899,7 +7895,7 @@ msgid "VLAN number (1-4094)" msgstr "Número da VLAN (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "Endereço" @@ -8068,7 +8064,7 @@ msgid "Authentication key" msgstr "Chave de autenticação" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -8085,11 +8081,11 @@ msgstr "VLAN infantil mínima VID" msgid "Maximum child VLAN VID" msgstr "VLAN infantil máximo VID" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "Tipo de escopo" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "Escopo" @@ -8098,8 +8094,8 @@ msgstr "Escopo" msgid "Site & Group" msgstr "Site e grupo" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -8139,7 +8135,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo principal da interface atribuída (se houver)" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8317,8 +8313,8 @@ msgstr "Porto" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8341,7 +8337,7 @@ msgstr "Atribuição de site/VLAN" msgid "IP Range" msgstr "Intervalo de IP" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "Grupo FHRP" @@ -8354,7 +8350,7 @@ msgstr "Torne esse o IP primário do dispositivo/VM" 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:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8369,34 +8365,25 @@ msgstr "" "Somente endereços IP atribuídos a uma interface podem ser designados como " "IPs primários." -#: ipam/forms/model_forms.py:373 -#, python-brace-format -msgid "{ip} is a network ID, which may not be assigned to an interface." -msgstr "{ip} é uma ID de rede, que não pode ser atribuída a uma interface." - -#: ipam/forms/model_forms.py:379 -#, python-brace-format -msgid "" -"{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "" -"{ip} é um endereço de transmissão, que não pode ser atribuído a uma " -"interface." - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "Endereço IP virtual" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "A atribuição já existe" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupo VLAN" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "VLANs secundários" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -8404,15 +8391,15 @@ msgstr "" "Lista separada por vírgula de um ou mais números de porta. Um intervalo pode" " ser especificado usando um hífen." -#: ipam/forms/model_forms.py:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modelo de serviço" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "Modelo de serviço" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8579,12 +8566,12 @@ msgstr "prefixos" msgid "Cannot create prefix with /0 mask." msgstr "Não é possível criar prefixo com a máscara /0." -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "tabela global" @@ -8680,12 +8667,25 @@ msgstr "Endereços IP" 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:856 +#: ipam/models/ip.py:850 +#, python-brace-format +msgid "{ip} is a network ID, which may not be assigned to an interface." +msgstr "{ip} é uma ID de rede, que não pode ser atribuída a uma interface." + +#: ipam/models/ip.py:861 +#, python-brace-format +msgid "" +"{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "" +"{ip} é um endereço de transmissão, que não pode ser atribuído a uma " +"interface." + +#: ipam/models/ip.py:875 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Endereço IP duplicado encontrado em {table}: {ipaddress}" -#: ipam/models/ip.py:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Somente endereços IPv6 podem receber o status SLAAC" @@ -9468,7 +9468,7 @@ msgstr "Máquinas virtuais" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "Discos virtuais" @@ -10393,8 +10393,8 @@ msgstr "Agendamento" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "cada %(interval)s segundos" +msgid "every %(interval)s minutes" +msgstr "cada %(interval)s ata" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -12948,67 +12948,67 @@ msgstr "As restrições não são suportadas para esse tipo de objeto." msgid "Invalid filter for {model}: {error}" msgstr "Filtro inválido para {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "usuária" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "usuários" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "Já existe um usuário com esse nome de usuário." -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "grupo" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "grupos" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "preferências do usuário" -#: users/models.py:174 +#: users/models.py:175 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Chave '{path}'é um nó de folha; não é possível atribuir novas chaves" -#: users/models.py:186 +#: users/models.py:187 #, 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.py:252 +#: users/models.py:253 msgid "expires" msgstr "expira" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "usado pela última vez" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "chave" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "gravação habilitada" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "Permitir operações de criação/atualização/exclusão usando essa chave" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "IPs permitidos" -#: users/models.py:283 +#: users/models.py:284 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\"" @@ -13016,34 +13016,34 @@ msgstr "" "Redes IPv4/IPv6 permitidas de onde o token pode ser usado. Deixe em branco " "sem restrições. Ex: “10.1.1.0/24, 192.168.10.16/32, 2001:DB 8:1: :/64\"" -#: users/models.py:291 +#: users/models.py:296 msgid "token" msgstr "ficha" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "tokens" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "A lista de ações concedidas por essa permissão" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "restrições" -#: users/models.py:379 +#: users/models.py:384 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtro do conjunto de consultas que corresponde aos objetos aplicáveis do " "(s) tipo (s) selecionado (s)" -#: users/models.py:386 +#: users/models.py:391 msgid "permission" msgstr "permissão" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "permissões" @@ -13317,46 +13317,55 @@ msgstr "" "Esse objeto foi modificado desde que o formulário foi renderizado. Consulte " "o registro de alterações do objeto para obter detalhes." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Alcance”{value}“é inválido." -#: utilities/forms/utils.py:225 +#: utilities/forms/utils.py:74 +#, python-brace-format +msgid "" +"Invalid range: Ending value ({end}) must be greater than beginning value " +"({begin})." +msgstr "" +"Intervalo inválido: valor final ({end}) deve ser maior que o valor inicial " +"({begin})." + +#: utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Cabeçalho de coluna duplicado ou conflitante para”{field}“" -#: utilities/forms/utils.py:231 +#: utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Cabeçalho de coluna duplicado ou conflitante para”{header}“" -#: utilities/forms/utils.py:240 +#: utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Linha {row}: Esperado {count_expected} colunas, mas encontradas " "{count_found}" -#: utilities/forms/utils.py:263 +#: 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:265 +#: 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:269 +#: 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:277 +#: 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." @@ -13994,6 +14003,11 @@ msgstr "Proposta" msgid "Assigned Object Type" msgstr "Tipo de objeto atribuído" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "Interface de túnel" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "Primeira rescisão" diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index fd43bbda3..cf0d2757c 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 268a9fe36..14fe6c0b3 100644 --- a/netbox/translations/ru/LC_MESSAGES/django.po +++ b/netbox/translations/ru/LC_MESSAGES/django.po @@ -5,9 +5,12 @@ # # Translators: # Vladyslav V. Prodan, 2024 -# Nikita Vokhmintsev, 2024 -# Artem Kotik, 2024 +# Madi Tuleu, 2024 # Stavr Ognev, 2024 +# nvoff, 2024 +# Михаил Башкиров, 2024 +# Сергей Стрельцов, 2024 +# Artem Kotik, 2024 # Jeremy Stretch, 2024 # #, fuzzy @@ -15,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Russian (https://app.transifex.com/netbox-community/teams/178115/ru/)\n" @@ -54,7 +57,7 @@ msgstr "Истекает" #: account/tables.py:40 users/forms/filtersets.py:142 msgid "Last Used" -msgstr "Последний раз использовался" +msgstr "Последнее использование" #: account/tables.py:43 templates/account/token.html:56 #: templates/users/token.html:48 users/forms/bulk_edit.py:102 @@ -67,19 +70,19 @@ msgid "Your preferences have been updated." msgstr "Ваши настройки были обновлены." #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "Запланировано" #: circuits/choices.py:22 netbox/navigation/menu.py:290 msgid "Provisioning" -msgstr "Выделение ресурсов" +msgstr "Ввод в эксплутацию" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -88,20 +91,20 @@ msgid "Active" msgstr "Активный" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "Оффлайн" #: circuits/choices.py:25 msgid "Deprovisioning" -msgstr "Выделение резервов" +msgstr "Вывод из эксплуатации" #: circuits/choices.py:26 msgid "Decommissioned" msgstr "Списан" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -110,7 +113,7 @@ msgstr "Списан" msgid "Region (ID)" msgstr "Регион (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -120,7 +123,7 @@ msgstr "Регион (ID)" msgid "Region (slug)" msgstr "Регион (подстрока)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -128,7 +131,7 @@ msgstr "Регион (подстрока)" msgid "Site group (ID)" msgstr "Группа сайтов (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -138,7 +141,7 @@ msgid "Site group (slug)" msgstr "Группа сайтов (подстрока)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -161,8 +164,8 @@ msgstr "Группа сайтов (подстрока)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -184,13 +187,13 @@ msgstr "Группа сайтов (подстрока)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "Сайт" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -202,33 +205,39 @@ msgstr "Сайт (подстрока)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "Провайдер (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "Провайдер (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "Провайдер (подстрока)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "Аккаунт провайдера (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "Сеть провайдера (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "Тип канала связи (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "Тип канала связи (подстрока)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -238,13 +247,13 @@ msgstr "Тип канала связи (подстрока)" msgid "Site (ID)" msgstr "Сайт (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -254,7 +263,7 @@ msgstr "Сайт (ID)" msgid "Search" msgstr "Поиск" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -262,11 +271,11 @@ msgstr "Поиск" msgid "Circuit" msgstr "Канал связи" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "Сеть провайдера (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -377,8 +386,8 @@ msgstr "Описание" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -390,18 +399,18 @@ msgstr "Описание" msgid "Provider" msgstr "Провайдер" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "Идентификатор Службы" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -413,7 +422,7 @@ msgid "Color" msgstr "Цвет" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -432,7 +441,7 @@ msgstr "Цвет" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -457,12 +466,12 @@ msgid "Type" msgstr "Тип" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "Аккаунт провайдера" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -476,8 +485,8 @@ msgstr "Аккаунт провайдера" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -485,7 +494,7 @@ msgstr "Аккаунт провайдера" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -506,7 +515,7 @@ msgstr "Аккаунт провайдера" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -517,7 +526,7 @@ msgid "Status" msgstr "Статус" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -575,15 +584,15 @@ msgstr "Статус" msgid "Tenant" msgstr "Тенант" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "Дата установки" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "Дата отключения" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "Гарантированная скорость (Кбит/с)" @@ -616,7 +625,7 @@ msgstr "Назначенный провайдер" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "Цвет RGB в шестнадцатеричном формате. Пример:" @@ -652,12 +661,12 @@ msgstr "Операционный статус" msgid "Assigned tenant" msgstr "Назначенный тенант" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "Сеть провайдера" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -681,7 +690,7 @@ msgstr "Сеть провайдера" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -691,13 +700,7 @@ msgstr "Сеть провайдера" msgid "Location" msgstr "Локация" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -710,7 +713,7 @@ msgstr "ASN" msgid "Contacts" msgstr "Контакты" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -725,7 +728,7 @@ msgstr "Контакты" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -735,7 +738,7 @@ msgstr "Контакты" msgid "Region" msgstr "Регион" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -745,19 +748,15 @@ msgstr "Регион" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "Группа сайтов" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (устаревшая версия)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -783,7 +782,7 @@ msgstr "ASN (устаревшая версия)" msgid "Attributes" msgstr "Атрибуты" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -804,7 +803,7 @@ msgstr "Тип канала связи" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "цвет" @@ -819,15 +818,15 @@ msgstr "типы каналов связи" #: circuits/models/circuits.py:46 msgid "circuit ID" -msgstr "идентификатор канала связи" +msgstr "Идентификатор канала связи" #: circuits/models/circuits.py:47 msgid "Unique circuit ID" -msgstr "Уникальный идентификатор канала связи" +msgstr "Уникальный ID канала связи" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -843,7 +842,7 @@ msgstr "установлен" #: circuits/models/circuits.py:87 msgid "terminates" -msgstr "завершен" +msgstr "разобран" #: circuits/models/circuits.py:92 msgid "commit rate (Kbps)" @@ -883,11 +882,11 @@ msgstr "Скорость отдачи, если она отличается от #: circuits/models/circuits.py:200 msgid "cross-connect ID" -msgstr "идентификатор кросс-соединения" +msgstr "ID кросс-соединения" #: circuits/models/circuits.py:201 msgid "ID of the local cross-connect" -msgstr "Идентификатор локального кросс-соединения" +msgstr "ID локального кросс-соединения" #: circuits/models/circuits.py:206 msgid "patch panel/port(s)" @@ -895,7 +894,7 @@ msgstr "патч-панель или порт(ы)" #: circuits/models/circuits.py:207 msgid "Patch panel ID and port number(s)" -msgstr "Идентификатор патч-панели и номера портов" +msgstr "ID патч-панели и номера порта(-ов)" #: circuits/models/circuits.py:210 #: dcim/models/device_component_templates.py:61 @@ -906,7 +905,7 @@ msgstr "Идентификатор патч-панели и номера пор #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "описание" @@ -923,8 +922,8 @@ msgstr "точки подключения канала связи" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"Терминатор канала должен быть подключен либо к сайту, либо к сети " -"поставщика." +"Оконечное устройство канала должно быть подключено либо к узлу, либо к сети " +"провайдера." #: circuits/models/circuits.py:239 msgid "" @@ -936,8 +935,8 @@ msgstr "" #: circuits/models/providers.py:22 circuits/models/providers.py:66 #: circuits/models/providers.py:104 core/models/data.py:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -950,7 +949,7 @@ msgstr "" #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1008,13 +1007,13 @@ msgstr "сети провайдера" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1080,9 +1079,9 @@ msgstr "сети провайдера" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1117,7 +1116,7 @@ msgstr "Гарантированная скорость" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1129,7 +1128,7 @@ msgstr "Гарантированная скорость" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1166,7 +1165,7 @@ msgid "Completed" msgstr "Завершено" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "Неисправно" @@ -1212,7 +1211,7 @@ msgstr "Имя пользователя" #: core/data_backends.py:49 core/data_backends.py:55 msgid "Only used for cloning with HTTP(S)" -msgstr "Используется только для клонирования с помощью HTTP (S)" +msgstr "Используется только для клонирования по HTTP (S)" #: core/data_backends.py:53 templates/account/base.html:17 #: templates/account/password.html:11 users/forms/model_forms.py:172 @@ -1230,7 +1229,7 @@ msgstr "Не удалось получить удаленные данные ({n #: core/data_backends.py:118 msgid "AWS access key ID" -msgstr "Идентификатор ключа доступа AWS" +msgstr "ID ключа доступа AWS" #: core/data_backends.py:122 msgid "AWS secret access key" @@ -1248,7 +1247,7 @@ msgstr "Источник данных (имя)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1364,7 +1363,7 @@ msgstr "Источник" #: core/forms/model_forms.py:56 msgid "Backend Parameters" -msgstr "Параметры бэкенда" +msgstr "Параметры backend" #: core/forms/model_forms.py:94 msgid "File Upload" @@ -1384,7 +1383,7 @@ msgstr "Необходимо загрузить файл или выбрать msgid "Rack Elevations" msgstr "Фасады стоек" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1445,7 +1444,7 @@ msgstr " (по умолчанию)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "создан(а)" @@ -1503,7 +1502,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "включен" @@ -1536,7 +1535,7 @@ msgstr "источники данных" #: core/models/data.py:125 #, python-brace-format msgid "Unknown backend type: {type}" -msgstr "Неизвестный тип бэкэнда: {type}" +msgstr "Неизвестный тип backend: {type}" #: core/models/data.py:180 msgid "Cannot initiate sync; syncing already in progress." @@ -1589,7 +1588,7 @@ msgstr "файлы данных" #: core/models/data.py:416 msgid "auto sync record" -msgstr "запись автоматической синхронизации" +msgstr "автоматическая синхронизация записи" #: core/models/data.py:417 msgid "auto sync records" @@ -1609,11 +1608,11 @@ msgstr "Путь к файлу относительно указанного к #: core/models/files.py:61 msgid "managed file" -msgstr "управляемый файл" +msgstr "Настраиваемый файл" #: core/models/files.py:62 msgid "managed files" -msgstr "управляемые файлы" +msgstr "Настраиваемые файлы" #: core/models/jobs.py:54 msgid "scheduled" @@ -1646,26 +1645,26 @@ msgstr "ошибка" #: core/models/jobs.py:101 msgid "job ID" -msgstr "идентификатор задания" +msgstr "идентификатор задачи" #: core/models/jobs.py:112 msgid "job" -msgstr "задание" +msgstr "задача" #: core/models/jobs.py:113 msgid "jobs" -msgstr " задания" +msgstr " задачи" #: core/models/jobs.py:135 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." -msgstr "Задания нельзя присвоить этому типу объектов ({type})." +msgstr "Нельзя присвоить задачи этому типу объектов ({type})." #: core/models/jobs.py:185 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" -"Неверный статус для увольнения с работы. Возможны следующие варианты: " +"Неверный статус для завершения задачи. Возможны следующие варианты: " "{choices}" #: core/tables/config.py:21 users/forms/filtersets.py:45 users/tables.py:39 @@ -1720,7 +1719,7 @@ msgid "Staging" msgstr "Подготовка к развертыванию" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "Вывод из эксплуатации" @@ -1774,13 +1773,13 @@ 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 msgid "Deprecated" -msgstr "Устарело" +msgstr "Выведенный(-ая) из использования" #: dcim/choices.py:114 templates/dcim/rack.html:128 msgid "Millimeters" msgstr "Миллиметры" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "Дюймы" @@ -1792,8 +1791,8 @@ msgstr "Дюймы" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1806,7 +1805,7 @@ msgstr "Дюймы" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "Родитель" @@ -1819,13 +1818,13 @@ msgstr "Потомок" #: templates/dcim/rack.html:181 templates/dcim/rack_elevation_list.html:22 #: templates/dcim/rackreservation.html:84 msgid "Front" -msgstr "Передняя" +msgstr "Вид спереди" #: dcim/choices.py:156 templates/dcim/device.html:351 #: templates/dcim/rack.html:187 templates/dcim/rack_elevation_list.html:23 #: templates/dcim/rackreservation.html:90 msgid "Rear" -msgstr "Задняя" +msgstr "Вид сзади" #: dcim/choices.py:175 dcim/choices.py:221 virtualization/choices.py:46 msgid "Staged" @@ -1855,7 +1854,7 @@ msgstr "Справа налево" msgid "Side to rear" msgstr "Бок назад" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "Пассивный" @@ -1877,14 +1876,14 @@ msgstr "Калифорнийский стиль" #: dcim/choices.py:496 msgid "International/ITA" -msgstr "Международная/ITA" +msgstr "ITA/Международный" #: dcim/choices.py:526 dcim/choices.py:755 msgid "Proprietary" msgstr "Проприетарный" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "Другой" @@ -1897,177 +1896,177 @@ msgstr "ITA/Международный" msgid "Physical" msgstr "Физический" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "Виртуальный" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "Беспроводной" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "Виртуальные интерфейсы" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "Мост" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "Группа агрегации линков (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "Ethernet (фиксированный)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "Ethernet (модульный)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "Ethernet (объединительная плата)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "Сотовая связь" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "Серийный" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "Коаксиальный" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "Стекирование" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "Полу" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "Полный" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "Авто" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "Доступ" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Тегированный" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "Тегированный (все)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "Стандарт IEEE" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "Пассивный режим 24 В (2 пары)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "Пассивное напряжение 24 В (4 пары)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "Пассивное напряжение 48 В (2 пары)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "Пассивное напряжение 48 В (4 пары)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "Медь" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "Оптоволоконное" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "Волокно" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "Подключено" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "Километры" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "Метры" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "Сантиметры" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "Мили" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "Футы" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "Килограммы" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "Граммы" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "Фунты" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "Унции" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" -msgstr "Начальное" +msgstr "Основной" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "Резервный" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "Однофазный" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "Трехфазный" @@ -2316,7 +2315,7 @@ msgstr "Отсек для модулей (ID)" #: ipam/filtersets.py:807 ipam/filtersets.py:1026 #: virtualization/filtersets.py:161 vpn/filtersets.py:351 msgid "Device (ID)" -msgstr "Устройство (идентификатор)" +msgstr "Устройство (ID)" #: dcim/filtersets.py:1260 msgid "Rack (name)" @@ -2344,7 +2343,7 @@ msgid "Virtual Chassis (ID)" msgstr "Виртуальное шасси (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2354,7 +2353,7 @@ msgstr "Виртуальное шасси" #: dcim/filtersets.py:1335 msgid "Module (ID)" -msgstr "Модуль (идентификатор)" +msgstr "Модуль (ID)" #: dcim/filtersets.py:1439 ipam/forms/bulk_import.py:188 #: vpn/forms/bulk_import.py:308 @@ -2368,7 +2367,7 @@ msgstr "Назначенный VID" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2376,8 +2375,8 @@ msgstr "Назначенный VID" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2390,7 +2389,7 @@ msgstr "Назначенный VID" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2401,10 +2400,10 @@ msgstr "VRF (КРАСНЫЙ)" #: dcim/filtersets.py:1459 ipam/filtersets.py:967 vpn/filtersets.py:314 msgid "L2VPN (ID)" -msgstr "L2VPN (ИДЕНТИФИКАТОР)" +msgstr "L2VPN (ID)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2416,11 +2415,11 @@ msgstr "L2VPN" #: dcim/filtersets.py:1497 msgid "Virtual Chassis Interfaces for Device" -msgstr "Интерфейсы виртуального корпуса для устройства" +msgstr "Интерфейсы виртуального шасси для устройства" #: dcim/filtersets.py:1502 msgid "Virtual Chassis Interfaces for Device (ID)" -msgstr "Интерфейсы виртуального корпуса для устройства (ID)" +msgstr "Интерфейсы виртуального шасси для устройства (ID)" #: dcim/filtersets.py:1506 msgid "Kind of interface" @@ -2475,7 +2474,7 @@ msgstr "Теги" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2494,7 +2493,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2544,8 +2543,8 @@ msgstr "Часовой пояс" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2554,7 +2553,7 @@ msgstr "Часовой пояс" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2572,7 +2571,7 @@ msgstr "Часовой пояс" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2666,7 +2665,7 @@ msgstr "Весовая единица" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2699,7 +2698,7 @@ msgstr "Аппаратное обеспечение" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2746,7 +2745,7 @@ msgstr "Тип устройства" msgid "Module Type" msgstr "Тип модуля" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "Роль виртуальной машины" @@ -2778,13 +2777,15 @@ msgstr "Роль устройства" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "Платформа" @@ -2808,16 +2809,16 @@ msgstr "Платформа" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2839,7 +2840,7 @@ msgstr "Платформа" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2951,7 +2952,7 @@ msgstr "Порт питания" #: dcim/forms/bulk_edit.py:973 dcim/forms/bulk_import.py:738 msgid "Feed leg" -msgstr "Подача питании" +msgstr "Фаза электропитания" #: dcim/forms/bulk_edit.py:1019 dcim/forms/bulk_edit.py:1325 msgid "Management only" @@ -2979,7 +2980,7 @@ msgid "Wireless role" msgstr "Роль беспроводной связи" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2988,10 +2989,10 @@ msgstr "Роль беспроводной связи" msgid "Module" msgstr "Модуль" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" -msgstr "Группа объединения каналов(LAG)" +msgstr "LAG" #: dcim/forms/bulk_edit.py:1310 dcim/forms/model_forms.py:1110 msgid "Virtual device contexts" @@ -3000,7 +3001,7 @@ msgstr "Виртуальные контексты" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3025,13 +3026,13 @@ msgid "VLAN group" msgstr "Группа VLAN" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "VLAN без тегов" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "VLAN с тегами" @@ -3041,7 +3042,7 @@ msgid "Wireless LAN group" msgstr "Беспроводная группа LAN" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Беспроводные LANs" @@ -3150,7 +3151,7 @@ msgstr "Родительское место" #: dcim/forms/bulk_import.py:267 dcim/forms/bulk_import.py:1306 msgid "Rack's location (if any)" -msgstr "Местоположение стойки (если есть)" +msgstr "Локация стойки (если есть)" #: dcim/forms/bulk_import.py:276 dcim/forms/model_forms.py:246 #: dcim/tables/racks.py:153 templates/dcim/rackreservation.html:12 @@ -3212,9 +3213,9 @@ msgid "Virtual chassis" msgstr "Виртуальное шасси" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3226,7 +3227,7 @@ msgstr "Виртуальное шасси" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "Кластер" @@ -3236,7 +3237,7 @@ msgstr "Кластер виртуализации" #: dcim/forms/bulk_import.py:495 msgid "Assigned location (if any)" -msgstr "Назначенное местоположение (если есть)" +msgstr "Назначенная локация (если есть)" #: dcim/forms/bulk_import.py:502 msgid "Assigned rack (if any)" @@ -3339,7 +3340,7 @@ msgstr "Мостовой интерфейс" #: dcim/forms/bulk_import.py:792 msgid "Lag" -msgstr "Группа объединения каналов(LAG)" +msgstr "Lag" #: dcim/forms/bulk_import.py:796 msgid "Parent LAG interface" @@ -3407,7 +3408,7 @@ msgstr "Соответствующий задний порт" msgid "Physical medium classification" msgstr "Классификация физических сред" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "Установленное устройство" @@ -3495,7 +3496,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} боковое завершение не найдено: {device} {name}" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "Мастер" @@ -3623,7 +3624,7 @@ msgstr "Занятый" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3634,10 +3635,10 @@ msgstr "Подключение" #: dcim/forms/filtersets.py:1245 dcim/forms/model_forms.py:1484 #: templates/dcim/virtualdevicecontext.html:16 msgid "Virtual Device Context" -msgstr "Контекст виртуального устройства" +msgstr "Виртуальный контекст" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3669,7 +3670,7 @@ msgid "Transmit power (dBm)" msgstr "Мощность передачи (дБм)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3677,7 +3678,7 @@ msgstr "Мощность передачи (дБм)" msgid "Cable" msgstr "Кабель" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "Обнаружено" @@ -3704,8 +3705,8 @@ msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "" -"Список идентификаторов числовых единиц, разделенных запятыми. Диапазон можно" -" указать с помощью дефиса." +"Список числовых идентификаторов, разделенных запятыми. Диапазон можно " +"указать с помощью дефиса." #: dcim/forms/model_forms.py:259 dcim/tables/racks.py:133 msgid "Reservation" @@ -3724,7 +3725,7 @@ msgstr "Шасси" msgid "Device Role" msgstr "Роль устройства" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "Устройство с наименьшим номером, занимаемое устройством" @@ -3775,9 +3776,7 @@ msgstr "Интерфейс LAG" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "Интерфейс" @@ -3817,7 +3816,7 @@ msgstr "Комплектующие" #: dcim/forms/model_forms.py:1432 msgid "An InventoryItem can only be assigned to a single component." -msgstr "InventoryItem можно присвоить только одному компоненту." +msgstr "Инвентарный номер можно присвоить только одному компоненту." #: dcim/forms/model_forms.py:1446 templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" @@ -3854,7 +3853,7 @@ msgstr "" " ожидаются." #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "Задние порты" @@ -3893,11 +3892,11 @@ msgstr "" "соответствовать выбранному количеству положений задних портов " "({rearport_count})." -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" -msgstr "Члены" +msgstr "Участники" #: dcim/forms/object_create.py:417 msgid "Initial position" @@ -3957,7 +3956,7 @@ msgstr "Несовместимые типы терминации: {type_a} а т #: dcim/models/cables.py:191 msgid "A and B terminations cannot connect to the same object." -msgstr "Терминалы A и B не могут подключаться к одному и тому же объекту." +msgstr "Окончания A и B не могут подключаться к одному и тому же объекту." #: dcim/models/cables.py:258 ipam/models/asns.py:37 msgid "end" @@ -4068,7 +4067,7 @@ msgstr "максимальное потребление" #: dcim/models/device_component_templates.py:259 #: dcim/models/device_components.py:360 msgid "allocated draw" -msgstr "назначенное потребление" +msgstr "выделенное потребление" #: dcim/models/device_component_templates.py:269 msgid "power port template" @@ -4083,8 +4082,7 @@ msgstr "шаблоны портов питания" #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" -"Выделенная ничья не может превышать максимальное количество розыгрышей " -"({maximum_draw}Ж)." +"Выделенная мощность не может превышать максимальную ({maximum_draw}Вт)." #: dcim/models/device_component_templates.py:321 #: dcim/models/device_components.py:478 @@ -4238,12 +4236,12 @@ msgstr "" #: dcim/models/device_component_templates.py:742 #: dcim/models/device_components.py:1224 msgid "part ID" -msgstr "идентификатор детали" +msgstr "номер модели" #: dcim/models/device_component_templates.py:744 #: dcim/models/device_components.py:1226 msgid "Manufacturer-assigned part identifier" -msgstr "Идентификатор детали, присвоенный производителем" +msgstr "Номер модели, присвоенный производителем" #: dcim/models/device_component_templates.py:761 msgid "inventory item template" @@ -4520,7 +4518,7 @@ msgstr "" #: dcim/models/device_components.py:886 msgid "Cannot specify custom frequency with channel selected." -msgstr "Невозможно указать собственную частоту при выбранном канале." +msgstr "Невозможно указать произвольную частоту для выбранного канала." #: dcim/models/device_components.py:892 msgid "Channel width may be set only on wireless interfaces." @@ -4529,7 +4527,7 @@ msgstr "" #: dcim/models/device_components.py:894 msgid "Cannot specify custom width with channel selected." -msgstr "Невозможно указать произвольную ширину при выбранном канале." +msgstr "Невозможно указать произвольную ширину полосы для выбранного канала." #: dcim/models/device_components.py:902 #, python-brace-format @@ -4630,13 +4628,13 @@ msgstr "роль комплектующего" msgid "inventory item roles" msgstr "роли комплектующих" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "серийный номер" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "инвентарный номер" @@ -4654,11 +4652,11 @@ msgstr "Этот элемент был обнаружен автоматичес #: dcim/models/device_components.py:1262 msgid "inventory item" -msgstr "комплектующее" +msgstr "элемент инвентаря" #: dcim/models/device_components.py:1263 msgid "inventory items" -msgstr "комплектующие" +msgstr "элементы инвентаря" #: dcim/models/device_components.py:1274 msgid "Cannot assign self as parent." @@ -4671,7 +4669,7 @@ msgstr "" #: dcim/models/device_components.py:1288 msgid "Cannot move an inventory item with dependent children" -msgstr "Невозможно переместить инвентарь вместе с детьми-иждивенцами" +msgstr "Невозможно переместить инвентарь вместе с дочерней зависимостью" #: dcim/models/device_components.py:1296 msgid "Cannot assign inventory item to component on another device" @@ -4686,7 +4684,7 @@ msgstr "производитель" msgid "manufacturers" msgstr "производители" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "модель" @@ -4694,11 +4692,11 @@ msgstr "модель" msgid "default platform" msgstr "платформа по умолчанию" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" -msgstr "номер детали" +msgstr "номер модели" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Дискретный номер детали (опционально)" @@ -4736,9 +4734,9 @@ msgstr "" "устройств. Оставьте поле пустым, если этот тип устройства не относится ни к " "родительскому, ни к дочернему." -#: dcim/models/devices.py:128 dcim/models/devices.py:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" -msgstr "направление воздушного потока" +msgstr "воздушный поток" #: dcim/models/devices.py:204 msgid "device type" @@ -4748,11 +4746,11 @@ msgstr "тип устройства" msgid "device types" msgstr "типы устройств" -#: dcim/models/devices.py:289 +#: dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." -msgstr "Высоту в U нужно указывать с шагом 0.5 юнитов стойки." +msgstr "Высоту в юнитах нужно указывать с шагом 0.5 юнита." -#: dcim/models/devices.py:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -4761,7 +4759,7 @@ msgstr "" "Устройству {device} в стойке {rack} для размещения на высоте {height}U не " "хватет свободных юнитов." -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4771,7 +4769,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} экземпляр(ов) уже смонтированых в" " стойках." -#: dcim/models/devices.py:330 +#: dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -4779,157 +4777,157 @@ msgstr "" "Необходимо удалить все шаблоны отсеков устройств, связанные с этим " "устройством, прежде чем рассекретить его как родительское устройство." -#: dcim/models/devices.py:336 +#: dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Типы дочерних устройств должны быть 0U." -#: dcim/models/devices.py:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "тип модуля" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "типы модулей" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "Эта роль может быть назначена виртуальным машинам." -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "роль устройства" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "роли устройств" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Опционально ограничьте эту платформу устройствами определенного " "производителя" -#: dcim/models/devices.py:515 +#: dcim/models/devices.py:517 msgid "platform" -msgstr "платформы" - -#: dcim/models/devices.py:516 -msgid "platforms" msgstr "платформ" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:518 +msgid "platforms" +msgstr "платформы" + +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "Функция, которую выполняет это устройство" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Серийный номер корпуса, присвоенный производителем" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 msgid "A unique tag used to identify this device" msgstr "Уникальный тег, используемый для идентификации этого устройства" -#: dcim/models/devices.py:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "положение (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "лицевая сторона стойки" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "основной IPv4" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "основной IPv6" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "внеполосный IP-адрес" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "Позиция VC" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "Положение виртуального шасси" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "Приоритет VC" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "Приоритет выбора основного виртуального шасси" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "широта" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Координата GPS в десятичном формате (xx.yyyyyy)" -#: dcim/models/devices.py:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "долгота" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "Имя устройства должно быть уникальным для каждого сайта." -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "устройство" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" -msgstr "приборы" +msgstr "устройства" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Стойка {rack} не принадлежит сайту {site}." -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, python-brace-format msgid "Location {location} does not belong to site {site}." -msgstr "Местоположение {location} не принадлежит сайту {site}." +msgstr "Локация {location} не принадлежит сайту {site}." -#: dcim/models/devices.py:849 +#: dcim/models/devices.py:851 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." -msgstr "Стойка {rack} не принадлежит расположению {location}." +msgstr "Стойка {rack} не принадлежит локации {location}." -#: dcim/models/devices.py:856 +#: dcim/models/devices.py:858 msgid "Cannot select a rack face without assigning a rack." msgstr "Невозможно выбрать лицевую сторону стойки, не выбрав саму стойку." -#: dcim/models/devices.py:860 +#: dcim/models/devices.py:862 msgid "Cannot select a rack position without assigning a rack." msgstr "Невозможно выбрать позицию в стойке, не выбрав саму стойку." -#: dcim/models/devices.py:866 +#: dcim/models/devices.py:868 msgid "Position must be in increments of 0.5 rack units." msgstr "Позиция должна быть указана с шагом 0,5 единицы стойки." -#: dcim/models/devices.py:870 +#: dcim/models/devices.py:872 msgid "Must specify rack face when defining rack position." msgstr "При определении лицевой стороны необходимо указать позицию в стойке." -#: dcim/models/devices.py:878 +#: dcim/models/devices.py:880 #, 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:889 +#: dcim/models/devices.py:891 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -4937,15 +4935,15 @@ msgstr "" "Устройствам с указанным в типе свойством \"дочернее\" нельзя выбрать лицевую" " сторону стойки. Этот атрибут указывается для \"родительского\" устройства." -#: dcim/models/devices.py:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "" -"Типы детских устройств нельзя отнести к позиции в стойке. Это атрибут " +"Типы дочерних устройств нельзя отнести к позиции в стойке. Это атрибут " "родительского устройства." -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4954,22 +4952,22 @@ msgstr "" "U{position} уже занят или в нем недостаточно места для размещения этого типа" " устройств: {device_type} ({u_height}U)" -#: dcim/models/devices.py:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} не является адресом IPv4." -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Указанный IP-адрес ({ip}) не назначено этому устройству." -#: dcim/models/devices.py:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} не является адресом IPv6." -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4978,26 +4976,26 @@ msgstr "" "Назначенная платформа ограничена {platform_manufacturer} типы устройств, но " "данный тип устройства относится к {devicetype_manufacturer}." -#: dcim/models/devices.py:978 +#: dcim/models/devices.py:980 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Назначенный кластер принадлежит другому сайту ({site})" -#: dcim/models/devices.py:986 +#: dcim/models/devices.py:988 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Положение устройства, назначенного виртуальному шасси, должно быть " "определено." -#: dcim/models/devices.py:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "модуль" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "модули" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5006,21 +5004,21 @@ msgstr "" "Модуль должен быть установлен в модульном отсеке, принадлежащем назначенному" " устройству ({device})." -#: dcim/models/devices.py:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "Домен" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "виртуальное шасси" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Выбранный мастер ({master}) не назначено этому виртуальному шасси." -#: dcim/models/devices.py:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5029,33 +5027,33 @@ msgstr "" "Невозможно удалить виртуальное шасси {self}. Существуют интерфейсы-члены, " "которые образуют межкорпусные интерфейсы LAG." -#: dcim/models/devices.py:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "идентификатор" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "Цифровой идентификатор, уникальный для родительского устройства" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "комментарии" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "виртуальный контекст" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "виртуальные контексты" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} не является IPV{family} адрес." -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Основной IP-адрес должен принадлежать интерфейсу на назначенном устройстве." @@ -5087,8 +5085,7 @@ msgstr "панели питания" msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" -"Местоположение {location} ({location_site}) находится на другом сайте, чем " -"{site}" +"Локация{location} ({location_site}) находится на другом сайте, чем {site}" #: dcim/models/power.py:107 msgid "supply" @@ -5271,8 +5268,8 @@ msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "" -"Нумерация стеллажей должна начинаться с {position} или меньше для размещения" -" установленных в настоящее время устройств." +"Нумерация стоек должна начинаться с {position} или меньше для размещения " +"установленных в настоящее время устройств." #: dcim/models/racks.py:269 #, python-brace-format @@ -5281,7 +5278,7 @@ msgstr "Локация должна быть с того же места, {site} #: dcim/models/racks.py:522 msgid "units" -msgstr "единиц" +msgstr "юниты" #: dcim/models/racks.py:548 msgid "rack reservation" @@ -5300,7 +5297,7 @@ msgstr "" #: dcim/models/racks.py:579 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" -msgstr "Следующие номера уже зарезервированы: {unit_list}" +msgstr "Следующие юниты уже зарезервированы: {unit_list}" #: dcim/models/sites.py:49 msgid "A top-level region with this name already exists." @@ -5368,7 +5365,7 @@ msgstr "место" #: dcim/models/sites.py:239 msgid "sites" -msgstr "места" +msgstr "Сайты" #: dcim/models/sites.py:303 msgid "A location with this name already exists within the specified site." @@ -5390,16 +5387,15 @@ msgstr "локации" #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" -"Местонахождение родителя ({parent}) должен принадлежать тому же сайту " -"({site})." +"Локация родителя ({parent}) должен принадлежать тому же сайту ({site})." #: dcim/tables/cables.py:54 msgid "Termination A" -msgstr "Прекращение A" +msgstr "Окончание A" #: dcim/tables/cables.py:59 msgid "Termination B" -msgstr "Прекращение В" +msgstr "Окончание В" #: dcim/tables/cables.py:65 wireless/tables/wirelesslink.py:22 msgid "Device A" @@ -5411,19 +5407,19 @@ msgstr "Устройство B" #: dcim/tables/cables.py:77 msgid "Location A" -msgstr "Местоположение A" +msgstr "Локация A" #: dcim/tables/cables.py:83 msgid "Location B" -msgstr "Местоположение B" +msgstr "Локация B" #: dcim/tables/cables.py:89 msgid "Rack A" -msgstr "Стеллаж A" +msgstr "Стойка A" #: dcim/tables/cables.py:95 msgid "Rack B" -msgstr "Стеллаж B" +msgstr "Стойка B" #: dcim/tables/cables.py:101 msgid "Site A" @@ -5445,7 +5441,7 @@ msgstr "Консольный порт" msgid "Reachable" msgstr "Доступен" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5464,7 +5460,7 @@ msgstr "Устройства" msgid "VMs" msgstr "Виртуальные машины" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5473,62 +5469,62 @@ msgstr "Виртуальные машины" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "Шаблон конфигурации" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "IP-адрес" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "Адрес IPv4" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "Адрес IPv6" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "Позиция VC" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "Приоритет VC" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Родительское устройство" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "Положение (отсек для устройств)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "Консольные порты" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "Порты консольного сервера" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "Порты питания" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "Розетки питания" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5538,53 +5534,53 @@ msgstr "Розетки питания" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Интерфейсы" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "Передние порты" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "Отсеки для устройств" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "Отсеки для модулей" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "Комплектующие" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Модульный отсек" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "Цвет кабеля" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "Связать узлы" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "Отметить подключение" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "Максимальная потребляемая мощность (Вт)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "Выделенная мощность (Вт)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5593,12 +5589,12 @@ msgstr "Выделенная мощность (Вт)" msgid "IP Addresses" msgstr "IP-адреса" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "Группы FHRP" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5607,20 +5603,20 @@ msgstr "Группы FHRP" msgid "Tunnel" msgstr "Туннель" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "Только управление" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "Беспроводная связь" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "Виртуальные контексты устройств(VDCs)" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5629,7 +5625,7 @@ msgstr "Виртуальные контексты устройств(VDCs)" msgid "Inventory Items" msgstr "Предметы инвентаря" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5638,28 +5634,28 @@ msgstr "Предметы инвентаря" msgid "Rear Port" msgstr "Задний порт" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "Установленный модуль" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "Серийный номер модуля" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "Тег активов модуля" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "Состояние модуля" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "Компонент" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "Предметы" @@ -5777,7 +5773,7 @@ msgstr "Высота" #: dcim/tables/racks.py:85 msgid "Space" -msgstr "Космос" +msgstr "Пространство" #: dcim/tables/racks.py:96 templates/dcim/rack.html:105 msgid "Outer Width" @@ -5797,7 +5793,7 @@ msgstr "Максимальный вес" #: ipam/tables/asn.py:66 netbox/navigation/menu.py:16 #: netbox/navigation/menu.py:18 msgid "Sites" -msgstr "ЦОД" +msgstr "Сайты" #: dcim/tests/test_api.py:49 msgid "Test case must set peer_termination_type" @@ -5882,7 +5878,7 @@ msgstr "JSON" #: extras/choices.py:36 msgid "Selection" -msgstr "Отбор" +msgstr "Выбор" #: extras/choices.py:37 msgid "Multiple selection" @@ -6226,7 +6222,7 @@ msgid "Cluster type (slug)" msgstr "Тип кластера (подстрока)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "Кластерная группа" @@ -6278,7 +6274,7 @@ msgstr "Видимый пользовательский интерфейс" #: extras/forms/bulk_edit.py:58 extras/forms/bulk_import.py:63 #: extras/forms/filtersets.py:83 extras/models/customfields.py:200 msgid "UI editable" -msgstr "Редактируемый пользовательский интерфейс" +msgstr "Редактируемый UI" #: extras/forms/bulk_edit.py:63 extras/forms/filtersets.py:86 msgid "Is cloneable" @@ -6357,8 +6353,8 @@ msgid "Is active" msgstr "Активен" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6367,8 +6363,8 @@ msgid "Content types" msgstr "Типы контента" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Один или несколько назначенных типов объектов" @@ -6417,29 +6413,40 @@ msgstr "" "дополнительными метками, разделенными двоеточием: «Choice1:First Choice, " "Choice2:Second Choice»" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "класс кнопок" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +msgid "" +"The class of the first link in a group will be used for the dropdown button" +msgstr "" +"Класс первой ссылки в группе будет использоваться для кнопки раскрывающегося" +" списка" + +#: extras/forms/bulk_import.py:188 msgid "Action object" msgstr "Объект действия" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 msgid "Webhook name or script as dotted path module.Class" msgstr "Имя веб-хука или скрипт в виде пунктирного пути module.Class" -#: extras/forms/bulk_import.py:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "Вебхук {name} не найден" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "Сценарий {name} не найден" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "Назначенный тип объекта" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "Классификация записей" @@ -6522,7 +6529,7 @@ msgstr "Группы сайтов" #: extras/forms/filtersets.py:364 extras/forms/model_forms.py:408 #: netbox/navigation/menu.py:21 msgid "Locations" -msgstr "Местоположения" +msgstr "Локации" #: extras/forms/filtersets.py:369 extras/forms/model_forms.py:413 msgid "Device types" @@ -6897,7 +6904,8 @@ msgstr "Допустимы только буквенно-цифровые сим #: extras/models/customfields.py:101 msgid "Double underscores are not permitted in custom field names." msgstr "" -"В именах настраиваемых полей недопустимо использовать двойное подчеркивание." +"В именах настраиваемых полей недопустимо использовать два подчеркивания " +"подряд (зарезервировано)." #: extras/models/customfields.py:112 msgid "" @@ -7321,10 +7329,9 @@ msgid "" "username, request_id, and data." msgstr "" "Шаблон Jinja2 для настраиваемого тела запроса. Если поле пусто, будет " -"добавлен объект JSON, представляющий изменение. Доступные контекстные данные" -" включают: событие, модель, отметка " -"времени, имя пользователя, идентификатор " -"запроса, и данные." +"добавлен объект JSON с изменениями. Доступные контекстные данные включают: " +"event, model, timestamp, " +"username, request_id, и data." #: extras/models/models.py:234 msgid "secret" @@ -7393,17 +7400,6 @@ msgstr "Код Jinja2 шаблона для URL-адреса" msgid "Links with the same group will appear as a dropdown menu" msgstr "Ссылки с той же группой появятся в выпадающем меню" -#: extras/models/models.py:353 -msgid "button class" -msgstr "класс кнопок" - -#: extras/models/models.py:357 -msgid "" -"The class of the first link in a group will be used for the dropdown button" -msgstr "" -"Класс первой ссылки в группе будет использоваться для кнопки раскрывающегося" -" списка" - #: extras/models/models.py:360 msgid "new window" msgstr "новое окно" @@ -7496,11 +7492,11 @@ msgstr "ширина изображения" #: extras/models/models.py:640 msgid "image attachment" -msgstr "вложение изображения" +msgstr "прикрепить изображение" #: extras/models/models.py:641 msgid "image attachments" -msgstr "вложения изображений" +msgstr "прикрепленные изображения" #: extras/models/models.py:655 #, python-brace-format @@ -7590,7 +7586,7 @@ msgid "staged changes" msgstr "поэтапные изменения" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +msgid "The object type(s) to which this tag can be applied." msgstr "Тип (ы) объекта, к которому можно применить этот тег." #: extras/models/tags.py:49 @@ -7889,7 +7885,7 @@ msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "Адрес" @@ -7931,7 +7927,7 @@ msgstr "Интерфейс виртуальной машины (ID)" #: ipam/filtersets.py:614 msgid "FHRP group (ID)" -msgstr "Группа FHRP (идентификатор)" +msgstr "FHRP группа (ID)" #: ipam/filtersets.py:618 msgid "Is assigned to an interface" @@ -8006,7 +8002,7 @@ msgstr "Является частным" #: templates/ipam/aggregate.html:19 templates/ipam/asn.html:28 #: templates/ipam/asnrange.html:20 templates/ipam/rir.html:20 msgid "RIR" -msgstr "ВСАДНИКИ" +msgstr "RIR" #: ipam/forms/bulk_edit.py:168 msgid "Date added" @@ -8019,7 +8015,7 @@ msgstr "Длина префикса" #: ipam/forms/bulk_edit.py:252 ipam/forms/filtersets.py:236 #: templates/ipam/prefix.html:86 msgid "Is a pool" -msgstr "Это бассейн" +msgstr "Это пул" #: ipam/forms/bulk_edit.py:257 ipam/forms/bulk_edit.py:301 #: ipam/forms/filtersets.py:243 ipam/forms/filtersets.py:282 @@ -8058,7 +8054,7 @@ msgid "Authentication key" msgstr "Ключ аутентификации" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -8073,13 +8069,13 @@ msgstr "Минимальное количество VLAN VID для детей" #: ipam/forms/bulk_edit.py:420 msgid "Maximum child VLAN VID" -msgstr "Максимальное количество идентификаторов VLAN для детей" +msgstr "Максимальный ID дочерней VLAN" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "Тип прицела" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "Область применения" @@ -8088,8 +8084,8 @@ msgstr "Область применения" msgid "Site & Group" msgstr "Сайт и группа" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -8129,7 +8125,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "Родительское устройство назначенного интерфейса (если есть)" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8179,16 +8175,12 @@ msgstr "Тип прицела (приложение и модель)" #: ipam/forms/bulk_import.py:418 #, python-brace-format msgid "Minimum child VLAN VID (default: {minimum})" -msgstr "" -"Минимальное количество идентификаторов VLAN для детей (по умолчанию): " -"{minimum})" +msgstr "Минимальный ID дочерней VLAN (по умолчанию: {minimum})" #: ipam/forms/bulk_import.py:424 #, python-brace-format msgid "Maximum child VLAN VID (default: {maximum})" -msgstr "" -"Максимальное количество идентификаторов VLAN для детей (по умолчанию): " -"{maximum})" +msgstr "Максимальный ID дочерней VLAN (по умолчанию: {maximum})" #: ipam/forms/bulk_import.py:448 msgid "Assigned VLAN group" @@ -8249,7 +8241,7 @@ msgstr "Ассортимент" #: ipam/forms/filtersets.py:127 msgid "Start" -msgstr "Начните" +msgstr "Начало" #: ipam/forms/filtersets.py:131 msgid "End" @@ -8286,7 +8278,7 @@ msgstr "DNS-имя" #: ipam/forms/filtersets.py:401 ipam/forms/filtersets.py:494 #: ipam/models/vlans.py:156 templates/ipam/vlan.html:34 msgid "VLAN ID" -msgstr "ИДЕНТИФИКАТОР КЛАНА" +msgstr "VLAN ID" #: ipam/forms/filtersets.py:433 msgid "Minimum VID" @@ -8311,8 +8303,8 @@ msgstr "Порт" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8335,7 +8327,7 @@ msgstr "Назначение сайта/VLAN" msgid "IP Range" msgstr "Диапазон IP-адресов" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "Группа компаний FHRP" @@ -8348,7 +8340,7 @@ msgstr "Сделайте этот IP-адрес основным для устр msgid "An IP address can only be assigned to a single object." msgstr "IP-адрес можно присвоить только одному объекту." -#: ipam/forms/model_forms.py:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8363,34 +8355,25 @@ msgstr "" "В качестве основных IP-адресов можно назначить только IP-адреса, назначенные" " интерфейсу." -#: ipam/forms/model_forms.py:373 -#, python-brace-format -msgid "{ip} is a network ID, which may not be assigned to an interface." -msgstr "" -"{ip} это сетевой идентификатор, который не может быть присвоен интерфейсу." - -#: ipam/forms/model_forms.py:379 -#, python-brace-format -msgid "" -"{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "" -"{ip} это широковещательный адрес, который может не быть присвоен интерфейсу." - -#: ipam/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "Виртуальный IP-адрес" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "Задание уже существует" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Группа VLAN" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "Детские сети VLAN" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -8398,15 +8381,15 @@ msgstr "" "Список одного или нескольких номеров портов, разделенных запятыми. Диапазон " "можно указать с помощью дефиса." -#: ipam/forms/model_forms.py:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Шаблон Службы" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "Шаблон службы" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8415,7 +8398,7 @@ msgstr "" #: ipam/models/asns.py:34 msgid "start" -msgstr "начните" +msgstr "Начало" #: ipam/models/asns.py:51 msgid "ASN range" @@ -8485,7 +8468,7 @@ msgstr "IP-пространство, управляемое этим RIR, счи #: ipam/models/ip.py:71 netbox/navigation/menu.py:170 msgid "RIRs" -msgstr "РИР" +msgstr "RIR's" #: ipam/models/ip.py:83 msgid "IPv4 or IPv6 network" @@ -8555,7 +8538,7 @@ msgstr "Основная функция этого префикса" #: ipam/models/ip.py:264 msgid "is a pool" -msgstr "это бассейн" +msgstr "это пул" #: ipam/models/ip.py:266 msgid "All IP addresses within this prefix are considered usable" @@ -8573,12 +8556,12 @@ msgstr "префиксы" msgid "Cannot create prefix with /0 mask." msgstr "Невозможно создать префикс с маской /0." -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "глобальная таблица" @@ -8674,12 +8657,25 @@ msgstr "IP-адреса" msgid "Cannot create IP address with /0 mask." msgstr "Невозможно создать IP-адрес с маской /0." -#: ipam/models/ip.py:856 +#: ipam/models/ip.py:850 +#, python-brace-format +msgid "{ip} is a network ID, which may not be assigned to an interface." +msgstr "" +"{ip} это идентификатор сети, который не может быть присвоен интерфейсу." + +#: ipam/models/ip.py:861 +#, python-brace-format +msgid "" +"{ip} is a broadcast address, which may not be assigned to an interface." +msgstr "" +"{ip} это широковещательный адрес, который может не быть присвоен интерфейсу." + +#: ipam/models/ip.py:875 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Дубликат IP-адреса обнаружен в {table}: {ipaddress}" -#: ipam/models/ip.py:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Только адресам IPv6 можно присвоить статус SLAAC" @@ -8719,19 +8715,19 @@ msgstr "Служба должна быть связана с устройств #: ipam/models/vlans.py:49 msgid "minimum VLAN ID" -msgstr "минимальный идентификатор VLAN" +msgstr "минимальный VLAN ID" #: ipam/models/vlans.py:55 msgid "Lowest permissible ID of a child VLAN" -msgstr "Наименьший допустимый идентификатор дочерней VLAN" +msgstr "Наименьший допустимый ID дочерней VLAN" #: ipam/models/vlans.py:58 msgid "maximum VLAN ID" -msgstr "максимальный идентификатор VLAN" +msgstr "максимальный VLAN ID" #: ipam/models/vlans.py:64 msgid "Highest permissible ID of a child VLAN" -msgstr "Максимально допустимый идентификатор детской VLAN" +msgstr "Максимально допустимый ID дочерней VLAN" #: ipam/models/vlans.py:85 msgid "VLAN groups" @@ -8761,7 +8757,7 @@ msgstr "Группа VLAN (опционально)" #: ipam/models/vlans.py:161 msgid "Numeric VLAN ID (1-4094)" -msgstr "Цифровой идентификатор VLAN (1-4094)" +msgstr "Цифровой VLAN ID (1-4094)" #: ipam/models/vlans.py:179 msgid "Operational status of this VLAN" @@ -8874,7 +8870,7 @@ msgstr "Глубина" #: ipam/tables/ip.py:261 msgid "Pool" -msgstr "Бассейн" +msgstr "Пул" #: ipam/tables/ip.py:264 ipam/tables/ip.py:317 msgid "Marked Utilized" @@ -8908,7 +8904,7 @@ msgstr "Тип прицела" #: ipam/tables/vlans.py:107 ipam/tables/vlans.py:210 #: templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" -msgstr "ВИДЕО" +msgstr "VID" #: ipam/tables/vrfs.py:30 msgid "RD" @@ -9086,21 +9082,20 @@ msgstr "Предпочитайте адреса IPv4, а не IPv6" #: netbox/config/parameters.py:84 msgid "Rack unit height" -msgstr "Высота стеллажа" +msgstr "Высота стойки" #: netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" -"Высота единиц измерения по умолчанию для визуализированных высот стеллажей" +"Высота единиц измерения по умолчанию для визуализированных высот стоек" #: netbox/config/parameters.py:91 msgid "Rack unit width" -msgstr "Ширина стеллажа" +msgstr "Ширина стойки" #: netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" -msgstr "" -"Ширина единиц измерения по умолчанию для визуализированных высот стеллажей" +msgstr "Ширина юнита по умолчанию для визуализированных высот стоек" #: netbox/config/parameters.py:100 msgid "Powerfeed voltage" @@ -9254,7 +9249,7 @@ msgstr "{class_name} необходимо указать класс модели #: netbox/models/features.py:278 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." -msgstr "Неизвестное имя поля '{name}'в данных произвольных полей." +msgstr "Неизвестное имя поля '{name}' в данных для настраиваемых полей." #: netbox/models/features.py:284 #, python-brace-format @@ -9339,7 +9334,7 @@ msgstr "Роли устройств" #: netbox/navigation/menu.py:68 templates/dcim/device.html:162 #: templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" -msgstr "Контексты виртуальных устройств" +msgstr "Виртуальные контексты" #: netbox/navigation/menu.py:76 msgid "Manufacturers" @@ -9351,7 +9346,7 @@ msgstr "Компоненты устройства" #: netbox/navigation/menu.py:92 templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" -msgstr "Роли предметов инвентаря" +msgstr "Роли предметов" #: netbox/navigation/menu.py:99 netbox/navigation/menu.py:103 msgid "Connections" @@ -9371,15 +9366,15 @@ msgstr "Интерфейсные подключения" #: netbox/navigation/menu.py:114 msgid "Console Connections" -msgstr "Подключения к консоли" +msgstr "Консольные подключения" #: netbox/navigation/menu.py:119 msgid "Power Connections" -msgstr "Подключения питания" +msgstr "Подключения кабелей питания" #: netbox/navigation/menu.py:135 msgid "Wireless LAN Groups" -msgstr "Группы беспроводных локальных сетей" +msgstr "Группы WLAN" #: netbox/navigation/menu.py:156 msgid "Prefix & VLAN Roles" @@ -9410,7 +9405,7 @@ msgstr "VPN" #: netbox/navigation/menu.py:203 netbox/navigation/menu.py:205 #: vpn/tables/tunnels.py:24 msgid "Tunnels" -msgstr "Тоннели" +msgstr "Туннели" #: netbox/navigation/menu.py:206 templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" @@ -9423,12 +9418,12 @@ msgstr "Окончание туннелей" #: netbox/navigation/menu.py:211 netbox/navigation/menu.py:213 #: vpn/models/l2vpn.py:64 msgid "L2VPNs" -msgstr "VPN-сервисы L2P" +msgstr "L2VPN" #: netbox/navigation/menu.py:214 templates/vpn/l2vpn.html:57 #: templates/vpn/tunnel.html:73 vpn/tables/tunnels.py:58 msgid "Terminations" -msgstr "Прекращения" +msgstr "Соединения" #: netbox/navigation/menu.py:220 msgid "IKE Proposals" @@ -9464,7 +9459,7 @@ msgstr "Виртуальные машины" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "Виртуальные диски" @@ -9474,19 +9469,19 @@ msgstr "Типы кластеров" #: netbox/navigation/menu.py:247 msgid "Cluster Groups" -msgstr "Кластерные группы" +msgstr "Группы кластеров" #: netbox/navigation/menu.py:261 msgid "Circuit Types" -msgstr "Типы цепей" +msgstr "Типы каналов связи" #: netbox/navigation/menu.py:265 netbox/navigation/menu.py:267 msgid "Providers" -msgstr "Поставщики" +msgstr "Провайдеры" #: netbox/navigation/menu.py:268 templates/circuits/provider.html:53 msgid "Provider Accounts" -msgstr "Учетные записи поставщиков" +msgstr "Аккаунты провайдеров" #: netbox/navigation/menu.py:269 msgid "Provider Networks" @@ -9546,7 +9541,7 @@ msgstr "Сохраненные фильтры" #: netbox/navigation/menu.py:316 msgid "Image Attachments" -msgstr "Вложения изображений" +msgstr "Прикрепленные Изображения" #: netbox/navigation/menu.py:320 msgid "Reports & Scripts" @@ -9576,7 +9571,7 @@ msgstr "Вебхуки" #: netbox/views/generic/feature_views.py:151 #: templates/extras/report/base.html:37 templates/extras/script/base.html:36 msgid "Jobs" -msgstr "Вакансии" +msgstr "Задачи" #: netbox/navigation/menu.py:362 msgid "Logging" @@ -9819,7 +9814,7 @@ msgstr "Журнал изменений" #: netbox/views/generic/feature_views.py:91 msgid "Journal" -msgstr "журнал" +msgstr "Журнал" #: netbox/views/generic/object_views.py:105 #, python-brace-format @@ -10090,7 +10085,7 @@ msgstr "Документы" #: templates/base/layout.html:139 templates/rest_framework/api.html:10 msgid "REST API" -msgstr "ОСТАЛЬНОЕ API" +msgstr "REST API" #: templates/base/layout.html:144 msgid "REST API documentation" @@ -10150,7 +10145,7 @@ msgstr "Сведения об увольнении" #: templates/circuits/circuittype.html:10 msgid "Add Circuit" -msgstr "Добавить цепь" +msgstr "Добавить канал связи" #: templates/circuits/inc/circuit_termination.html:9 #: templates/dcim/devicetype/component_templates.html:33 @@ -10181,7 +10176,7 @@ msgstr "Обмен" #: templates/circuits/inc/circuit_termination.html:26 #, python-format msgid "Termination %(side)s" -msgstr "Прекращение %(side)s" +msgstr "Окончания %(side)s" #: templates/circuits/inc/circuit_termination.html:42 #: templates/dcim/cable.html:70 templates/dcim/cable.html:76 @@ -10262,7 +10257,7 @@ msgstr "Патч-панель/порт" #: templates/circuits/provider.html:11 msgid "Add circuit" -msgstr "Добавить цепь" +msgstr "Добавить канал связи" #: templates/circuits/provideraccount.html:17 msgid "Provider Account" @@ -10270,11 +10265,11 @@ msgstr "Учетная запись поставщика" #: templates/core/configrevision.html:47 msgid "Default unit height" -msgstr "Высота единицы измерения по умолчанию" +msgstr "Высота юнита по умолчанию" #: templates/core/configrevision.html:51 msgid "Default unit width" -msgstr "Ширина блока по умолчанию" +msgstr "Ширина юнита по умолчанию" #: templates/core/configrevision.html:63 msgid "Default voltage" @@ -10390,8 +10385,8 @@ msgstr "Планирование" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "каждый %(interval)s секунды" +msgid "every %(interval)s minutes" +msgstr "каждый %(interval)s протокол" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -10645,7 +10640,7 @@ msgstr "Контекстные данные" #: templates/dcim/device/render_config.html:57 #: templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" -msgstr "Загрузить" +msgstr "Скачать" #: templates/dcim/device/render_config.html:60 #: templates/virtualization/virtualmachine/render_config.html:60 @@ -10689,7 +10684,7 @@ msgstr "Отсек для устройств" #: templates/dcim/devicebay.html:48 msgid "Installed Device" -msgstr "Установленное устройство" +msgstr "Вставленное устройство" #: templates/dcim/devicebay_delete.html:6 #, python-format @@ -10745,7 +10740,7 @@ msgstr "Номер детали" #: templates/dcim/devicetype.html:40 msgid "Height (U" -msgstr "Высота (U)" +msgstr "Высота (U" #: templates/dcim/devicetype.html:44 msgid "Exclude From Utilization" @@ -10757,7 +10752,7 @@ msgstr "Родитель/ребенок" #: templates/dcim/devicetype.html:74 msgid "Front Image" -msgstr "Изображение на передней панели" +msgstr "Изображение спереди" #: templates/dcim/devicetype.html:86 msgid "Rear Image" @@ -10779,7 +10774,7 @@ msgstr "Состояние подключения" #: templates/dcim/inc/cable_termination.html:65 msgid "No termination" -msgstr "Без увольнения" +msgstr "Без окончания" #: templates/dcim/inc/cable_toggle_buttons.html:4 msgid "Mark Planned" @@ -10804,7 +10799,7 @@ msgstr "Конечные точки пути" #: templates/dcim/inc/endpoint_connection.html:8 #: templates/dcim/powerfeed.html:128 templates/dcim/rearport.html:101 msgid "Not connected" -msgstr "Не подключен" +msgstr "Не подключено" #: templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" @@ -10855,7 +10850,7 @@ msgstr "Беспроводная связь" #: templates/dcim/interface.html:226 vpn/choices.py:55 msgid "Peer" -msgstr "сверстник" +msgstr "Peer" #: templates/dcim/interface.html:238 #: templates/wireless/inc/wirelesslink_interface.html:26 @@ -10883,7 +10878,7 @@ msgstr "Ширина канала" #: wireless/forms/filtersets.py:79 wireless/models.py:81 #: wireless/models.py:155 wireless/tables/wirelesslan.py:44 msgid "SSID" -msgstr "СКАЗАЛ" +msgstr "SSID" #: templates/dcim/interface.html:316 msgid "LAG Members" @@ -10906,7 +10901,7 @@ msgstr "Родительский товар" #: templates/dcim/inventoryitem.html:49 msgid "Part ID" -msgstr "Идентификатор детали" +msgstr "Номер модели" #: templates/dcim/inventoryitem_bulk_delete.html:5 msgid "This will also delete all child inventory items of those listed" @@ -10924,15 +10919,15 @@ msgstr "Розетка питания" #: templates/dcim/location.html:17 msgid "Add Child Location" -msgstr "Добавить местоположение ребенка" +msgstr "Добавить дочернюю локацию" #: templates/dcim/location.html:76 msgid "Child Locations" -msgstr "Местонахождение детей" +msgstr "Дочерние локации" #: templates/dcim/location.html:84 templates/dcim/site.html:137 msgid "Add a Location" -msgstr "Добавить местоположение" +msgstr "Добавить локацию" #: templates/dcim/location.html:98 templates/dcim/site.html:151 msgid "Add a Device" @@ -10970,7 +10965,7 @@ msgstr "A" #: templates/dcim/poweroutlet.html:51 msgid "Feed Leg" -msgstr "Кормовая ножка" +msgstr "Фаза электропитания" #: templates/dcim/powerpanel.html:77 msgid "Add Power Feeds" @@ -10978,11 +10973,11 @@ msgstr "Добавить каналы питания" #: templates/dcim/powerport.html:47 msgid "Maximum Draw" -msgstr "Максимальная ничья" +msgstr "Максимальное потребление" #: templates/dcim/powerport.html:51 msgid "Allocated Draw" -msgstr "Распределенная ничья" +msgstr "Выделенная мощность" #: templates/dcim/rack.html:66 msgid "Space Utilization" @@ -10990,7 +10985,7 @@ msgstr "Использование пространства" #: templates/dcim/rack.html:96 msgid "descending" -msgstr "спускаясь" +msgstr "по убыванию" #: templates/dcim/rack.html:96 msgid "ascending" @@ -10998,7 +10993,7 @@ msgstr "по возрастанию" #: templates/dcim/rack.html:99 msgid "Starting Unit" -msgstr "Пусковой блок" +msgstr "Начальный юнит" #: templates/dcim/rack.html:125 msgid "Mounting Depth" @@ -11018,7 +11013,7 @@ msgstr "Общий вес" #: templates/dcim/rack.html:173 templates/dcim/rack_elevation_list.html:16 msgid "Images and Labels" -msgstr "Изображения и этикетки" +msgstr "Изображения и лейблы" #: templates/dcim/rack.html:174 templates/dcim/rack_elevation_list.html:17 msgid "Images only" @@ -11026,7 +11021,7 @@ msgstr "Только изображения" #: templates/dcim/rack.html:175 templates/dcim/rack_elevation_list.html:18 msgid "Labels only" -msgstr "Только этикетки" +msgstr "Только лейблы" #: templates/dcim/rack/reservations.html:9 msgid "Add reservation" @@ -11042,7 +11037,7 @@ msgstr "Внешние размеры" #: templates/dcim/rack_edit.html:56 templates/dcim/rack_edit.html:71 msgid "Unit" -msgstr "Единица" +msgstr "Юнит" #: templates/dcim/rack_elevation_list.html:12 msgid "View List" @@ -11078,7 +11073,7 @@ msgstr "Добавить сайт" #: templates/dcim/region.html:56 msgid "Child Regions" -msgstr "Детские регионы" +msgstr "Дочерние регионы" #: templates/dcim/region.html:64 msgid "Add Region" @@ -11106,7 +11101,7 @@ msgstr "Физический адрес" #: templates/dcim/site.html:81 msgid "Map" -msgstr "карта" +msgstr "Карта" #: templates/dcim/site.html:92 msgid "Shipping Address" @@ -11116,7 +11111,7 @@ msgstr "Адрес доставки" #: templates/tenancy/tenantgroup.html:58 #: templates/wireless/wirelesslangroup.html:56 msgid "Child Groups" -msgstr "Детские группы" +msgstr "Дочерние группы" #: templates/dcim/sitegroup.html:64 msgid "Add Site Group" @@ -11155,7 +11150,7 @@ msgstr "Редактирование виртуального корпуса %(n #: templates/dcim/virtualchassis_edit.html:54 msgid "Rack/Unit" -msgstr "Стойка/блок" +msgstr "Стойка/Юнит" #: templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" @@ -11292,7 +11287,7 @@ msgstr "Автор" #: templates/extras/admin/plugins_list.html:25 msgid "Author Email" -msgstr "Электронная почта автора" +msgstr "Почта" #: templates/extras/admin/plugins_list.html:27 #: templates/vpn/ipsecprofile.html:47 vpn/forms/bulk_edit.py:140 @@ -11357,7 +11352,7 @@ msgstr "Видимый пользовательский интерфейс" #: templates/extras/customfield.html:86 msgid "UI Editable" -msgstr "Редактируемый пользовательский интерфейс" +msgstr "Редактируемый UI" #: templates/extras/customfield.html:108 msgid "Validation Rules" @@ -11422,15 +11417,15 @@ msgstr "Пока не добавлено ни одной закладки." #: templates/extras/dashboard/widgets/objectcounts.html:15 msgid "No permission" -msgstr "Нет разрешения" +msgstr "Нет прав" #: templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" -msgstr "Нет разрешения на просмотр этого контента" +msgstr "Нет прав на просмотр этого контента" #: templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" -msgstr "Невозможно загрузить содержимое. Неверное имя представления" +msgstr "Невозможно загрузить содержимое. Неверное имя" #: templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" @@ -11486,7 +11481,7 @@ msgstr "Уровень" #: templates/extras/htmx/report_result.html:46 #: templates/extras/htmx/script_result.html:27 msgid "Message" -msgstr "Послание" +msgstr "Сообщение" #: templates/extras/htmx/script_result.html:21 msgid "Script Log" @@ -11571,7 +11566,7 @@ msgstr "Разница" #: templates/extras/objectchange.html:87 msgid "Previous" -msgstr "Предыдущее" +msgstr "Предыдущий" #: templates/extras/objectchange.html:90 msgid "Next" @@ -11614,7 +11609,7 @@ msgstr "Этот отчет недействителен и не может бы #: templates/extras/report.html:23 templates/extras/report_list.html:88 msgid "Run Again" -msgstr "Беги снова" +msgstr "Повторить" #: templates/extras/report.html:25 templates/extras/report_list.html:90 msgid "Run Report" @@ -11622,7 +11617,7 @@ msgstr "Запустить отчет" #: templates/extras/report.html:36 msgid "Last run" -msgstr "Последний забег" +msgstr "Последний запуск" #: templates/extras/report/base.html:30 msgid "Report" @@ -11630,7 +11625,7 @@ msgstr "Отчет" #: templates/extras/report_list.html:48 templates/extras/script_list.html:54 msgid "Last Run" -msgstr "Последний забег" +msgstr "Последний запуск" #: templates/extras/report_list.html:70 templates/extras/script_list.html:77 msgid "Never" @@ -11659,7 +11654,7 @@ msgstr "" #: templates/extras/script.html:13 msgid "You do not have permission to run scripts" -msgstr "У вас нет разрешения на запуск сценариев" +msgstr "У вас нет разрешения на запуск скриптов" #: templates/extras/script.html:37 msgid "Run Script" @@ -11676,7 +11671,7 @@ msgstr "" #: templates/extras/script_list.html:91 msgid "No Scripts Found" -msgstr "Сценарии не найдены" +msgstr "Скрипты не найдены" #: templates/extras/script_list.html:94 #, python-format @@ -11689,11 +11684,11 @@ msgstr "" #: templates/extras/script_result.html:42 msgid "Log" -msgstr "журнал" +msgstr "Журнал" #: templates/extras/tag.html:35 msgid "Tagged Items" -msgstr "Помеченные товары" +msgstr "Элементы с тэгом" #: templates/extras/tag.html:47 msgid "Allowed Object Types" @@ -11729,7 +11724,7 @@ msgstr "Дополнительные заголовки" #: templates/extras/webhook.html:85 msgid "Body Template" -msgstr "Шаблон тела" +msgstr "Шаблон тела запроса" #: templates/generic/bulk_add_component.html:15 msgid "Bulk Creation" @@ -11826,8 +11821,8 @@ msgid "" "%(example)s would identify a VRF by its route distinguisher." msgstr "" "На связанные объекты можно ссылаться с помощью любого уникального атрибута. " -"Например, %(example)s будет идентифицировать VRF по " -"идентификатору маршрута." +"Например, %(example)s будет идентифицировать VRF по индикатору " +"маршрута." #: templates/generic/bulk_remove.html:13 msgid "Confirm Bulk Removal" @@ -12015,11 +12010,11 @@ msgstr "Теги не назначены" #: templates/inc/profile_button.html:12 templates/inc/profile_button.html:62 msgid "Dark Mode" -msgstr "Темный режим" +msgstr "Темная тема" #: templates/inc/profile_button.html:45 msgid "Log Out" -msgstr "Выйти из системы" +msgstr "Выйти" #: templates/inc/profile_button.html:53 msgid "Log In" @@ -12131,7 +12126,7 @@ msgstr "Назначение интерфейса" #: templates/ipam/ipaddress_edit.html:74 msgid "NAT IP (Inside" -msgstr "NAT IP (внутренний)" +msgstr "NAT IP (внутренний" #: templates/ipam/iprange.html:20 msgid "Starting Address" @@ -12175,7 +12170,7 @@ msgstr "Сетевая маска" #: templates/ipam/prefix.html:195 msgid "Wildcard Mask" -msgstr "Маска подстановочных знаков" +msgstr "Обратная маска" #: templates/ipam/prefix.html:199 msgid "Broadcast Address" @@ -12211,7 +12206,7 @@ msgstr "Импорт VRF" #: templates/ipam/routetarget.html:49 msgid "Exporting VRFs" -msgstr "Экспорт файлов VRF" +msgstr "Экспорт VRF" #: templates/ipam/routetarget.html:60 msgid "Importing L2VPNs" @@ -12248,11 +12243,11 @@ msgstr "Добавить VLAN" #: templates/ipam/vlangroup.html:43 msgid "Permitted VIDs" -msgstr "Разрешенные видео" +msgstr "Разрешенные VID" #: templates/ipam/vrf.html:19 msgid "Route Distinguisher" -msgstr "Дифференцировщик маршрута" +msgstr "RD" #: templates/ipam/vrf.html:32 msgid "Unique IP Space" @@ -12277,11 +12272,11 @@ msgstr "Переключить цветовой режим" #: templates/media_failure.html:7 msgid "Static Media Failure - NetBox" -msgstr "Сбой статического носителя - NetBox" +msgstr "Ошибка статичных медиа - NetBox" #: templates/media_failure.html:21 msgid "Static Media Failure" -msgstr "Сбой статического носителя" +msgstr "Ошибка статичных медиа" #: templates/media_failure.html:23 msgid "The following static media file failed to load" @@ -12297,9 +12292,9 @@ msgid "" " 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 #, python-format @@ -12308,10 +12303,8 @@ msgid "" "the STATIC_ROOT path. Refer to the " "installation documentation for further guidance." msgstr "" -"Служба HTTP (например, nginx или Apache) настроена на обслуживание файлов из" -" СТАТИЧЕСКИЙ КОРЕНЬ путь. Обратитесь к документация по установке для получения " -"дополнительных рекомендаций." +"Служба HTTP (например, nginx или Apache) настроена на обслуживание файлов из STATIC_ROOT\n" +" путь. Обратитесь к документация по установке для получения дополнительных рекомендаций." #: templates/media_failure.html:47 #, python-format @@ -12438,7 +12431,7 @@ msgstr "Дисковое пространство" #: templates/virtualization/virtualmachine.html:147 msgctxt "Abbreviation for gigabyte" msgid "GB" -msgstr "ГИГАБАЙТ" +msgstr "ГБ" #: templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" @@ -12506,7 +12499,7 @@ msgstr "Версия IKE" #: templates/vpn/ikepolicy.html:30 msgid "Pre-Shared Key" -msgstr "Предварительный общий ключ" +msgstr "Pre-Shared ключ" #: templates/vpn/ikepolicy.html:34 #: templates/wireless/inc/authentication_attrs.html:21 @@ -12585,15 +12578,15 @@ msgstr "Атрибуты L2VPN" #: templates/vpn/l2vpn.html:65 templates/vpn/tunnel.html:81 msgid "Add a Termination" -msgstr "Добавить увольнение" +msgstr "Добавить окончание" #: templates/vpn/l2vpntermination_edit.html:9 msgid "L2VPN Termination" -msgstr "Прекращение действия L2VPN" +msgstr "L2VPN окончания" #: templates/vpn/tunnel.html:9 msgid "Add Termination" -msgstr "Добавить прекращение" +msgstr "Добавить окончание" #: templates/vpn/tunnel.html:38 vpn/forms/bulk_edit.py:48 #: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:56 @@ -12622,7 +12615,7 @@ msgstr "Туннельная группа" #: templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" -msgstr "Прекращение туннеля" +msgstr "Окончание Туннеля" #: templates/vpn/tunneltermination.html:36 vpn/forms/bulk_import.py:107 #: vpn/forms/model_forms.py:101 vpn/forms/model_forms.py:137 @@ -12632,7 +12625,7 @@ msgstr "Внешний IP-адрес" #: templates/vpn/tunneltermination.html:53 msgid "Peer Terminations" -msgstr "Прекращение контрактов со стороны коллег" +msgstr "Конечные Точки" #: templates/wireless/inc/authentication_attrs.html:13 msgid "Cipher" @@ -12640,7 +12633,7 @@ msgstr "Шифр" #: templates/wireless/inc/authentication_attrs.html:17 msgid "PSK" -msgstr "ПСК" +msgstr "PSK" #: templates/wireless/inc/wirelesslink_interface.html:35 #: templates/wireless/inc/wirelesslink_interface.html:45 @@ -12675,7 +12668,7 @@ msgstr "Свойства ссылки" #: tenancy/choices.py:19 msgid "Tertiary" -msgstr "Высшее образование" +msgstr "Третичный" #: tenancy/choices.py:20 msgid "Inactive" @@ -12743,7 +12736,7 @@ msgstr "контактные роли" #: tenancy/models/contacts.py:68 msgid "title" -msgstr "титул" +msgstr "название" #: tenancy/models/contacts.py:73 msgid "phone" @@ -12751,7 +12744,7 @@ msgstr "телефон" #: tenancy/models/contacts.py:78 msgid "email" -msgstr "письмо" +msgstr "email" #: tenancy/models/contacts.py:87 msgid "link" @@ -12896,7 +12889,7 @@ msgid "" msgstr "" "Разрешенные сети IPv4/IPv6, из которых можно использовать токен. Оставьте " "поле пустым, чтобы не было ограничений. Пример: 10.1.1.0/24, " -"192.168.10.16/32, 2001 год: дБ 8:1:/64" +"192.168.10.16/32, 2001:DB8:1::/64" #: users/forms/model_forms.py:177 msgid "Confirm password" @@ -12947,102 +12940,102 @@ msgstr "Ограничения для этого типа объектов не msgid "Invalid filter for {model}: {error}" msgstr "Неверный фильтр для {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "пользователя" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "пользователей" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "Пользователь с таким именем уже существует." -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "группа" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "групп" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "пользовательские настройки" -#: users/models.py:174 +#: users/models.py:175 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Ключ '{path}'является листовым узлом; не может назначать новые ключи" -#: users/models.py:186 +#: users/models.py:187 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Ключ '{path}'— словарь; не может присвоить значение, отличное от словаря" -#: users/models.py:252 +#: users/models.py:253 msgid "expires" msgstr "истекает" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "последний раз использованный" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "ключ" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "запись включена" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "" "Разрешить операции создания/обновления/удаления с использованием этого ключа" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "разрешенные IP-адреса" -#: users/models.py:283 +#: users/models.py:284 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: БД 8:1: /64»" +"192.168.10.16/32, 2001:DB8:1::/64»" -#: users/models.py:291 +#: users/models.py:296 msgid "token" msgstr "токен" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "токены" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "Список действий, предусмотренных этим разрешением" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "ограничения" -#: users/models.py:379 +#: users/models.py:384 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Фильтр Queryset, соответствующий применимым объектам выбранного типа (типов)" -#: users/models.py:386 +#: users/models.py:391 msgid "permission" msgstr "разрешение" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "разрешения" @@ -13065,7 +13058,7 @@ msgstr "Роза" #: utilities/choices.py:139 msgid "Fuchsia" -msgstr "фуксия" +msgstr "Фуксия" #: utilities/choices.py:141 msgid "Dark Purple" @@ -13077,7 +13070,7 @@ msgstr "Светло-синий" #: utilities/choices.py:147 msgid "Aqua" -msgstr "вода" +msgstr "Бирюзовый" #: utilities/choices.py:148 msgid "Dark Green" @@ -13093,7 +13086,7 @@ msgstr "Лайм" #: utilities/choices.py:153 msgid "Amber" -msgstr "янтарь" +msgstr "Янтарь" #: utilities/choices.py:155 msgid "Dark Orange" @@ -13101,7 +13094,7 @@ msgstr "Темно-оранжевый" #: utilities/choices.py:156 msgid "Brown" -msgstr "коричневый" +msgstr "Коричневый" #: utilities/choices.py:157 msgid "Light Grey" @@ -13312,45 +13305,54 @@ msgstr "" "Этот объект был изменен с момента визуализации формы. Подробности см. в " "журнале изменений объекта." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Ассортимент»{value}\"недействительно." -#: utilities/forms/utils.py:225 +#: 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 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Повторяющийся или конфликтующий заголовок столбца для»{field}»" -#: utilities/forms/utils.py:231 +#: utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Повторяющийся или конфликтующий заголовок столбца для»{header}»" -#: utilities/forms/utils.py:240 +#: 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:263 +#: utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Неожиданный заголовок столбца»{field}«найдено." -#: utilities/forms/utils.py:265 +#: 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:269 +#: 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:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Обязательный заголовок столбца»{header}\"не найден." @@ -13407,7 +13409,7 @@ msgstr "Закладка" #: utilities/templates/buttons/clone.html:4 msgid "Clone" -msgstr "Клон" +msgstr "Клонировать" #: utilities/templates/buttons/export.html:4 msgid "Export" @@ -13467,7 +13469,7 @@ msgstr "Ничего не назначено" #: utilities/templates/widgets/markdown_input.html:6 msgid "Write" -msgstr "Напишите" +msgstr "Текст" #: utilities/templates/widgets/markdown_input.html:20 msgid "Testing" @@ -13768,19 +13770,19 @@ msgstr "IP-адрес в IP-адресе" #: vpn/choices.py:34 msgid "GRE" -msgstr "СЕРЫЙ" +msgstr "GRE" #: vpn/choices.py:56 msgid "Hub" -msgstr "хаб" +msgstr "Hub" #: vpn/choices.py:57 msgid "Spoke" -msgstr "Говорил" +msgstr "Spoke" #: vpn/choices.py:80 msgid "Aggressive" -msgstr "агрессивный" +msgstr "Агрессивный" #: vpn/choices.py:81 msgid "Main" @@ -13788,7 +13790,7 @@ msgstr "Главная" #: vpn/choices.py:92 msgid "Pre-shared keys" -msgstr "Предварительно общие ключи" +msgstr "PSK" #: vpn/choices.py:93 msgid "Certificates" @@ -13891,7 +13893,7 @@ msgstr "Группа туннелей" #: vpn/forms/bulk_edit.py:116 vpn/models/crypto.py:47 msgid "SA lifetime" -msgstr "На всю жизнь" +msgstr "Время жизни SA" #: vpn/forms/bulk_edit.py:150 wireless/forms/bulk_edit.py:78 #: wireless/forms/bulk_edit.py:125 wireless/forms/filtersets.py:63 @@ -13966,7 +13968,7 @@ msgstr "Назначенный интерфейс (устройство или #: vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" -"Невозможно одновременно импортировать терминалы интерфейса устройства и " +"Невозможно одновременно сетевые окончания интерфейса устройства и " "виртуальной машины." #: vpn/forms/bulk_import.py:336 @@ -13990,17 +13992,22 @@ msgstr "Предложение" msgid "Assigned Object Type" msgstr "Назначенный тип объекта" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "Туннельный интерфейс" + #: vpn/forms/model_forms.py:147 msgid "First Termination" -msgstr "Первое увольнение" +msgstr "Первая точка" #: vpn/forms/model_forms.py:151 msgid "Second Termination" -msgstr "Второе расторжение" +msgstr "Вторая точка" #: vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." -msgstr "Этот параметр необходим при определении прекращения." +msgstr "Этот параметр необходим при определении точки." #: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:355 msgid "Policy" @@ -14102,11 +14109,11 @@ msgstr "Профили IPsec" #: vpn/models/l2vpn.py:116 msgid "L2VPN termination" -msgstr "Завершение работы L2VPN" +msgstr "L2VPN соединение" #: vpn/models/l2vpn.py:117 msgid "L2VPN terminations" -msgstr "Прекращения работы L2VPN" +msgstr "L2VPN соединения" #: vpn/models/l2vpn.py:135 #, python-brace-format @@ -14140,7 +14147,7 @@ msgstr "идентификатор туннеля" #: vpn/models/tunnels.py:94 msgid "tunnel" -msgstr "тоннель" +msgstr "туннель" #: vpn/models/tunnels.py:95 msgid "tunnels" @@ -14156,7 +14163,7 @@ msgstr "завершение туннеля" #: vpn/models/tunnels.py:157 msgid "tunnel terminations" -msgstr "терминалы туннелей" +msgstr "точки подключения туннеля" #: vpn/models/tunnels.py:174 #, python-brace-format @@ -14197,11 +14204,11 @@ msgstr "Родитель объекта" #: vpn/tables/l2vpn.py:74 msgid "Object Site" -msgstr "Объектный сайт" +msgstr "Сайт объекта" #: vpn/tables/tunnels.py:88 msgid "Host" -msgstr "Хозяин" +msgstr "Хост" #: wireless/choices.py:11 msgid "Access point" @@ -14209,7 +14216,7 @@ msgstr "Точка доступа" #: wireless/choices.py:12 msgid "Station" -msgstr "станция" +msgstr "Станция" #: wireless/choices.py:467 msgid "Open" @@ -14264,19 +14271,19 @@ msgstr "беспроводная локальная сеть" #: wireless/models.py:143 msgid "interface A" -msgstr "интерфейс A" +msgstr "Интерфейс A" #: wireless/models.py:150 msgid "interface B" -msgstr "интерфейс B" +msgstr "Интерфейс B" #: wireless/models.py:198 msgid "wireless link" -msgstr "беспроводная связь" +msgstr "беспроводное соединение" #: wireless/models.py:199 msgid "wireless links" -msgstr "беспроводные ссылки" +msgstr "беспроводные соединения" #: wireless/models.py:216 wireless/models.py:222 #, python-brace-format diff --git a/netbox/translations/tr/LC_MESSAGES/django.mo b/netbox/translations/tr/LC_MESSAGES/django.mo index f6d54ea9a..7e2a0e4b9 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 ce0eeec33..f5dcbcac7 100644 --- a/netbox/translations/tr/LC_MESSAGES/django.po +++ b/netbox/translations/tr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-02-21 19:48+0000\n" +"POT-Creation-Date: 2024-04-04 19:11+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" @@ -64,8 +64,8 @@ msgid "Your preferences have been updated." msgstr "Tercihleriniz güncellendi." #: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1419 -#: dcim/choices.py:1495 dcim/choices.py:1545 virtualization/choices.py:20 +#: dcim/choices.py:174 dcim/choices.py:220 dcim/choices.py:1425 +#: dcim/choices.py:1501 dcim/choices.py:1551 virtualization/choices.py:20 #: virtualization/choices.py:45 vpn/choices.py:18 msgid "Planned" msgstr "Planlanan" @@ -75,8 +75,8 @@ msgid "Provisioning" msgstr "Tedarik" #: circuits/choices.py:23 dcim/choices.py:22 dcim/choices.py:103 -#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1494 -#: dcim/choices.py:1544 extras/tables/tables.py:380 ipam/choices.py:31 +#: dcim/choices.py:173 dcim/choices.py:219 dcim/choices.py:1500 +#: dcim/choices.py:1550 extras/tables/tables.py:380 ipam/choices.py:31 #: ipam/choices.py:49 ipam/choices.py:69 ipam/choices.py:154 #: templates/extras/configcontext.html:26 templates/users/user.html:38 #: users/forms/bulk_edit.py:36 virtualization/choices.py:22 @@ -85,7 +85,7 @@ msgid "Active" msgstr "Aktif" #: circuits/choices.py:24 dcim/choices.py:172 dcim/choices.py:218 -#: dcim/choices.py:1493 dcim/choices.py:1546 virtualization/choices.py:24 +#: dcim/choices.py:1499 dcim/choices.py:1552 virtualization/choices.py:24 #: virtualization/choices.py:43 msgid "Offline" msgstr "Çevrim dışı" @@ -98,7 +98,7 @@ msgstr "Hazırlıktan Kaldırma" msgid "Decommissioned" msgstr "Hizmet dışı bırakıldı" -#: circuits/filtersets.py:29 circuits/filtersets.py:184 dcim/filtersets.py:124 +#: circuits/filtersets.py:29 circuits/filtersets.py:190 dcim/filtersets.py:124 #: dcim/filtersets.py:185 dcim/filtersets.py:260 dcim/filtersets.py:369 #: dcim/filtersets.py:903 dcim/filtersets.py:1207 dcim/filtersets.py:1702 #: dcim/filtersets.py:1945 dcim/filtersets.py:2003 ipam/filtersets.py:305 @@ -107,7 +107,7 @@ msgstr "Hizmet dışı bırakıldı" msgid "Region (ID)" msgstr "Bölge (ID)" -#: circuits/filtersets.py:36 circuits/filtersets.py:191 dcim/filtersets.py:130 +#: circuits/filtersets.py:36 circuits/filtersets.py:197 dcim/filtersets.py:130 #: dcim/filtersets.py:192 dcim/filtersets.py:267 dcim/filtersets.py:376 #: dcim/filtersets.py:910 dcim/filtersets.py:1214 dcim/filtersets.py:1709 #: dcim/filtersets.py:1952 dcim/filtersets.py:2010 extras/filtersets.py:414 @@ -117,7 +117,7 @@ msgstr "Bölge (ID)" msgid "Region (slug)" msgstr "Bölge (kısa ad)" -#: circuits/filtersets.py:42 circuits/filtersets.py:197 dcim/filtersets.py:198 +#: circuits/filtersets.py:42 circuits/filtersets.py:203 dcim/filtersets.py:198 #: dcim/filtersets.py:273 dcim/filtersets.py:382 dcim/filtersets.py:916 #: dcim/filtersets.py:1220 dcim/filtersets.py:1715 dcim/filtersets.py:1958 #: dcim/filtersets.py:2016 ipam/filtersets.py:318 ipam/filtersets.py:909 @@ -125,7 +125,7 @@ msgstr "Bölge (kısa ad)" msgid "Site group (ID)" msgstr "Site grubu (ID)" -#: circuits/filtersets.py:49 circuits/filtersets.py:204 dcim/filtersets.py:205 +#: circuits/filtersets.py:49 circuits/filtersets.py:210 dcim/filtersets.py:205 #: dcim/filtersets.py:280 dcim/filtersets.py:389 dcim/filtersets.py:923 #: dcim/filtersets.py:1227 dcim/filtersets.py:1722 dcim/filtersets.py:1965 #: dcim/filtersets.py:2023 extras/filtersets.py:420 ipam/filtersets.py:325 @@ -135,7 +135,7 @@ msgid "Site group (slug)" msgstr "Site grubu (kısa ad)" #: circuits/filtersets.py:54 circuits/forms/bulk_import.py:117 -#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:171 +#: circuits/forms/filtersets.py:47 circuits/forms/filtersets.py:167 #: circuits/forms/model_forms.py:137 dcim/forms/bulk_edit.py:166 #: dcim/forms/bulk_edit.py:238 dcim/forms/bulk_edit.py:570 #: dcim/forms/bulk_edit.py:763 dcim/forms/bulk_import.py:130 @@ -158,8 +158,8 @@ msgstr "Site grubu (kısa ad)" #: ipam/forms/bulk_import.py:170 ipam/forms/bulk_import.py:437 #: ipam/forms/filtersets.py:152 ipam/forms/filtersets.py:226 #: ipam/forms/filtersets.py:417 ipam/forms/filtersets.py:470 -#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:548 -#: ipam/forms/model_forms.py:640 ipam/tables/ip.py:244 +#: ipam/forms/model_forms.py:206 ipam/forms/model_forms.py:552 +#: ipam/forms/model_forms.py:644 ipam/tables/ip.py:244 #: ipam/tables/vlans.py:114 ipam/tables/vlans.py:216 #: templates/circuits/circuittermination_edit.html:20 #: templates/circuits/inc/circuit_termination.html:33 @@ -181,13 +181,13 @@ msgstr "Site grubu (kısa ad)" #: virtualization/forms/model_forms.py:107 #: virtualization/forms/model_forms.py:174 #: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:53 vpn/forms/filtersets.py:262 +#: virtualization/tables/virtualmachines.py:62 vpn/forms/filtersets.py:262 #: wireless/forms/model_forms.py:77 wireless/forms/model_forms.py:117 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:60 circuits/filtersets.py:215 -#: circuits/filtersets.py:252 dcim/filtersets.py:215 dcim/filtersets.py:290 +#: circuits/filtersets.py:60 circuits/filtersets.py:221 +#: circuits/filtersets.py:258 dcim/filtersets.py:215 dcim/filtersets.py:290 #: dcim/filtersets.py:363 extras/filtersets.py:436 ipam/filtersets.py:215 #: ipam/filtersets.py:335 ipam/filtersets.py:926 #: virtualization/filtersets.py:75 virtualization/filtersets.py:203 @@ -199,33 +199,39 @@ msgstr "Site (kısa ad)" msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:87 circuits/filtersets.py:114 -#: circuits/filtersets.py:148 -msgid "Provider (ID)" -msgstr "Sağlayıcı (ID)" +#: circuits/filtersets.py:71 circuits/forms/filtersets.py:27 +#: ipam/forms/model_forms.py:158 ipam/models/asns.py:108 +#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +msgid "ASN" +msgstr "ASN" #: circuits/filtersets.py:93 circuits/filtersets.py:120 #: circuits/filtersets.py:154 +msgid "Provider (ID)" +msgstr "Sağlayıcı (ID)" + +#: circuits/filtersets.py:99 circuits/filtersets.py:126 +#: circuits/filtersets.py:160 msgid "Provider (slug)" msgstr "Sağlayıcı (kısa ad)" -#: circuits/filtersets.py:159 +#: circuits/filtersets.py:165 msgid "Provider account (ID)" msgstr "Sağlayıcı hesabı (ID)" -#: circuits/filtersets.py:164 +#: circuits/filtersets.py:170 msgid "Provider network (ID)" msgstr "Sağlayıcı ağı (ID)" -#: circuits/filtersets.py:168 +#: circuits/filtersets.py:174 msgid "Circuit type (ID)" msgstr "Devre tipi (ID)" -#: circuits/filtersets.py:174 +#: circuits/filtersets.py:180 msgid "Circuit type (slug)" msgstr "Devre tipi (kısa ad)" -#: circuits/filtersets.py:209 circuits/filtersets.py:246 +#: circuits/filtersets.py:215 circuits/filtersets.py:252 #: dcim/filtersets.py:209 dcim/filtersets.py:284 dcim/filtersets.py:357 #: dcim/filtersets.py:927 dcim/filtersets.py:1232 dcim/filtersets.py:1727 #: dcim/filtersets.py:1969 dcim/filtersets.py:2028 ipam/filtersets.py:209 @@ -235,13 +241,13 @@ msgstr "Devre tipi (kısa ad)" msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:238 core/filtersets.py:73 core/filtersets.py:132 +#: circuits/filtersets.py:244 core/filtersets.py:73 core/filtersets.py:132 #: dcim/filtersets.py:640 dcim/filtersets.py:1201 dcim/filtersets.py:2076 #: extras/filtersets.py:40 extras/filtersets.py:69 extras/filtersets.py:101 #: extras/filtersets.py:140 extras/filtersets.py:168 extras/filtersets.py:195 #: extras/filtersets.py:226 extras/filtersets.py:295 extras/filtersets.py:343 #: extras/filtersets.py:403 extras/filtersets.py:562 extras/filtersets.py:604 -#: extras/filtersets.py:645 ipam/forms/model_forms.py:430 +#: extras/filtersets.py:645 ipam/forms/model_forms.py:416 #: netbox/filtersets.py:275 netbox/forms/__init__.py:23 #: netbox/forms/base.py:163 templates/htmx/object_selector.html:28 #: templates/inc/filter_list.html:53 templates/ipam/ipaddress_assign.html:32 @@ -251,7 +257,7 @@ msgstr "Site (ID)" msgid "Search" msgstr "Arama" -#: circuits/filtersets.py:242 circuits/forms/bulk_edit.py:167 +#: circuits/filtersets.py:248 circuits/forms/bulk_edit.py:167 #: circuits/forms/model_forms.py:110 circuits/forms/model_forms.py:132 #: dcim/forms/connections.py:66 templates/circuits/circuit.html:15 #: templates/dcim/inc/cable_termination.html:55 @@ -259,11 +265,11 @@ msgstr "Arama" msgid "Circuit" msgstr "Devre" -#: circuits/filtersets.py:256 +#: circuits/filtersets.py:262 msgid "ProviderNetwork (ID)" msgstr "Sağlayıcı Ağı (ID)" -#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:56 +#: circuits/forms/bulk_edit.py:25 circuits/forms/filtersets.py:52 #: circuits/forms/model_forms.py:26 circuits/tables/providers.py:33 #: dcim/forms/bulk_edit.py:126 dcim/forms/filtersets.py:187 #: dcim/forms/model_forms.py:126 dcim/tables/sites.py:94 @@ -374,8 +380,8 @@ msgstr "Açıklama" #: circuits/forms/bulk_edit.py:46 circuits/forms/bulk_edit.py:68 #: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:35 #: circuits/forms/bulk_import.py:50 circuits/forms/bulk_import.py:76 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 +#: circuits/forms/filtersets.py:66 circuits/forms/filtersets.py:84 +#: circuits/forms/filtersets.py:112 circuits/forms/filtersets.py:127 #: circuits/forms/model_forms.py:32 circuits/forms/model_forms.py:44 #: circuits/forms/model_forms.py:58 circuits/forms/model_forms.py:92 #: circuits/tables/circuits.py:55 circuits/tables/providers.py:72 @@ -387,18 +393,18 @@ msgstr "Açıklama" msgid "Provider" msgstr "Sağlayıcı" -#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:91 +#: circuits/forms/bulk_edit.py:75 circuits/forms/filtersets.py:87 #: templates/circuits/providernetwork.html:31 msgid "Service ID" msgstr "Servis ID" -#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:107 +#: circuits/forms/bulk_edit.py:95 circuits/forms/filtersets.py:103 #: dcim/forms/bulk_edit.py:204 dcim/forms/bulk_edit.py:500 #: dcim/forms/bulk_edit.py:694 dcim/forms/bulk_edit.py:1063 #: dcim/forms/bulk_edit.py:1090 dcim/forms/bulk_edit.py:1562 #: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1353 -#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:722 -#: dcim/tables/devices.py:782 dcim/tables/devices.py:1009 +#: dcim/forms/filtersets.py:1374 dcim/tables/devices.py:726 +#: dcim/tables/devices.py:786 dcim/tables/devices.py:1013 #: dcim/tables/devicetypes.py:245 dcim/tables/devicetypes.py:260 #: dcim/tables/racks.py:32 extras/forms/bulk_edit.py:259 #: extras/tables/tables.py:328 templates/circuits/circuittype.html:33 @@ -410,7 +416,7 @@ msgid "Color" msgstr "Renk" #: circuits/forms/bulk_edit.py:113 circuits/forms/bulk_import.py:89 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:17 +#: circuits/forms/filtersets.py:122 core/forms/bulk_edit.py:17 #: core/forms/filtersets.py:29 core/tables/data.py:20 core/tables/jobs.py:18 #: dcim/forms/bulk_edit.py:281 dcim/forms/bulk_edit.py:672 #: dcim/forms/bulk_edit.py:811 dcim/forms/bulk_edit.py:879 @@ -429,7 +435,7 @@ msgstr "Renk" #: dcim/forms/filtersets.py:1253 dcim/forms/filtersets.py:1348 #: dcim/forms/filtersets.py:1369 dcim/forms/object_import.py:89 #: dcim/forms/object_import.py:118 dcim/forms/object_import.py:150 -#: dcim/tables/devices.py:211 dcim/tables/devices.py:838 +#: dcim/tables/devices.py:211 dcim/tables/devices.py:842 #: dcim/tables/power.py:77 extras/forms/bulk_import.py:39 #: extras/tables/tables.py:278 extras/tables/tables.py:350 #: extras/tables/tables.py:448 netbox/tables/tables.py:234 @@ -454,12 +460,12 @@ msgid "Type" msgstr "Tür" #: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:82 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:97 +#: circuits/forms/filtersets.py:135 circuits/forms/model_forms.py:97 msgid "Provider account" msgstr "Sağlayıcı hesabı" #: circuits/forms/bulk_edit.py:131 circuits/forms/bulk_import.py:95 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:34 +#: circuits/forms/filtersets.py:146 core/forms/filtersets.py:34 #: core/forms/filtersets.py:75 core/tables/data.py:23 core/tables/jobs.py:26 #: dcim/forms/bulk_edit.py:104 dcim/forms/bulk_edit.py:179 #: dcim/forms/bulk_edit.py:260 dcim/forms/bulk_edit.py:593 @@ -473,8 +479,8 @@ msgstr "Sağlayıcı hesabı" #: dcim/forms/filtersets.py:281 dcim/forms/filtersets.py:726 #: dcim/forms/filtersets.py:835 dcim/forms/filtersets.py:871 #: dcim/forms/filtersets.py:972 dcim/forms/filtersets.py:1083 -#: dcim/tables/devices.py:173 dcim/tables/devices.py:841 -#: dcim/tables/devices.py:1069 dcim/tables/modules.py:69 +#: dcim/tables/devices.py:173 dcim/tables/devices.py:845 +#: dcim/tables/devices.py:1073 dcim/tables/modules.py:69 #: dcim/tables/power.py:74 dcim/tables/racks.py:66 dcim/tables/sites.py:82 #: dcim/tables/sites.py:133 ipam/forms/bulk_edit.py:240 #: ipam/forms/bulk_edit.py:289 ipam/forms/bulk_edit.py:337 @@ -482,7 +488,7 @@ msgstr "Sağlayıcı hesabı" #: ipam/forms/bulk_import.py:256 ipam/forms/bulk_import.py:292 #: ipam/forms/bulk_import.py:458 ipam/forms/filtersets.py:205 #: ipam/forms/filtersets.py:270 ipam/forms/filtersets.py:341 -#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:449 +#: ipam/forms/filtersets.py:482 ipam/forms/model_forms.py:435 #: ipam/tables/ip.py:236 ipam/tables/ip.py:309 ipam/tables/ip.py:359 #: ipam/tables/ip.py:421 ipam/tables/ip.py:448 ipam/tables/vlans.py:122 #: ipam/tables/vlans.py:227 templates/circuits/circuit.html:35 @@ -503,7 +509,7 @@ msgstr "Sağlayıcı hesabı" #: virtualization/forms/bulk_import.py:80 #: virtualization/forms/filtersets.py:61 #: virtualization/forms/filtersets.py:156 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:50 vpn/forms/bulk_edit.py:38 +#: virtualization/tables/virtualmachines.py:59 vpn/forms/bulk_edit.py:38 #: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:46 #: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:42 #: wireless/forms/bulk_edit.py:104 wireless/forms/bulk_import.py:43 @@ -514,7 +520,7 @@ msgid "Status" msgstr "Durum" #: circuits/forms/bulk_edit.py:137 circuits/forms/bulk_import.py:100 -#: circuits/forms/filtersets.py:119 dcim/forms/bulk_edit.py:120 +#: circuits/forms/filtersets.py:115 dcim/forms/bulk_edit.py:120 #: dcim/forms/bulk_edit.py:185 dcim/forms/bulk_edit.py:255 #: dcim/forms/bulk_edit.py:366 dcim/forms/bulk_edit.py:583 #: dcim/forms/bulk_edit.py:684 dcim/forms/bulk_edit.py:1590 @@ -572,15 +578,15 @@ msgstr "Durum" msgid "Tenant" msgstr "Kiracı" -#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:174 +#: circuits/forms/bulk_edit.py:142 circuits/forms/filtersets.py:170 msgid "Install date" msgstr "Yükleme tarihi" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:179 +#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:175 msgid "Termination date" msgstr "Fesih tarihi" -#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:186 +#: circuits/forms/bulk_edit.py:153 circuits/forms/filtersets.py:182 msgid "Commit rate (Kbps)" msgstr "Taahhüt oranı (Kbps)" @@ -613,7 +619,7 @@ msgstr "Atanan sağlayıcı" #: circuits/forms/bulk_import.py:70 dcim/forms/bulk_import.py:178 #: dcim/forms/bulk_import.py:388 dcim/forms/bulk_import.py:1108 -#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:229 +#: dcim/forms/bulk_import.py:1187 extras/forms/bulk_import.py:235 msgid "RGB color in hexadecimal. Example:" msgstr "Onaltılık değerde RGB rengi. Örnek:" @@ -649,12 +655,12 @@ msgstr "Operasyonel durum" msgid "Assigned tenant" msgstr "Atanan kiracı" -#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:147 +#: circuits/forms/bulk_import.py:123 circuits/forms/filtersets.py:143 #: circuits/forms/model_forms.py:143 msgid "Provider network" msgstr "Sağlayıcı ağı" -#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:118 +#: circuits/forms/filtersets.py:26 circuits/forms/filtersets.py:114 #: dcim/forms/bulk_edit.py:247 dcim/forms/bulk_edit.py:345 #: dcim/forms/bulk_edit.py:575 dcim/forms/bulk_edit.py:622 #: dcim/forms/bulk_edit.py:772 dcim/forms/bulk_import.py:189 @@ -678,7 +684,7 @@ msgstr "Sağlayıcı ağı" #: extras/filtersets.py:441 extras/forms/filtersets.py:328 #: ipam/forms/bulk_edit.py:456 ipam/forms/filtersets.py:168 #: ipam/forms/filtersets.py:400 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:560 +#: ipam/forms/filtersets.py:448 ipam/forms/model_forms.py:564 #: templates/dcim/device.html:26 templates/dcim/device_edit.html:30 #: templates/dcim/inc/cable_termination.html:12 #: templates/dcim/location.html:27 templates/dcim/powerpanel.html:27 @@ -688,13 +694,7 @@ msgstr "Sağlayıcı ağı" msgid "Location" msgstr "Konum" -#: circuits/forms/filtersets.py:27 ipam/forms/model_forms.py:158 -#: ipam/models/asns.py:108 ipam/models/asns.py:125 ipam/tables/asn.py:41 -#: templates/ipam/asn.html:20 -msgid "ASN" -msgstr "ASN" - -#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:120 +#: circuits/forms/filtersets.py:28 circuits/forms/filtersets.py:116 #: dcim/forms/filtersets.py:136 dcim/forms/filtersets.py:150 #: dcim/forms/filtersets.py:166 dcim/forms/filtersets.py:198 #: dcim/forms/filtersets.py:249 dcim/forms/filtersets.py:334 @@ -707,7 +707,7 @@ msgstr "ASN" msgid "Contacts" msgstr "İletişim" -#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:157 +#: circuits/forms/filtersets.py:33 circuits/forms/filtersets.py:153 #: dcim/forms/bulk_edit.py:110 dcim/forms/bulk_edit.py:222 #: dcim/forms/bulk_edit.py:747 dcim/forms/bulk_import.py:92 #: dcim/forms/filtersets.py:70 dcim/forms/filtersets.py:177 @@ -722,7 +722,7 @@ msgstr "İletişim" #: ipam/forms/bulk_edit.py:205 ipam/forms/bulk_edit.py:437 #: ipam/forms/bulk_edit.py:509 ipam/forms/filtersets.py:212 #: ipam/forms/filtersets.py:407 ipam/forms/filtersets.py:456 -#: ipam/forms/model_forms.py:532 templates/dcim/device.html:18 +#: ipam/forms/model_forms.py:536 templates/dcim/device.html:18 #: templates/dcim/rack.html:19 templates/dcim/rackreservation.html:25 #: templates/dcim/region.html:26 templates/dcim/site.html:31 #: templates/ipam/prefix.html:50 templates/ipam/vlan.html:19 @@ -732,7 +732,7 @@ msgstr "İletişim" msgid "Region" msgstr "Bölge" -#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:162 +#: circuits/forms/filtersets.py:38 circuits/forms/filtersets.py:158 #: dcim/forms/bulk_edit.py:230 dcim/forms/bulk_edit.py:755 #: dcim/forms/filtersets.py:75 dcim/forms/filtersets.py:182 #: dcim/forms/filtersets.py:208 dcim/forms/filtersets.py:269 @@ -742,19 +742,15 @@ msgstr "Bölge" #: extras/filtersets.py:425 ipam/forms/bulk_edit.py:210 #: ipam/forms/bulk_edit.py:444 ipam/forms/bulk_edit.py:514 #: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:412 -#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:545 +#: ipam/forms/filtersets.py:461 ipam/forms/model_forms.py:549 #: virtualization/forms/bulk_edit.py:85 virtualization/forms/filtersets.py:68 #: virtualization/forms/filtersets.py:134 #: virtualization/forms/model_forms.py:101 msgid "Site group" msgstr "Site grubu" -#: circuits/forms/filtersets.py:51 -msgid "ASN (legacy)" -msgstr "ASN (eski)" - -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 +#: circuits/forms/filtersets.py:61 circuits/forms/filtersets.py:79 +#: circuits/forms/filtersets.py:98 circuits/forms/filtersets.py:113 #: core/forms/filtersets.py:63 dcim/forms/bulk_edit.py:718 #: dcim/forms/filtersets.py:164 dcim/forms/filtersets.py:196 #: dcim/forms/filtersets.py:825 dcim/forms/filtersets.py:920 @@ -780,7 +776,7 @@ msgstr "ASN (eski)" msgid "Attributes" msgstr "Öznitellikler" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:60 +#: circuits/forms/filtersets.py:69 circuits/tables/circuits.py:60 #: circuits/tables/providers.py:66 templates/circuits/circuit.html:23 #: templates/circuits/provideraccount.html:25 msgid "Account" @@ -801,7 +797,7 @@ msgstr "Devre Tipi" #: dcim/models/device_component_templates.py:491 #: dcim/models/device_component_templates.py:591 #: dcim/models/device_components.py:976 dcim/models/device_components.py:1050 -#: dcim/models/device_components.py:1166 dcim/models/devices.py:467 +#: dcim/models/device_components.py:1166 dcim/models/devices.py:469 #: dcim/models/racks.py:43 extras/models/tags.py:28 msgid "color" msgstr "renk" @@ -823,8 +819,8 @@ msgid "Unique circuit ID" msgstr "Benzersiz devre ID" #: circuits/models/circuits.py:67 core/models/data.py:55 -#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:641 -#: dcim/models/devices.py:1165 dcim/models/devices.py:1374 +#: core/models/jobs.py:85 dcim/models/cables.py:49 dcim/models/devices.py:643 +#: dcim/models/devices.py:1170 dcim/models/devices.py:1379 #: dcim/models/power.py:95 dcim/models/racks.py:97 dcim/models/sites.py:154 #: dcim/models/sites.py:266 ipam/models/ip.py:252 ipam/models/ip.py:521 #: ipam/models/ip.py:729 ipam/models/vlans.py:175 @@ -903,7 +899,7 @@ msgstr "Yama paneli kimliği ve bağlantı noktası numaraları" #: extras/models/models.py:541 extras/models/staging.py:31 #: extras/models/tags.py:32 netbox/models/__init__.py:109 #: netbox/models/__init__.py:144 netbox/models/__init__.py:190 -#: users/models.py:273 users/models.py:348 +#: users/models.py:274 users/models.py:353 #: virtualization/models/virtualmachines.py:282 msgid "description" msgstr "açıklama" @@ -930,8 +926,8 @@ 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:42 #: core/models/jobs.py:46 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:54 dcim/models/devices.py:581 -#: dcim/models/devices.py:1305 dcim/models/devices.py:1370 +#: dcim/models/device_components.py:54 dcim/models/devices.py:583 +#: dcim/models/devices.py:1310 dcim/models/devices.py:1375 #: dcim/models/power.py:39 dcim/models/power.py:91 dcim/models/racks.py:62 #: dcim/models/sites.py:138 extras/models/configs.py:36 #: extras/models/configs.py:215 extras/models/customfields.py:89 @@ -944,7 +940,7 @@ msgstr "Devre sonlandırma hem siteye hem de sağlayıcı ağına bağlanamaz." #: ipam/models/vrfs.py:79 netbox/models/__init__.py:136 #: netbox/models/__init__.py:180 tenancy/models/contacts.py:64 #: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models.py:344 virtualization/models/clusters.py:57 +#: users/models.py:349 virtualization/models/clusters.py:57 #: virtualization/models/virtualmachines.py:70 #: virtualization/models/virtualmachines.py:272 vpn/models/crypto.py:24 #: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 @@ -1002,13 +998,13 @@ msgstr "sağlayıcı ağları" #: core/tables/data.py:16 core/tables/jobs.py:14 dcim/forms/filtersets.py:60 #: dcim/forms/object_create.py:42 dcim/tables/devices.py:88 #: dcim/tables/devices.py:125 dcim/tables/devices.py:167 -#: dcim/tables/devices.py:318 dcim/tables/devices.py:400 -#: dcim/tables/devices.py:444 dcim/tables/devices.py:496 -#: dcim/tables/devices.py:548 dcim/tables/devices.py:668 -#: dcim/tables/devices.py:749 dcim/tables/devices.py:799 -#: dcim/tables/devices.py:865 dcim/tables/devices.py:980 -#: dcim/tables/devices.py:1000 dcim/tables/devices.py:1029 -#: dcim/tables/devices.py:1059 dcim/tables/devicetypes.py:32 +#: dcim/tables/devices.py:322 dcim/tables/devices.py:404 +#: dcim/tables/devices.py:448 dcim/tables/devices.py:500 +#: dcim/tables/devices.py:552 dcim/tables/devices.py:672 +#: dcim/tables/devices.py:753 dcim/tables/devices.py:803 +#: dcim/tables/devices.py:869 dcim/tables/devices.py:984 +#: dcim/tables/devices.py:1004 dcim/tables/devices.py:1033 +#: dcim/tables/devices.py:1063 dcim/tables/devicetypes.py:32 #: dcim/tables/power.py:22 dcim/tables/power.py:62 dcim/tables/racks.py:23 #: dcim/tables/racks.py:53 dcim/tables/sites.py:24 dcim/tables/sites.py:51 #: dcim/tables/sites.py:78 dcim/tables/sites.py:125 @@ -1074,9 +1070,9 @@ msgstr "sağlayıcı ağları" #: 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:45 -#: virtualization/tables/virtualmachines.py:119 -#: virtualization/tables/virtualmachines.py:172 vpn/tables/crypto.py:18 +#: virtualization/tables/virtualmachines.py:54 +#: virtualization/tables/virtualmachines.py:132 +#: virtualization/tables/virtualmachines.py:185 vpn/tables/crypto.py:18 #: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 #: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 #: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 @@ -1111,7 +1107,7 @@ msgstr "Taahhüt Oranı" #: circuits/tables/circuits.py:75 circuits/tables/providers.py:48 #: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1042 dcim/tables/devicetypes.py:92 +#: dcim/tables/devices.py:1046 dcim/tables/devicetypes.py:92 #: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 #: dcim/tables/power.py:96 dcim/tables/racks.py:76 dcim/tables/racks.py:156 #: dcim/tables/sites.py:103 extras/forms/bulk_edit.py:320 @@ -1123,7 +1119,7 @@ msgstr "Taahhüt Oranı" #: templates/inc/panels/comments.html:6 tenancy/tables/contacts.py:68 #: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 #: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:68 vpn/tables/crypto.py:37 +#: virtualization/tables/virtualmachines.py:81 vpn/tables/crypto.py:37 #: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 #: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 #: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 @@ -1160,7 +1156,7 @@ msgid "Completed" msgstr "Tamamlandı" #: core/choices.py:22 core/choices.py:59 dcim/choices.py:176 -#: dcim/choices.py:222 dcim/choices.py:1496 extras/choices.py:212 +#: dcim/choices.py:222 dcim/choices.py:1502 extras/choices.py:212 #: virtualization/choices.py:47 msgid "Failed" msgstr "Başarısız" @@ -1242,7 +1238,7 @@ msgstr "Veri kaynağı (isim)" #: core/forms/bulk_edit.py:24 core/forms/filtersets.py:39 #: core/tables/data.py:26 dcim/forms/bulk_edit.py:1012 #: dcim/forms/bulk_edit.py:1285 dcim/forms/filtersets.py:1270 -#: dcim/tables/devices.py:573 dcim/tables/devicetypes.py:221 +#: dcim/tables/devices.py:577 dcim/tables/devicetypes.py:221 #: extras/forms/bulk_edit.py:97 extras/forms/bulk_edit.py:161 #: extras/forms/bulk_edit.py:220 extras/forms/filtersets.py:119 #: extras/forms/filtersets.py:206 extras/forms/filtersets.py:267 @@ -1379,7 +1375,7 @@ msgstr "" msgid "Rack Elevations" msgstr "Raf Yükseltmeleri" -#: core/forms/model_forms.py:148 dcim/choices.py:1407 +#: core/forms/model_forms.py:148 dcim/choices.py:1413 #: dcim/forms/bulk_edit.py:859 dcim/forms/bulk_edit.py:1242 #: dcim/forms/bulk_edit.py:1260 dcim/tables/racks.py:89 #: netbox/navigation/menu.py:276 netbox/navigation/menu.py:280 @@ -1440,7 +1436,7 @@ msgstr " (varsayılan)" #: core/models/config.py:18 core/models/data.py:282 core/models/files.py:27 #: core/models/jobs.py:50 extras/models/models.py:760 -#: netbox/models/features.py:52 users/models.py:248 +#: netbox/models/features.py:52 users/models.py:249 msgid "created" msgstr "oluşturulan" @@ -1498,7 +1494,7 @@ msgstr "URL" #: core/models/data.py:62 dcim/models/device_component_templates.py:392 #: dcim/models/device_components.py:513 extras/models/models.py:88 -#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:353 +#: extras/models/models.py:331 extras/models/models.py:556 users/models.py:358 msgid "enabled" msgstr "etkin" @@ -1714,7 +1710,7 @@ msgid "Staging" msgstr "Sahneleme" #: dcim/choices.py:23 dcim/choices.py:178 dcim/choices.py:223 -#: dcim/choices.py:1420 virtualization/choices.py:23 +#: dcim/choices.py:1426 virtualization/choices.py:23 #: virtualization/choices.py:48 msgid "Decommissioning" msgstr "Hizmetten çıkarma" @@ -1774,7 +1770,7 @@ msgstr "Kullanımdan kaldırıldı" msgid "Millimeters" msgstr "Milimetre" -#: dcim/choices.py:115 dcim/choices.py:1442 +#: dcim/choices.py:115 dcim/choices.py:1448 msgid "Inches" msgstr "İnç" @@ -1786,8 +1782,8 @@ msgstr "İnç" #: dcim/forms/filtersets.py:226 dcim/forms/model_forms.py:73 #: dcim/forms/model_forms.py:94 dcim/forms/model_forms.py:172 #: dcim/forms/model_forms.py:962 dcim/forms/model_forms.py:1303 -#: dcim/forms/object_import.py:181 dcim/tables/devices.py:676 -#: dcim/tables/devices.py:960 extras/tables/tables.py:181 +#: dcim/forms/object_import.py:181 dcim/tables/devices.py:680 +#: dcim/tables/devices.py:964 extras/tables/tables.py:181 #: ipam/tables/fhrp.py:59 ipam/tables/ip.py:374 ipam/tables/services.py:44 #: templates/dcim/interface.html:105 templates/dcim/interface.html:321 #: templates/dcim/location.html:44 templates/dcim/region.html:38 @@ -1800,7 +1796,7 @@ msgstr "İnç" #: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:24 #: tenancy/forms/model_forms.py:69 virtualization/forms/bulk_edit.py:206 #: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:142 wireless/forms/bulk_edit.py:23 +#: virtualization/tables/virtualmachines.py:155 wireless/forms/bulk_edit.py:23 #: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:20 msgid "Parent" msgstr "Ebeveyn" @@ -1849,7 +1845,7 @@ msgstr "Sağdan sola" msgid "Side to rear" msgstr "Yandan arkaya" -#: dcim/choices.py:198 dcim/choices.py:1215 +#: dcim/choices.py:198 dcim/choices.py:1221 msgid "Passive" msgstr "Pasif" @@ -1877,8 +1873,8 @@ msgstr "Uluslararası/ITA" msgid "Proprietary" msgstr "Tescilli" -#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1131 -#: dcim/choices.py:1133 dcim/choices.py:1338 dcim/choices.py:1340 +#: dcim/choices.py:534 dcim/choices.py:764 dcim/choices.py:1137 +#: dcim/choices.py:1139 dcim/choices.py:1344 dcim/choices.py:1346 #: netbox/navigation/menu.py:188 msgid "Other" msgstr "Diğer" @@ -1891,177 +1887,177 @@ msgstr "ITA/Uluslararası" msgid "Physical" msgstr "Fiziksel" -#: dcim/choices.py:795 dcim/choices.py:949 +#: dcim/choices.py:795 dcim/choices.py:952 msgid "Virtual" msgstr "Sanal" -#: dcim/choices.py:796 dcim/choices.py:1019 dcim/forms/bulk_edit.py:1398 +#: dcim/choices.py:796 dcim/choices.py:1022 dcim/forms/bulk_edit.py:1398 #: dcim/forms/filtersets.py:1233 dcim/forms/model_forms.py:888 #: dcim/forms/model_forms.py:1197 netbox/navigation/menu.py:128 #: netbox/navigation/menu.py:132 templates/dcim/interface.html:217 msgid "Wireless" msgstr "Kablosuz" -#: dcim/choices.py:947 +#: dcim/choices.py:950 msgid "Virtual interfaces" msgstr "Sanal arayüzler" -#: dcim/choices.py:950 dcim/forms/bulk_edit.py:1295 +#: dcim/choices.py:953 dcim/forms/bulk_edit.py:1295 #: dcim/forms/bulk_import.py:785 dcim/forms/model_forms.py:876 -#: dcim/tables/devices.py:680 templates/dcim/interface.html:109 +#: dcim/tables/devices.py:684 templates/dcim/interface.html:109 #: templates/virtualization/vminterface.html:46 #: virtualization/forms/bulk_edit.py:211 #: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:146 +#: virtualization/tables/virtualmachines.py:159 msgid "Bridge" msgstr "Köprü" -#: dcim/choices.py:951 +#: dcim/choices.py:954 msgid "Link Aggregation Group (LAG)" msgstr "Bağlantı Toplama Grubu (LAG)" -#: dcim/choices.py:955 +#: dcim/choices.py:958 msgid "Ethernet (fixed)" msgstr "Ethernet (sabit)" -#: dcim/choices.py:969 +#: dcim/choices.py:972 msgid "Ethernet (modular)" msgstr "Ethernet (modüler)" -#: dcim/choices.py:1005 +#: dcim/choices.py:1008 msgid "Ethernet (backplane)" msgstr "Ethernet (arka panel)" -#: dcim/choices.py:1033 +#: dcim/choices.py:1036 msgid "Cellular" msgstr "Hücresel" -#: dcim/choices.py:1080 dcim/forms/filtersets.py:302 +#: dcim/choices.py:1086 dcim/forms/filtersets.py:302 #: dcim/forms/filtersets.py:736 dcim/forms/filtersets.py:876 #: dcim/forms/filtersets.py:1426 templates/dcim/inventoryitem.html:53 #: templates/dcim/virtualchassis_edit.html:55 msgid "Serial" msgstr "Seri" -#: dcim/choices.py:1095 +#: dcim/choices.py:1101 msgid "Coaxial" msgstr "Koaksiyel" -#: dcim/choices.py:1112 +#: dcim/choices.py:1118 msgid "Stacking" msgstr "İstifleme" -#: dcim/choices.py:1162 +#: dcim/choices.py:1168 msgid "Half" msgstr "Yarım" -#: dcim/choices.py:1163 +#: dcim/choices.py:1169 msgid "Full" msgstr "Dolu" -#: dcim/choices.py:1164 netbox/preferences.py:29 wireless/choices.py:480 +#: dcim/choices.py:1170 netbox/preferences.py:29 wireless/choices.py:480 msgid "Auto" msgstr "Oto" -#: dcim/choices.py:1175 +#: dcim/choices.py:1181 msgid "Access" msgstr "Erişim" -#: dcim/choices.py:1176 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 +#: dcim/choices.py:1182 ipam/tables/vlans.py:168 ipam/tables/vlans.py:213 #: templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Etiketlenmiş" -#: dcim/choices.py:1177 +#: dcim/choices.py:1183 msgid "Tagged (All)" msgstr "Etiketlenmiş (Tümü)" -#: dcim/choices.py:1206 +#: dcim/choices.py:1212 msgid "IEEE Standard" msgstr "IEEE Standardı" -#: dcim/choices.py:1217 +#: dcim/choices.py:1223 msgid "Passive 24V (2-pair)" msgstr "Pasif 24V (2 çift)" -#: dcim/choices.py:1218 +#: dcim/choices.py:1224 msgid "Passive 24V (4-pair)" msgstr "Pasif 24V (4 çift)" -#: dcim/choices.py:1219 +#: dcim/choices.py:1225 msgid "Passive 48V (2-pair)" msgstr "Pasif 48V (2 çift)" -#: dcim/choices.py:1220 +#: dcim/choices.py:1226 msgid "Passive 48V (4-pair)" msgstr "Pasif 48V (4 çift)" -#: dcim/choices.py:1282 dcim/choices.py:1378 +#: dcim/choices.py:1288 dcim/choices.py:1384 msgid "Copper" msgstr "Bakır" -#: dcim/choices.py:1305 +#: dcim/choices.py:1311 msgid "Fiber Optic" msgstr "Fiber Optik" -#: dcim/choices.py:1394 +#: dcim/choices.py:1400 msgid "Fiber" msgstr "Elyaf" -#: dcim/choices.py:1418 dcim/forms/filtersets.py:1140 +#: dcim/choices.py:1424 dcim/forms/filtersets.py:1140 msgid "Connected" msgstr "Bağlı" -#: dcim/choices.py:1437 +#: dcim/choices.py:1443 msgid "Kilometers" msgstr "Kilometre" -#: dcim/choices.py:1438 templates/dcim/cable_trace.html:62 +#: dcim/choices.py:1444 templates/dcim/cable_trace.html:62 msgid "Meters" msgstr "Sayaçlar" -#: dcim/choices.py:1439 +#: dcim/choices.py:1445 msgid "Centimeters" msgstr "Santimetre" -#: dcim/choices.py:1440 +#: dcim/choices.py:1446 msgid "Miles" msgstr "Mil" -#: dcim/choices.py:1441 templates/dcim/cable_trace.html:63 +#: dcim/choices.py:1447 templates/dcim/cable_trace.html:63 msgid "Feet" msgstr "Ayaklar" -#: dcim/choices.py:1457 templates/dcim/device.html:332 +#: dcim/choices.py:1463 templates/dcim/device.html:332 #: templates/dcim/rack.html:157 msgid "Kilograms" msgstr "Kilogram" -#: dcim/choices.py:1458 +#: dcim/choices.py:1464 msgid "Grams" msgstr "Gramlar" -#: dcim/choices.py:1459 templates/dcim/rack.html:158 +#: dcim/choices.py:1465 templates/dcim/rack.html:158 msgid "Pounds" msgstr "Pound'lar" -#: dcim/choices.py:1460 +#: dcim/choices.py:1466 msgid "Ounces" msgstr "ons" -#: dcim/choices.py:1506 tenancy/choices.py:17 +#: dcim/choices.py:1512 tenancy/choices.py:17 msgid "Primary" msgstr "Birincil" -#: dcim/choices.py:1507 +#: dcim/choices.py:1513 msgid "Redundant" msgstr "Yedekli" -#: dcim/choices.py:1528 +#: dcim/choices.py:1534 msgid "Single phase" msgstr "Tek fazlı" -#: dcim/choices.py:1529 +#: dcim/choices.py:1535 msgid "Three-phase" msgstr "Üç fazlı" @@ -2338,7 +2334,7 @@ msgid "Virtual Chassis (ID)" msgstr "Sanal Kasa (ID)" #: dcim/filtersets.py:1303 dcim/forms/filtersets.py:106 -#: dcim/tables/devices.py:235 netbox/navigation/menu.py:67 +#: dcim/tables/devices.py:239 netbox/navigation/menu.py:67 #: templates/dcim/device.html:123 templates/dcim/device_edit.html:93 #: templates/dcim/virtualchassis.html:20 #: templates/dcim/virtualchassis_add.html:8 @@ -2362,7 +2358,7 @@ msgstr "Atanmış VID" #: dcim/filtersets.py:1448 dcim/forms/bulk_edit.py:1374 #: dcim/forms/bulk_import.py:836 dcim/forms/filtersets.py:1328 #: dcim/forms/model_forms.py:1182 dcim/models/device_components.py:712 -#: dcim/tables/devices.py:642 ipam/filtersets.py:282 ipam/filtersets.py:293 +#: dcim/tables/devices.py:646 ipam/filtersets.py:282 ipam/filtersets.py:293 #: ipam/filtersets.py:449 ipam/filtersets.py:550 ipam/filtersets.py:561 #: ipam/forms/bulk_edit.py:226 ipam/forms/bulk_edit.py:281 #: ipam/forms/bulk_edit.py:323 ipam/forms/bulk_import.py:156 @@ -2370,8 +2366,8 @@ msgstr "Atanmış VID" #: ipam/forms/filtersets.py:66 ipam/forms/filtersets.py:167 #: ipam/forms/filtersets.py:295 ipam/forms/model_forms.py:59 #: ipam/forms/model_forms.py:203 ipam/forms/model_forms.py:246 -#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:412 -#: ipam/forms/model_forms.py:426 ipam/forms/model_forms.py:440 +#: ipam/forms/model_forms.py:290 ipam/forms/model_forms.py:398 +#: ipam/forms/model_forms.py:412 ipam/forms/model_forms.py:426 #: ipam/models/ip.py:232 ipam/models/ip.py:511 ipam/models/ip.py:719 #: ipam/models/vrfs.py:62 ipam/tables/ip.py:241 ipam/tables/ip.py:306 #: ipam/tables/ip.py:356 ipam/tables/ip.py:445 @@ -2384,7 +2380,7 @@ msgstr "Atanmış VID" #: virtualization/forms/filtersets.py:220 #: virtualization/forms/model_forms.py:347 #: virtualization/models/virtualmachines.py:348 -#: virtualization/tables/virtualmachines.py:123 +#: virtualization/tables/virtualmachines.py:136 msgid "VRF" msgstr "VRF" @@ -2398,7 +2394,7 @@ msgid "L2VPN (ID)" msgstr "L2VPN (KİMLİĞİ)" #: dcim/filtersets.py:1465 dcim/forms/filtersets.py:1333 -#: dcim/tables/devices.py:590 ipam/filtersets.py:973 +#: dcim/tables/devices.py:594 ipam/filtersets.py:973 #: ipam/forms/filtersets.py:499 ipam/tables/vlans.py:133 #: templates/dcim/interface.html:94 templates/ipam/vlan.html:69 #: templates/vpn/l2vpntermination.html:15 @@ -2469,7 +2465,7 @@ msgstr "Etiketler" #: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1390 #: dcim/forms/model_forms.py:426 dcim/forms/model_forms.py:475 #: dcim/forms/object_create.py:196 dcim/forms/object_create.py:352 -#: dcim/tables/devices.py:198 dcim/tables/devices.py:725 +#: dcim/tables/devices.py:198 dcim/tables/devices.py:729 #: dcim/tables/devicetypes.py:242 templates/dcim/device.html:45 #: templates/dcim/device.html:129 templates/dcim/modulebay.html:35 #: templates/dcim/virtualchassis.html:59 @@ -2488,7 +2484,7 @@ msgstr "" #: dcim/forms/bulk_edit.py:115 dcim/forms/bulk_import.py:99 #: dcim/forms/model_forms.py:120 dcim/tables/sites.py:89 #: ipam/filtersets.py:936 ipam/forms/bulk_edit.py:528 -#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:509 +#: ipam/forms/bulk_import.py:444 ipam/forms/model_forms.py:495 #: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 #: templates/dcim/interface.html:294 templates/dcim/site.html:37 #: templates/ipam/inc/panels/fhrp_groups.html:10 templates/ipam/vlan.html:30 @@ -2538,8 +2534,8 @@ msgstr "Saat dilimi" #: dcim/forms/filtersets.py:704 dcim/forms/filtersets.py:1417 #: dcim/forms/model_forms.py:224 dcim/forms/model_forms.py:970 #: dcim/forms/model_forms.py:1311 dcim/forms/object_import.py:186 -#: dcim/tables/devices.py:202 dcim/tables/devices.py:833 -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:300 +#: dcim/tables/devices.py:202 dcim/tables/devices.py:837 +#: dcim/tables/devices.py:948 dcim/tables/devicetypes.py:300 #: dcim/tables/racks.py:69 extras/filtersets.py:457 #: ipam/forms/bulk_edit.py:245 ipam/forms/bulk_edit.py:294 #: ipam/forms/bulk_edit.py:342 ipam/forms/bulk_edit.py:546 @@ -2548,7 +2544,7 @@ msgstr "Saat dilimi" #: ipam/forms/filtersets.py:232 ipam/forms/filtersets.py:278 #: ipam/forms/filtersets.py:346 ipam/forms/filtersets.py:490 #: ipam/forms/model_forms.py:187 ipam/forms/model_forms.py:222 -#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:647 +#: ipam/forms/model_forms.py:249 ipam/forms/model_forms.py:651 #: ipam/tables/ip.py:257 ipam/tables/ip.py:313 ipam/tables/ip.py:363 #: ipam/tables/vlans.py:126 ipam/tables/vlans.py:230 #: templates/dcim/device.html:187 @@ -2566,7 +2562,7 @@ msgstr "Saat dilimi" #: virtualization/forms/bulk_import.py:106 #: virtualization/forms/filtersets.py:153 #: virtualization/forms/model_forms.py:198 -#: virtualization/tables/virtualmachines.py:65 vpn/forms/bulk_edit.py:86 +#: virtualization/tables/virtualmachines.py:74 vpn/forms/bulk_edit.py:86 #: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:84 #: vpn/forms/model_forms.py:77 vpn/forms/model_forms.py:112 #: vpn/tables/tunnels.py:82 @@ -2660,7 +2656,7 @@ msgstr "Ağırlık birimi" #: dcim/forms/model_forms.py:669 dcim/forms/object_create.py:399 #: dcim/tables/devices.py:194 dcim/tables/power.py:70 dcim/tables/racks.py:148 #: ipam/forms/bulk_edit.py:464 ipam/forms/filtersets.py:427 -#: ipam/forms/model_forms.py:571 templates/dcim/device.html:30 +#: ipam/forms/model_forms.py:575 templates/dcim/device.html:30 #: templates/dcim/inc/cable_termination.html:16 #: templates/dcim/powerfeed.html:31 templates/dcim/rack.html:14 #: templates/dcim/rack/base.html:4 templates/dcim/rack_edit.html:8 @@ -2693,7 +2689,7 @@ msgstr "Donanım" #: dcim/forms/model_forms.py:334 dcim/forms/model_forms.py:374 #: dcim/forms/model_forms.py:975 dcim/forms/model_forms.py:1316 #: dcim/forms/object_import.py:192 dcim/tables/devices.py:129 -#: dcim/tables/devices.py:205 dcim/tables/devices.py:947 +#: dcim/tables/devices.py:205 dcim/tables/devices.py:951 #: dcim/tables/devicetypes.py:81 dcim/tables/devicetypes.py:304 #: dcim/tables/modules.py:20 dcim/tables/modules.py:60 #: templates/dcim/devicetype.html:17 templates/dcim/inventoryitem.html:45 @@ -2740,7 +2736,7 @@ msgstr "Aygıt Türü" msgid "Module Type" msgstr "Modül Türü" -#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:472 +#: dcim/forms/bulk_edit.py:506 dcim/models/devices.py:474 msgid "VM role" msgstr "VM rolü" @@ -2772,13 +2768,15 @@ msgstr "Aygıt rolü" #: dcim/forms/bulk_edit.py:588 dcim/forms/bulk_import.py:443 #: dcim/forms/filtersets.py:723 dcim/forms/model_forms.py:389 -#: dcim/forms/model_forms.py:448 extras/filtersets.py:468 -#: templates/dcim/device.html:191 templates/dcim/platform.html:27 +#: dcim/forms/model_forms.py:448 dcim/tables/devices.py:215 +#: extras/filtersets.py:468 templates/dcim/device.html:191 +#: templates/dcim/platform.html:27 #: templates/virtualization/virtualmachine.html:30 #: virtualization/forms/bulk_edit.py:159 #: virtualization/forms/bulk_import.py:122 #: virtualization/forms/filtersets.py:164 #: virtualization/forms/model_forms.py:206 +#: virtualization/tables/virtualmachines.py:78 msgid "Platform" msgstr "Platform" @@ -2802,16 +2800,16 @@ msgstr "Platform" #: dcim/forms/model_forms.py:760 dcim/forms/model_forms.py:1011 #: dcim/forms/model_forms.py:1460 dcim/forms/object_create.py:256 #: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:314 -#: dcim/tables/devices.py:379 dcim/tables/devices.py:423 -#: dcim/tables/devices.py:468 dcim/tables/devices.py:522 -#: dcim/tables/devices.py:614 dcim/tables/devices.py:715 -#: dcim/tables/devices.py:775 dcim/tables/devices.py:825 -#: dcim/tables/devices.py:885 dcim/tables/devices.py:937 -#: dcim/tables/devices.py:1063 dcim/tables/modules.py:52 +#: dcim/tables/connections.py:60 dcim/tables/devices.py:318 +#: dcim/tables/devices.py:383 dcim/tables/devices.py:427 +#: dcim/tables/devices.py:472 dcim/tables/devices.py:526 +#: dcim/tables/devices.py:618 dcim/tables/devices.py:719 +#: dcim/tables/devices.py:779 dcim/tables/devices.py:829 +#: dcim/tables/devices.py:889 dcim/tables/devices.py:941 +#: dcim/tables/devices.py:1067 dcim/tables/modules.py:52 #: extras/forms/filtersets.py:329 ipam/forms/bulk_import.py:303 #: ipam/forms/bulk_import.py:489 ipam/forms/filtersets.py:532 -#: ipam/forms/model_forms.py:685 ipam/tables/vlans.py:176 +#: ipam/forms/model_forms.py:689 ipam/tables/vlans.py:176 #: templates/dcim/consoleport.html:23 templates/dcim/consoleserverport.html:23 #: templates/dcim/device.html:14 templates/dcim/device.html:128 #: templates/dcim/device_edit.html:10 templates/dcim/devicebay.html:23 @@ -2833,7 +2831,7 @@ msgstr "Platform" #: virtualization/forms/bulk_import.py:99 #: virtualization/forms/filtersets.py:124 #: virtualization/forms/model_forms.py:188 -#: virtualization/tables/virtualmachines.py:61 vpn/choices.py:44 +#: virtualization/tables/virtualmachines.py:70 vpn/choices.py:44 #: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 #: vpn/forms/filtersets.py:271 vpn/forms/model_forms.py:89 #: vpn/forms/model_forms.py:124 vpn/forms/model_forms.py:237 @@ -2973,7 +2971,7 @@ msgid "Wireless role" msgstr "Kablosuz rolü" #: dcim/forms/bulk_edit.py:1178 dcim/forms/model_forms.py:595 -#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:337 +#: dcim/forms/model_forms.py:1026 dcim/tables/devices.py:341 #: templates/dcim/consoleport.html:27 templates/dcim/consoleserverport.html:27 #: templates/dcim/frontport.html:27 templates/dcim/interface.html:35 #: templates/dcim/module.html:51 templates/dcim/modulebay.html:57 @@ -2982,7 +2980,7 @@ msgstr "Kablosuz rolü" msgid "Module" msgstr "Modül" -#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:685 +#: dcim/forms/bulk_edit.py:1305 dcim/tables/devices.py:689 #: templates/dcim/interface.html:113 msgid "LAG" msgstr "GECİKME" @@ -2994,7 +2992,7 @@ msgstr "Sanal cihaz bağlamları" #: dcim/forms/bulk_edit.py:1316 dcim/forms/bulk_import.py:659 #: dcim/forms/bulk_import.py:685 dcim/forms/filtersets.py:1163 #: dcim/forms/filtersets.py:1185 dcim/forms/filtersets.py:1258 -#: dcim/tables/devices.py:626 +#: dcim/tables/devices.py:630 #: templates/circuits/inc/circuit_termination.html:94 #: templates/dcim/consoleport.html:43 templates/dcim/consoleserverport.html:43 msgid "Speed" @@ -3019,13 +3017,13 @@ msgid "VLAN group" msgstr "VLAN grubu" #: dcim/forms/bulk_edit.py:1361 dcim/forms/model_forms.py:1164 -#: dcim/tables/devices.py:599 virtualization/forms/bulk_edit.py:247 +#: dcim/tables/devices.py:603 virtualization/forms/bulk_edit.py:247 #: virtualization/forms/model_forms.py:329 msgid "Untagged VLAN" msgstr "Etiketsiz VLAN" #: dcim/forms/bulk_edit.py:1369 dcim/forms/model_forms.py:1173 -#: dcim/tables/devices.py:605 virtualization/forms/bulk_edit.py:255 +#: dcim/tables/devices.py:609 virtualization/forms/bulk_edit.py:255 #: virtualization/forms/model_forms.py:338 msgid "Tagged VLANs" msgstr "Etiketli VLAN'lar" @@ -3035,7 +3033,7 @@ msgid "Wireless LAN group" msgstr "Kablosuz LAN grubu" #: dcim/forms/bulk_edit.py:1384 dcim/forms/model_forms.py:1151 -#: dcim/tables/devices.py:635 netbox/navigation/menu.py:134 +#: dcim/tables/devices.py:639 netbox/navigation/menu.py:134 #: templates/dcim/interface.html:289 wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Kablosuz LAN'lar" @@ -3206,9 +3204,9 @@ msgid "Virtual chassis" msgstr "Sanal şasi" #: dcim/forms/bulk_import.py:462 dcim/forms/model_forms.py:457 -#: dcim/tables/devices.py:231 extras/filtersets.py:501 +#: dcim/tables/devices.py:235 extras/filtersets.py:501 #: extras/forms/filtersets.py:330 ipam/forms/bulk_edit.py:478 -#: ipam/forms/model_forms.py:588 templates/dcim/device.html:239 +#: ipam/forms/model_forms.py:592 templates/dcim/device.html:239 #: templates/virtualization/cluster.html:11 #: templates/virtualization/virtualmachine.html:92 #: templates/virtualization/virtualmachine.html:102 @@ -3220,7 +3218,7 @@ msgstr "Sanal şasi" #: virtualization/forms/filtersets.py:196 #: virtualization/forms/model_forms.py:82 #: virtualization/forms/model_forms.py:179 -#: virtualization/tables/virtualmachines.py:57 +#: virtualization/tables/virtualmachines.py:66 msgid "Cluster" msgstr "Küme" @@ -3401,7 +3399,7 @@ msgstr "İlgili arka bağlantı noktası" msgid "Physical medium classification" msgstr "Fiziksel ortam sınıflandırması" -#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:846 +#: dcim/forms/bulk_import.py:973 dcim/tables/devices.py:850 msgid "Installed device" msgstr "Yüklü cihaz" @@ -3489,7 +3487,7 @@ msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} yan sonlandırma bulunamadı: {device} {name}" #: dcim/forms/bulk_import.py:1244 dcim/forms/model_forms.py:696 -#: dcim/tables/devices.py:1033 templates/dcim/device.html:130 +#: dcim/tables/devices.py:1037 templates/dcim/device.html:130 #: templates/dcim/virtualchassis.html:28 templates/dcim/virtualchassis.html:60 msgid "Master" msgstr "Usta" @@ -3615,7 +3613,7 @@ msgstr "işgal" #: dcim/forms/filtersets.py:1155 dcim/forms/filtersets.py:1177 #: dcim/forms/filtersets.py:1199 dcim/forms/filtersets.py:1216 -#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:372 +#: dcim/forms/filtersets.py:1236 dcim/tables/devices.py:376 #: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:59 #: templates/dcim/frontport.html:74 templates/dcim/interface.html:146 #: templates/dcim/powerfeed.html:118 templates/dcim/poweroutlet.html:63 @@ -3629,7 +3627,7 @@ msgid "Virtual Device Context" msgstr "Sanal Aygıt Bağlamı" #: dcim/forms/filtersets.py:1248 extras/forms/bulk_edit.py:315 -#: extras/forms/bulk_import.py:239 extras/forms/filtersets.py:479 +#: extras/forms/bulk_import.py:245 extras/forms/filtersets.py:479 #: extras/forms/model_forms.py:557 extras/tables/tables.py:487 #: templates/extras/journalentry.html:33 msgid "Kind" @@ -3661,7 +3659,7 @@ msgid "Transmit power (dBm)" msgstr "İletim gücü (dBm)" #: dcim/forms/filtersets.py:1344 dcim/forms/filtersets.py:1366 -#: dcim/tables/devices.py:344 templates/dcim/cable.html:12 +#: dcim/tables/devices.py:348 templates/dcim/cable.html:12 #: templates/dcim/cable_edit.html:46 templates/dcim/cable_trace.html:43 #: templates/dcim/frontport.html:84 #: templates/dcim/inc/connection_endpoints.html:4 @@ -3669,7 +3667,7 @@ msgstr "İletim gücü (dBm)" msgid "Cable" msgstr "Kablo" -#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:956 +#: dcim/forms/filtersets.py:1434 dcim/tables/devices.py:960 msgid "Discovered" msgstr "Keşfedildi" @@ -3716,7 +3714,7 @@ msgstr "Şasi" msgid "Device Role" msgstr "Aygıt Rolü" -#: dcim/forms/model_forms.py:428 dcim/models/devices.py:632 +#: dcim/forms/model_forms.py:428 dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "Cihazın kullandığı en düşük numaralı birim" @@ -3767,9 +3765,7 @@ msgstr "LAG arayüzü" #: templates/wireless/wirelesslink.html:10 #: templates/wireless/wirelesslink.html:49 #: virtualization/forms/model_forms.py:351 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 -#: vpn/forms/model_forms.py:241 vpn/forms/model_forms.py:436 -#: vpn/forms/model_forms.py:445 vpn/tables/tunnels.py:91 +#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 #: wireless/forms/model_forms.py:112 wireless/forms/model_forms.py:152 msgid "Interface" msgstr "Arayüz" @@ -3846,7 +3842,7 @@ msgstr "" "bekleniyor." #: dcim/forms/object_create.py:109 dcim/forms/object_create.py:270 -#: dcim/tables/devices.py:281 +#: dcim/tables/devices.py:285 msgid "Rear ports" msgstr "Arka bağlantı noktaları" @@ -3883,7 +3879,7 @@ msgstr "" "Oluşturulacak ön bağlantı noktalarının sayısı ({frontport_count}) seçilen " "arka port konumu sayısıyla eşleşmelidir ({rearport_count})." -#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1039 +#: dcim/forms/object_create.py:408 dcim/tables/devices.py:1043 #: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:54 #: templates/dcim/virtualchassis_edit.html:48 templates/ipam/fhrpgroup.html:39 msgid "Members" @@ -4592,13 +4588,13 @@ msgstr "envanter kalemi rolü" msgid "inventory item roles" msgstr "envanter kalemi rolleri" -#: dcim/models/device_components.py:1230 dcim/models/devices.py:595 -#: dcim/models/devices.py:1173 dcim/models/racks.py:113 +#: dcim/models/device_components.py:1230 dcim/models/devices.py:597 +#: dcim/models/devices.py:1178 dcim/models/racks.py:113 msgid "serial number" msgstr "seri numarası" -#: dcim/models/device_components.py:1238 dcim/models/devices.py:603 -#: dcim/models/devices.py:1180 dcim/models/racks.py:120 +#: dcim/models/device_components.py:1238 dcim/models/devices.py:605 +#: dcim/models/devices.py:1185 dcim/models/racks.py:120 msgid "asset tag" msgstr "varlık etiketi" @@ -4646,7 +4642,7 @@ msgstr "üretici firma" msgid "manufacturers" msgstr "üreticiler" -#: dcim/models/devices.py:82 dcim/models/devices.py:381 +#: dcim/models/devices.py:82 dcim/models/devices.py:382 msgid "model" msgstr "model" @@ -4654,11 +4650,11 @@ msgstr "model" msgid "default platform" msgstr "varsayılan platform" -#: dcim/models/devices.py:98 dcim/models/devices.py:385 +#: dcim/models/devices.py:98 dcim/models/devices.py:386 msgid "part number" msgstr "parça numarası" -#: dcim/models/devices.py:101 dcim/models/devices.py:388 +#: dcim/models/devices.py:101 dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Ayrık parça numarası (isteğe bağlı)" @@ -4694,7 +4690,7 @@ msgstr "" "Ana cihazlar, alt aygıtları cihaz yuvalarında barındırır. Bu cihaz türü " "ebeveyn veya çocuk değilse boş bırakın." -#: dcim/models/devices.py:128 dcim/models/devices.py:647 +#: dcim/models/devices.py:128 dcim/models/devices.py:649 msgid "airflow" msgstr "hava akımı" @@ -4706,11 +4702,11 @@ msgstr "cihaz tipi" msgid "device types" msgstr "cihaz türleri" -#: dcim/models/devices.py:289 +#: 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:306 +#: dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -4719,7 +4715,7 @@ msgstr "" "Aygıt {device} rafta {rack} bir yüksekliği barındırmak için yeterli alana " "sahip değildir {height}U" -#: dcim/models/devices.py:321 +#: dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -4729,7 +4725,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} örnekler zaten raflara monte " "edilmiştir." -#: dcim/models/devices.py:330 +#: dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -4737,164 +4733,164 @@ msgstr "" "Ana aygıt olarak sınıflandırmadan önce bu aygıtla ilişkili tüm aygıt yuvası " "şablonlarını silmeniz gerekir." -#: dcim/models/devices.py:336 +#: 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:404 +#: dcim/models/devices.py:405 msgid "module type" msgstr "modül tipi" -#: dcim/models/devices.py:405 +#: dcim/models/devices.py:406 msgid "module types" msgstr "modül türleri" -#: dcim/models/devices.py:473 +#: dcim/models/devices.py:475 msgid "Virtual machines may be assigned to this role" msgstr "Sanal makineler bu role atanabilir" -#: dcim/models/devices.py:485 +#: dcim/models/devices.py:487 msgid "device role" msgstr "cihaz rolü" -#: dcim/models/devices.py:486 +#: dcim/models/devices.py:488 msgid "device roles" msgstr "cihaz rolleri" -#: dcim/models/devices.py:503 +#: dcim/models/devices.py:505 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:515 +#: dcim/models/devices.py:517 msgid "platform" msgstr "platform" -#: dcim/models/devices.py:516 +#: dcim/models/devices.py:518 msgid "platforms" msgstr "platformlar" -#: dcim/models/devices.py:564 +#: dcim/models/devices.py:566 msgid "The function this device serves" msgstr "Bu cihazın hizmet ettiği işlev" -#: dcim/models/devices.py:596 +#: dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Üretici tarafından atanan şasi seri numarası" -#: dcim/models/devices.py:604 dcim/models/devices.py:1181 +#: dcim/models/devices.py:606 dcim/models/devices.py:1186 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:631 +#: dcim/models/devices.py:633 msgid "position (U)" msgstr "pozisyon (U)" -#: dcim/models/devices.py:638 +#: dcim/models/devices.py:640 msgid "rack face" msgstr "raf yüzü" -#: dcim/models/devices.py:658 dcim/models/devices.py:1390 +#: dcim/models/devices.py:660 dcim/models/devices.py:1395 #: virtualization/models/virtualmachines.py:98 msgid "primary IPv4" msgstr "birincil IPv4" -#: dcim/models/devices.py:666 dcim/models/devices.py:1398 +#: dcim/models/devices.py:668 dcim/models/devices.py:1403 #: virtualization/models/virtualmachines.py:106 msgid "primary IPv6" msgstr "birincil IPv6" -#: dcim/models/devices.py:674 +#: dcim/models/devices.py:676 msgid "out-of-band IP" msgstr "bant dışı IP" -#: dcim/models/devices.py:691 +#: dcim/models/devices.py:693 msgid "VC position" msgstr "VC pozisyonu" -#: dcim/models/devices.py:695 +#: dcim/models/devices.py:697 msgid "Virtual chassis position" msgstr "Sanal şasi konumu" -#: dcim/models/devices.py:698 +#: dcim/models/devices.py:700 msgid "VC priority" msgstr "VC önceliği" -#: dcim/models/devices.py:702 +#: dcim/models/devices.py:704 msgid "Virtual chassis master election priority" msgstr "Sanal şasi ana seçim önceliği" -#: dcim/models/devices.py:705 dcim/models/sites.py:207 +#: dcim/models/devices.py:707 dcim/models/sites.py:207 msgid "latitude" msgstr "enlem" -#: dcim/models/devices.py:710 dcim/models/devices.py:718 +#: dcim/models/devices.py:712 dcim/models/devices.py:720 #: dcim/models/sites.py:212 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:713 dcim/models/sites.py:215 +#: dcim/models/devices.py:715 dcim/models/sites.py:215 msgid "longitude" msgstr "boylam" -#: dcim/models/devices.py:786 +#: dcim/models/devices.py:788 msgid "Device name must be unique per site." msgstr "Aygıt adı site başına benzersiz olmalıdır." -#: dcim/models/devices.py:797 ipam/models/services.py:75 +#: dcim/models/devices.py:799 ipam/models/services.py:75 msgid "device" msgstr "cihaz" -#: dcim/models/devices.py:798 +#: dcim/models/devices.py:800 msgid "devices" msgstr "cihazlar" -#: dcim/models/devices.py:838 +#: dcim/models/devices.py:840 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Raf {rack} siteye ait değil {site}." -#: dcim/models/devices.py:843 +#: dcim/models/devices.py:845 #, 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:849 +#: dcim/models/devices.py:851 #, 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:856 +#: dcim/models/devices.py:858 msgid "Cannot select a rack face without assigning a rack." msgstr "Bir raf atamadan raf yüzü seçilemez." -#: dcim/models/devices.py:860 +#: dcim/models/devices.py:862 msgid "Cannot select a rack position without assigning a rack." msgstr "Bir raf atamadan raf konumu seçilemez." -#: dcim/models/devices.py:866 +#: dcim/models/devices.py:868 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:870 +#: dcim/models/devices.py:872 msgid "Must specify rack face when defining rack position." msgstr "Raf konumunu tanımlarken raf yüzü belirtilmelidir." -#: dcim/models/devices.py:878 +#: dcim/models/devices.py:880 #, 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:889 +#: dcim/models/devices.py:891 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:896 +#: dcim/models/devices.py:898 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -4902,7 +4898,7 @@ msgstr "" "Alt aygıt türleri bir raf konumuna atanamaz. Bu, ana aygıtın bir " "özelliğidir." -#: dcim/models/devices.py:910 +#: dcim/models/devices.py:912 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -4911,22 +4907,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:925 +#: dcim/models/devices.py:927 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Bu bir IPv4 adresi değildir." -#: dcim/models/devices.py:934 dcim/models/devices.py:949 +#: dcim/models/devices.py:936 dcim/models/devices.py:951 #, 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:940 +#: dcim/models/devices.py:942 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Bu bir IPv6 adresi değildir." -#: dcim/models/devices.py:967 +#: dcim/models/devices.py:969 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -4935,45 +4931,45 @@ 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:978 +#: dcim/models/devices.py:980 #, 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:986 +#: dcim/models/devices.py:988 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:1188 +#: dcim/models/devices.py:1193 msgid "module" msgstr "modül" -#: dcim/models/devices.py:1189 +#: dcim/models/devices.py:1194 msgid "modules" msgstr "modülleri" -#: dcim/models/devices.py:1205 +#: dcim/models/devices.py:1210 #, 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:1309 +#: dcim/models/devices.py:1314 msgid "domain" msgstr "domain" -#: dcim/models/devices.py:1322 dcim/models/devices.py:1323 +#: dcim/models/devices.py:1327 dcim/models/devices.py:1328 msgid "virtual chassis" msgstr "sanal kasa" -#: dcim/models/devices.py:1338 +#: dcim/models/devices.py:1343 #, 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:1354 +#: dcim/models/devices.py:1359 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -4982,33 +4978,33 @@ msgstr "" "Sanal kasa silinemiyor {self}. Çapraz şasi LAG arabirimleri oluşturan üye " "arayüzleri vardır." -#: dcim/models/devices.py:1379 vpn/models/l2vpn.py:37 +#: dcim/models/devices.py:1384 vpn/models/l2vpn.py:37 msgid "identifier" msgstr "belirlemek" -#: dcim/models/devices.py:1380 +#: dcim/models/devices.py:1385 msgid "Numeric identifier unique to the parent device" msgstr "Ana aygıta benzersiz sayısal tanımlayıcı" -#: dcim/models/devices.py:1408 extras/models/models.py:129 +#: dcim/models/devices.py:1413 extras/models/models.py:129 #: extras/models/models.py:724 netbox/models/__init__.py:114 msgid "comments" msgstr "yorumlar" -#: dcim/models/devices.py:1424 +#: dcim/models/devices.py:1429 msgid "virtual device context" msgstr "sanal cihaz bağlamı" -#: dcim/models/devices.py:1425 +#: dcim/models/devices.py:1430 msgid "virtual device contexts" msgstr "sanal cihaz bağlamları" -#: dcim/models/devices.py:1457 +#: dcim/models/devices.py:1462 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} IPV değil{family} adres." -#: dcim/models/devices.py:1463 +#: dcim/models/devices.py:1468 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." @@ -5390,7 +5386,7 @@ msgstr "Konsol Bağlantı Noktası" msgid "Reachable" msgstr "Ulaşılabilir" -#: dcim/tables/connections.py:46 dcim/tables/devices.py:529 +#: dcim/tables/connections.py:46 dcim/tables/devices.py:533 #: templates/dcim/inventoryitem_edit.html:64 #: templates/dcim/poweroutlet.html:47 templates/dcim/powerport.html:18 msgid "Power Port" @@ -5409,7 +5405,7 @@ msgstr "Aygıtlar" msgid "VMs" msgstr "Sanal Makineler" -#: dcim/tables/devices.py:133 dcim/tables/devices.py:245 +#: dcim/tables/devices.py:133 dcim/tables/devices.py:249 #: extras/forms/model_forms.py:515 templates/dcim/device.html:114 #: templates/dcim/device/render_config.html:11 #: templates/dcim/device/render_config.html:15 @@ -5418,62 +5414,62 @@ msgstr "Sanal Makineler" #: templates/virtualization/virtualmachine.html:47 #: templates/virtualization/virtualmachine/render_config.html:11 #: templates/virtualization/virtualmachine/render_config.html:15 -#: virtualization/tables/virtualmachines.py:93 +#: virtualization/tables/virtualmachines.py:106 msgid "Config Template" msgstr "Yapılandırma Şablonu" -#: dcim/tables/devices.py:216 dcim/tables/devices.py:1074 +#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 #: ipam/forms/bulk_import.py:511 ipam/forms/model_forms.py:296 #: ipam/tables/ip.py:352 ipam/tables/ip.py:418 ipam/tables/ip.py:441 #: templates/ipam/ipaddress.html:12 templates/ipam/ipaddress_edit.html:14 -#: virtualization/tables/virtualmachines.py:81 +#: virtualization/tables/virtualmachines.py:94 msgid "IP Address" msgstr "IP Adresi" -#: dcim/tables/devices.py:220 dcim/tables/devices.py:1078 -#: virtualization/tables/virtualmachines.py:72 +#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 +#: virtualization/tables/virtualmachines.py:85 msgid "IPv4 Address" msgstr "IPv4 Adresi" -#: dcim/tables/devices.py:224 dcim/tables/devices.py:1082 -#: virtualization/tables/virtualmachines.py:76 +#: dcim/tables/devices.py:228 dcim/tables/devices.py:1086 +#: virtualization/tables/virtualmachines.py:89 msgid "IPv6 Address" msgstr "IPv6 Adresi" -#: dcim/tables/devices.py:239 +#: dcim/tables/devices.py:243 msgid "VC Position" msgstr "VC Pozisyonu" -#: dcim/tables/devices.py:242 +#: dcim/tables/devices.py:246 msgid "VC Priority" msgstr "VC Önceliği" -#: dcim/tables/devices.py:249 templates/dcim/device_edit.html:38 +#: dcim/tables/devices.py:253 templates/dcim/device_edit.html:38 #: templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Ebeveyn Aygıtı" -#: dcim/tables/devices.py:254 +#: dcim/tables/devices.py:258 msgid "Position (Device Bay)" msgstr "Konum (Aygıt Yuvası)" -#: dcim/tables/devices.py:263 +#: dcim/tables/devices.py:267 msgid "Console ports" msgstr "Konsol bağlantı noktaları" -#: dcim/tables/devices.py:266 +#: dcim/tables/devices.py:270 msgid "Console server ports" msgstr "Konsol sunucusu bağlantı noktaları" -#: dcim/tables/devices.py:269 +#: dcim/tables/devices.py:273 msgid "Power ports" msgstr "Güç bağlantı noktaları" -#: dcim/tables/devices.py:272 +#: dcim/tables/devices.py:276 msgid "Power outlets" msgstr "Elektrik prizleri" -#: dcim/tables/devices.py:275 dcim/tables/devices.py:1087 +#: dcim/tables/devices.py:279 dcim/tables/devices.py:1091 #: dcim/tables/devicetypes.py:125 dcim/views.py:1005 dcim/views.py:1244 #: dcim/views.py:1930 netbox/navigation/menu.py:82 #: netbox/navigation/menu.py:238 templates/dcim/device/base.html:37 @@ -5483,53 +5479,53 @@ msgstr "Elektrik prizleri" #: templates/dcim/virtualdevicecontext.html:85 #: templates/virtualization/virtualmachine/base.html:27 #: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:87 virtualization/views.py:368 +#: virtualization/tables/virtualmachines.py:100 virtualization/views.py:368 #: wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Arayüzler" -#: dcim/tables/devices.py:278 +#: dcim/tables/devices.py:282 msgid "Front ports" msgstr "Ön bağlantı noktaları" -#: dcim/tables/devices.py:284 +#: dcim/tables/devices.py:288 msgid "Device bays" msgstr "Aygıt yuvaları" -#: dcim/tables/devices.py:287 +#: dcim/tables/devices.py:291 msgid "Module bays" msgstr "Modül bölmeleri" -#: dcim/tables/devices.py:290 +#: dcim/tables/devices.py:294 msgid "Inventory items" msgstr "Envanter kalemleri" -#: dcim/tables/devices.py:329 dcim/tables/modules.py:56 +#: dcim/tables/devices.py:333 dcim/tables/modules.py:56 #: templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modül Yuvası" -#: dcim/tables/devices.py:350 +#: dcim/tables/devices.py:354 msgid "Cable Color" msgstr "Kablo Rengi" -#: dcim/tables/devices.py:356 +#: dcim/tables/devices.py:360 msgid "Link Peers" msgstr "Meslektaşları Bağla" -#: dcim/tables/devices.py:359 +#: dcim/tables/devices.py:363 msgid "Mark Connected" msgstr "Bağlı İşaretle" -#: dcim/tables/devices.py:475 +#: dcim/tables/devices.py:479 msgid "Maximum draw (W)" msgstr "Maksimum çekim (W)" -#: dcim/tables/devices.py:478 +#: dcim/tables/devices.py:482 msgid "Allocated draw (W)" msgstr "Tahsis edilen çekiliş (W)" -#: dcim/tables/devices.py:578 ipam/forms/model_forms.py:707 +#: dcim/tables/devices.py:582 ipam/forms/model_forms.py:711 #: ipam/tables/fhrp.py:28 ipam/views.py:597 ipam/views.py:691 #: netbox/navigation/menu.py:146 netbox/navigation/menu.py:148 #: templates/dcim/interface.html:351 templates/ipam/ipaddress_bulk_add.html:15 @@ -5538,12 +5534,12 @@ msgstr "Tahsis edilen çekiliş (W)" msgid "IP Addresses" msgstr "IP Adresleri" -#: dcim/tables/devices.py:584 netbox/navigation/menu.py:190 +#: dcim/tables/devices.py:588 netbox/navigation/menu.py:190 #: templates/ipam/inc/panels/fhrp_groups.html:5 msgid "FHRP Groups" msgstr "FHRP Grupları" -#: dcim/tables/devices.py:596 templates/dcim/interface.html:90 +#: dcim/tables/devices.py:600 templates/dcim/interface.html:90 #: templates/virtualization/vminterface.html:70 templates/vpn/tunnel.html:18 #: templates/vpn/tunneltermination.html:14 vpn/forms/bulk_edit.py:75 #: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:41 @@ -5552,20 +5548,20 @@ msgstr "FHRP Grupları" msgid "Tunnel" msgstr "Tünel" -#: dcim/tables/devices.py:621 dcim/tables/devicetypes.py:224 +#: dcim/tables/devices.py:625 dcim/tables/devicetypes.py:224 #: templates/dcim/interface.html:66 msgid "Management Only" msgstr "Yalnızca Yönetim" -#: dcim/tables/devices.py:629 +#: dcim/tables/devices.py:633 msgid "Wireless link" msgstr "Kablosuz bağlantı" -#: dcim/tables/devices.py:639 +#: dcim/tables/devices.py:643 msgid "VDCs" msgstr "VDC'ler" -#: dcim/tables/devices.py:647 dcim/tables/devicetypes.py:48 +#: dcim/tables/devices.py:651 dcim/tables/devicetypes.py:48 #: dcim/tables/devicetypes.py:140 dcim/views.py:1080 dcim/views.py:2023 #: netbox/navigation/menu.py:91 templates/dcim/device/base.html:52 #: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 @@ -5574,7 +5570,7 @@ msgstr "VDC'ler" msgid "Inventory Items" msgstr "Envanter Öğeleri" -#: dcim/tables/devices.py:728 +#: dcim/tables/devices.py:732 #: templates/circuits/inc/circuit_termination.html:80 #: templates/dcim/consoleport.html:81 templates/dcim/consoleserverport.html:81 #: templates/dcim/frontport.html:53 templates/dcim/frontport.html:125 @@ -5583,28 +5579,28 @@ msgstr "Envanter Öğeleri" msgid "Rear Port" msgstr "Arka Bağlantı Noktası" -#: dcim/tables/devices.py:893 templates/dcim/modulebay.html:51 +#: dcim/tables/devices.py:897 templates/dcim/modulebay.html:51 msgid "Installed Module" msgstr "Yüklü Modül" -#: dcim/tables/devices.py:896 +#: dcim/tables/devices.py:900 msgid "Module Serial" msgstr "Modül Seri" -#: dcim/tables/devices.py:900 +#: dcim/tables/devices.py:904 msgid "Module Asset Tag" msgstr "Modül Varlık Etiketi" -#: dcim/tables/devices.py:909 +#: dcim/tables/devices.py:913 msgid "Module Status" msgstr "Modül Durumu" -#: dcim/tables/devices.py:951 dcim/tables/devicetypes.py:308 +#: dcim/tables/devices.py:955 dcim/tables/devicetypes.py:308 #: templates/dcim/inventoryitem.html:41 msgid "Component" msgstr "Bileşen" -#: dcim/tables/devices.py:1006 +#: dcim/tables/devices.py:1010 msgid "Items" msgstr "Öğeler" @@ -6167,7 +6163,7 @@ msgid "Cluster type (slug)" msgstr "Küme tipi (kısa ad)" #: extras/filtersets.py:490 ipam/forms/bulk_edit.py:475 -#: ipam/forms/model_forms.py:585 virtualization/forms/filtersets.py:108 +#: ipam/forms/model_forms.py:589 virtualization/forms/filtersets.py:108 msgid "Cluster group" msgstr "Küme grubu" @@ -6298,8 +6294,8 @@ msgid "Is active" msgstr "Aktif" #: extras/forms/bulk_import.py:34 extras/forms/bulk_import.py:115 -#: extras/forms/bulk_import.py:130 extras/forms/bulk_import.py:153 -#: extras/forms/bulk_import.py:177 extras/forms/filtersets.py:114 +#: extras/forms/bulk_import.py:136 extras/forms/bulk_import.py:159 +#: extras/forms/bulk_import.py:183 extras/forms/filtersets.py:114 #: extras/forms/filtersets.py:160 extras/forms/filtersets.py:201 #: extras/forms/model_forms.py:43 extras/forms/model_forms.py:127 #: extras/forms/model_forms.py:156 extras/forms/model_forms.py:197 @@ -6308,8 +6304,8 @@ msgid "Content types" msgstr "İçerik türleri" #: extras/forms/bulk_import.py:36 extras/forms/bulk_import.py:117 -#: extras/forms/bulk_import.py:132 extras/forms/bulk_import.py:155 -#: extras/forms/bulk_import.py:179 tenancy/forms/bulk_import.py:96 +#: extras/forms/bulk_import.py:138 extras/forms/bulk_import.py:161 +#: extras/forms/bulk_import.py:185 tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Bir veya daha fazla atanmış nesne türü" @@ -6356,29 +6352,39 @@ msgstr "" "seçeneklerinin alıntılanmış dizesi: “Seçim1:First Choice, Choice2:Second " "Choice”" -#: extras/forms/bulk_import.py:182 +#: extras/forms/bulk_import.py:120 extras/models/models.py:353 +msgid "button class" +msgstr "düğme sınıfı" + +#: extras/forms/bulk_import.py:123 extras/models/models.py:357 +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:188 msgid "Action object" msgstr "Eylem nesnesi" -#: extras/forms/bulk_import.py:184 +#: extras/forms/bulk_import.py:190 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:205 +#: extras/forms/bulk_import.py:211 #, python-brace-format msgid "Webhook {name} not found" msgstr "Web kancası {name} bulunamadı" -#: extras/forms/bulk_import.py:214 +#: extras/forms/bulk_import.py:220 #, python-brace-format msgid "Script {name} not found" msgstr "Senaryo {name} bulunamadı" -#: extras/forms/bulk_import.py:236 +#: extras/forms/bulk_import.py:242 msgid "Assigned object type" msgstr "Atanan nesne türü" -#: extras/forms/bulk_import.py:241 +#: extras/forms/bulk_import.py:247 msgid "The classification of entry" msgstr "Girişin sınıflandırılması" @@ -7325,16 +7331,6 @@ msgstr "Bağlantı URL'si için Jinja2 şablon kodu" 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:353 -msgid "button class" -msgstr "düğme sınıfı" - -#: extras/models/models.py:357 -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/models/models.py:360 msgid "new window" msgstr "yeni pencere" @@ -7522,7 +7518,7 @@ msgid "staged changes" msgstr "aşamalı değişiklikler" #: extras/models/tags.py:40 -msgid "The object type(s) to which this this tag can be applied." +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 @@ -7821,7 +7817,7 @@ msgid "VLAN number (1-4094)" msgstr "VLAN numarası (1-4094)" #: ipam/filtersets.py:437 ipam/filtersets.py:441 ipam/filtersets.py:533 -#: ipam/forms/model_forms.py:444 templates/tenancy/contact.html:54 +#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54 #: tenancy/forms/bulk_edit.py:112 msgid "Address" msgstr "Adres" @@ -7990,7 +7986,7 @@ msgid "Authentication key" msgstr "Kimlik doğrulama anahtarı" #: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:369 -#: ipam/forms/model_forms.py:455 netbox/navigation/menu.py:376 +#: ipam/forms/model_forms.py:441 netbox/navigation/menu.py:376 #: templates/ipam/fhrpgroup.html:51 #: templates/wireless/inc/authentication_attrs.html:5 #: wireless/forms/bulk_edit.py:90 wireless/forms/bulk_edit.py:137 @@ -8007,11 +8003,11 @@ msgstr "Minimum çocuk VLAN VID" msgid "Maximum child VLAN VID" msgstr "Maksimum çocuk VLAN VID" -#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:527 +#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531 msgid "Scope type" msgstr "Kapsam türü" -#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:600 +#: ipam/forms/bulk_edit.py:489 ipam/forms/model_forms.py:604 #: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:39 msgid "Scope" msgstr "Kapsam" @@ -8020,8 +8016,8 @@ msgstr "Kapsam" msgid "Site & Group" msgstr "Site ve Grup" -#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:663 -#: ipam/forms/model_forms.py:697 ipam/tables/services.py:19 +#: ipam/forms/bulk_edit.py:574 ipam/forms/model_forms.py:667 +#: ipam/forms/model_forms.py:701 ipam/tables/services.py:19 #: ipam/tables/services.py:49 templates/ipam/service.html:39 #: templates/ipam/servicetemplate.html:24 msgid "Ports" @@ -8061,7 +8057,7 @@ msgid "Parent device of assigned interface (if any)" msgstr "Atanan arayüzün ana cihazı (varsa)" #: ipam/forms/bulk_import.py:310 ipam/forms/bulk_import.py:496 -#: ipam/forms/model_forms.py:691 virtualization/filtersets.py:284 +#: ipam/forms/model_forms.py:695 virtualization/filtersets.py:284 #: virtualization/filtersets.py:323 virtualization/forms/bulk_edit.py:199 #: virtualization/forms/bulk_edit.py:325 #: virtualization/forms/bulk_import.py:146 @@ -8237,8 +8233,8 @@ msgstr "Liman" #: virtualization/forms/filtersets.py:189 #: virtualization/forms/filtersets.py:234 #: virtualization/forms/model_forms.py:223 -#: virtualization/tables/virtualmachines.py:115 -#: virtualization/tables/virtualmachines.py:168 vpn/choices.py:45 +#: virtualization/tables/virtualmachines.py:128 +#: virtualization/tables/virtualmachines.py:181 vpn/choices.py:45 #: vpn/forms/filtersets.py:289 vpn/forms/model_forms.py:161 #: vpn/forms/model_forms.py:172 vpn/forms/model_forms.py:274 msgid "Virtual Machine" @@ -8261,7 +8257,7 @@ msgstr "Site/VLAN Ataması" msgid "IP Range" msgstr "IP Aralığı" -#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:454 +#: ipam/forms/model_forms.py:285 ipam/forms/model_forms.py:440 #: templates/ipam/fhrpgroup.html:19 templates/ipam/ipaddress_edit.html:52 msgid "FHRP Group" msgstr "FHRP Grubu" @@ -8274,7 +8270,7 @@ msgstr "Bunu cihaz/VM için birincil IP yapın" 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:357 ipam/models/ip.py:877 +#: ipam/forms/model_forms.py:357 ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -8287,32 +8283,25 @@ msgid "" msgstr "" "Yalnızca bir arayüze atanan IP adresleri birincil IP olarak belirlenebilir." -#: ipam/forms/model_forms.py:373 -#, 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/forms/model_forms.py:379 -#, 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/forms/model_forms.py:456 +#: ipam/forms/model_forms.py:442 msgid "Virtual IP Address" msgstr "Sanal IP Adresi" -#: ipam/forms/model_forms.py:598 ipam/forms/model_forms.py:637 +#: ipam/forms/model_forms.py:523 +msgid "Assignment already exists" +msgstr "Atama zaten var" + +#: ipam/forms/model_forms.py:602 ipam/forms/model_forms.py:641 #: ipam/tables/ip.py:250 templates/ipam/vlan_edit.html:37 #: templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN Grubu" -#: ipam/forms/model_forms.py:599 +#: ipam/forms/model_forms.py:603 msgid "Child VLANs" msgstr "Çocuk VLAN'ları" -#: ipam/forms/model_forms.py:668 ipam/forms/model_forms.py:702 +#: ipam/forms/model_forms.py:672 ipam/forms/model_forms.py:706 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -8320,15 +8309,15 @@ 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:673 templates/ipam/servicetemplate.html:12 +#: ipam/forms/model_forms.py:677 templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Hizmet Şablonu" -#: ipam/forms/model_forms.py:724 +#: ipam/forms/model_forms.py:728 msgid "Service template" msgstr "Hizmet şablonu" -#: ipam/forms/model_forms.py:754 +#: ipam/forms/model_forms.py:758 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -8494,12 +8483,12 @@ msgstr "önekleri" msgid "Cannot create prefix with /0 mask." msgstr "/0 maskesi ile önek oluşturulamıyor." -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:323 ipam/models/ip.py:854 +#: ipam/models/ip.py:323 ipam/models/ip.py:873 msgid "global table" msgstr "küresel tablo" @@ -8594,12 +8583,23 @@ msgstr "IP adresleri" msgid "Cannot create IP address with /0 mask." msgstr "/0 maskesi ile IP adresi oluşturulamıyor." -#: ipam/models/ip.py:856 +#: ipam/models/ip.py:850 +#, 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:861 +#, 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:875 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Yinelenen IP adresi şurada bulundu {table}: {ipaddress}" -#: ipam/models/ip.py:883 +#: ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Yalnızca IPv6 adreslerine SLAAC durumu atanabilir" @@ -9375,7 +9375,7 @@ msgstr "Sanal Makineler" #: templates/virtualization/virtualmachine.html:177 #: templates/virtualization/virtualmachine/base.html:32 #: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:90 virtualization/views.py:389 +#: virtualization/tables/virtualmachines.py:103 virtualization/views.py:389 msgid "Virtual Disks" msgstr "Sanal Diskler" @@ -10299,8 +10299,8 @@ msgstr "Çizelgeleme" #: templates/core/job.html:66 #, python-format -msgid "every %(interval)s seconds" -msgstr "her bir %(interval)s saniyeler" +msgid "every %(interval)s minutes" +msgstr "her bir %(interval)s dakikalar" #: templates/dcim/bulk_disconnect.html:9 #, python-format @@ -12852,66 +12852,66 @@ msgstr "Bu nesne türü için kısıtlamalar desteklenmez." msgid "Invalid filter for {model}: {error}" msgstr "Geçersiz filtre {model}: {error}" -#: users/models.py:54 +#: users/models.py:55 msgid "user" msgstr "kullanıcı" -#: users/models.py:55 +#: users/models.py:56 msgid "users" msgstr "kullanıcıları" -#: users/models.py:66 +#: users/models.py:67 msgid "A user with this username already exists." msgstr "Bu kullanıcı adına sahip bir kullanıcı zaten var." -#: users/models.py:78 vpn/models/crypto.py:42 +#: users/models.py:79 vpn/models/crypto.py:42 msgid "group" msgstr "grup" -#: users/models.py:79 +#: users/models.py:80 msgid "groups" msgstr "gruplar" -#: users/models.py:106 users/models.py:107 +#: users/models.py:107 users/models.py:108 msgid "user preferences" msgstr "kullanıcı tercihleri" -#: users/models.py:174 +#: users/models.py:175 #, 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.py:186 +#: users/models.py:187 #, 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.py:252 +#: users/models.py:253 msgid "expires" msgstr "süresi dolmak" -#: users/models.py:257 +#: users/models.py:258 msgid "last used" msgstr "son kullanılan" -#: users/models.py:262 +#: users/models.py:263 msgid "key" msgstr "anahtar" -#: users/models.py:268 +#: users/models.py:269 msgid "write enabled" msgstr "yazma etkin" -#: users/models.py:270 +#: users/models.py:271 msgid "Permit create/update/delete operations using this key" msgstr "" "Bu anahtarı kullanarak oluşturma/güncelleme/silme işlemlerine izin verin" -#: users/models.py:281 +#: users/models.py:282 msgid "allowed IPs" msgstr "izin verilen IP'ler" -#: users/models.py:283 +#: users/models.py:284 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\"" @@ -12920,32 +12920,32 @@ msgstr "" "olmadan boş bırakın. Örn: “10.1.1.0/24, 192.168.10.16/32, 2001: DB 8:1: " ":/64\"" -#: users/models.py:291 +#: users/models.py:296 msgid "token" msgstr "jeton" -#: users/models.py:292 +#: users/models.py:297 msgid "tokens" msgstr "jetonlar" -#: users/models.py:373 +#: users/models.py:378 msgid "The list of actions granted by this permission" msgstr "Bu izin tarafından verilen eylemlerin listesi" -#: users/models.py:378 +#: users/models.py:383 msgid "constraints" msgstr "kısıtlamaları" -#: users/models.py:379 +#: users/models.py:384 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.py:386 +#: users/models.py:391 msgid "permission" msgstr "izin" -#: users/models.py:387 +#: users/models.py:392 msgid "permissions" msgstr "izinler" @@ -13215,44 +13215,53 @@ 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:65 -#: utilities/forms/utils.py:77 utilities/forms/utils.py:80 +#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 +#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Menzil”{value}“geçersiz." -#: utilities/forms/utils.py:225 +#: utilities/forms/utils.py:74 +#, python-brace-format +msgid "" +"Invalid range: Ending value ({end}) must be greater than beginning value " +"({begin})." +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 #, 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:231 +#: 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:240 +#: 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:263 +#: 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:265 +#: 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:269 +#: 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:277 +#: utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Gerekli sütun başlığı”{header}“Bulunamadı." @@ -13882,6 +13891,11 @@ msgstr "Teklif" msgid "Assigned Object Type" msgstr "Atanan Nesne Türü" +#: vpn/forms/model_forms.py:94 vpn/forms/model_forms.py:129 +#: vpn/forms/model_forms.py:241 vpn/tables/tunnels.py:91 +msgid "Tunnel interface" +msgstr "Tünel arayüzü" + #: vpn/forms/model_forms.py:147 msgid "First Termination" msgstr "İlk Fesih" diff --git a/netbox/users/forms/filtersets.py b/netbox/users/forms/filtersets.py index 4ae2bd729..0e9e99a83 100644 --- a/netbox/users/forms/filtersets.py +++ b/netbox/users/forms/filtersets.py @@ -11,21 +11,21 @@ from utilities.forms.fields import DynamicModelMultipleChoiceField from utilities.forms.widgets import DateTimePicker __all__ = ( - 'GroupFilterForm', + 'NetBoxGroupFilterForm', 'ObjectPermissionFilterForm', - 'UserFilterForm', + 'NetBoxUserFilterForm', 'TokenFilterForm', ) -class GroupFilterForm(NetBoxModelFilterSetForm): +class NetBoxGroupFilterForm(NetBoxModelFilterSetForm): model = NetBoxGroup fieldsets = ( (None, ('q', 'filter_id',)), ) -class UserFilterForm(NetBoxModelFilterSetForm): +class NetBoxUserFilterForm(NetBoxModelFilterSetForm): model = NetBoxUser fieldsets = ( (None, ('q', 'filter_id',)), diff --git a/netbox/users/models.py b/netbox/users/models.py index 52ce55e6c..160f49ac4 100644 --- a/netbox/users/models.py +++ b/netbox/users/models.py @@ -17,6 +17,7 @@ from netaddr import IPNetwork from core.models import ContentType from ipam.fields import IPNetworkField from netbox.config import get_config +from netbox.models.features import CloningMixin from utilities.querysets import RestrictedQuerySet from utilities.utils import flatten_dict from .constants import * @@ -234,7 +235,7 @@ def create_userconfig(instance, created, raw=False, **kwargs): # REST API # -class Token(models.Model): +class Token(CloningMixin, models.Model): """ An API token used for user authentication. This extends the stock model to allow each user to have multiple tokens. It also supports setting an expiration time and toggling write ability. @@ -285,6 +286,10 @@ class Token(models.Model): ), ) + clone_fields = ( + 'user', 'expires', 'write_enabled', 'description', 'allowed_ips', + ) + objects = RestrictedQuerySet.as_manager() class Meta: diff --git a/netbox/users/views.py b/netbox/users/views.py index 2e7a47c12..e0fda403e 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -58,7 +58,7 @@ class TokenBulkDeleteView(generic.BulkDeleteView): class UserListView(generic.ObjectListView): queryset = NetBoxUser.objects.all() filterset = filtersets.UserFilterSet - filterset_form = forms.UserFilterForm + filterset_form = forms.NetBoxUserFilterForm table = tables.UserTable @@ -112,7 +112,7 @@ class UserBulkDeleteView(generic.BulkDeleteView): class GroupListView(generic.ObjectListView): queryset = NetBoxGroup.objects.annotate(users_count=Count('user')) filterset = filtersets.GroupFilterSet - filterset_form = forms.GroupFilterForm + filterset_form = forms.NetBoxGroupFilterForm table = tables.GroupTable diff --git a/netbox/utilities/forms/forms.py b/netbox/utilities/forms/forms.py index 54c9e41cb..93227b1d0 100644 --- a/netbox/utilities/forms/forms.py +++ b/netbox/utilities/forms/forms.py @@ -70,6 +70,12 @@ class CSVModelForm(forms.ModelForm): """ ModelForm used for the import of objects in CSV format. """ + id = forms.IntegerField( + label=_('ID'), + required=False, + help_text=_('Numeric ID of an existing object to update (if not creating a new object)') + ) + def __init__(self, *args, headers=None, **kwargs): self.headers = headers or {} super().__init__(*args, **kwargs) diff --git a/netbox/utilities/testing/base.py b/netbox/utilities/testing/base.py index aa2093a9a..52e5d66ca 100644 --- a/netbox/utilities/testing/base.py +++ b/netbox/utilities/testing/base.py @@ -10,10 +10,11 @@ from django.test import Client, TestCase as _TestCase from netaddr import IPNetwork from taggit.managers import TaggableManager +from netbox.models.features import CustomFieldsMixin from users.models import ObjectPermission from utilities.permissions import resolve_permission_ct from utilities.utils import content_type_identifier -from .utils import extract_form_failures +from .utils import DUMMY_CF_DATA, extract_form_failures __all__ = ( 'ModelTestCase', @@ -166,8 +167,12 @@ class ModelTestCase(TestCase): model_dict = self.model_to_dict(instance, fields=fields, api=api) # Omit any dictionary keys which are not instance attributes or have been excluded - relevant_data = { + model_data = { k: v for k, v in data.items() if hasattr(instance, k) and k not in exclude } - self.assertDictEqual(model_dict, relevant_data) + self.assertDictEqual(model_dict, model_data) + + # Validate any custom field data, if present + if getattr(instance, 'custom_field_data', None): + self.assertDictEqual(instance.custom_field_data, DUMMY_CF_DATA) diff --git a/netbox/utilities/testing/utils.py b/netbox/utilities/testing/utils.py index fd6d72e27..238f8170e 100644 --- a/netbox/utilities/testing/utils.py +++ b/netbox/utilities/testing/utils.py @@ -1,13 +1,16 @@ +import json import logging import re from contextlib import contextmanager from django.contrib.auth import get_user_model from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType from django.utils.text import slugify from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site -from extras.models import Tag +from extras.choices import CustomFieldTypeChoices +from extras.models import CustomField, Tag from virtualization.models import Cluster, ClusterType, VirtualMachine @@ -102,3 +105,42 @@ def disable_warnings(logger_name): logger.setLevel(logging.ERROR) yield logger.setLevel(current_level) + + +# +# Custom field testing +# + +DUMMY_CF_DATA = { + 'text_field': 'foo123', + 'integer_field': 456, + 'decimal_field': 456.12, + 'boolean_field': True, + 'json_field': {'abc': 123}, +} + + +def add_custom_field_data(form_data, model): + """ + Create some custom fields for the model and add a value for each to the form data. + + Args: + form_data: The dictionary of form data to be updated + model: The model of the object the form seeks to create or modify + """ + content_type = ContentType.objects.get_for_model(model) + custom_fields = ( + CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo'), + 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_JSON, name='json_field', default='{"x": "y"}'), + ) + CustomField.objects.bulk_create(custom_fields) + for cf in custom_fields: + cf.content_types.set([content_type]) + + form_data.update({ + f'cf_{k}': v if type(v) is str else json.dumps(v) + for k, v in DUMMY_CF_DATA.items() + }) diff --git a/netbox/utilities/testing/views.py b/netbox/utilities/testing/views.py index daa44b905..22371db3c 100644 --- a/netbox/utilities/testing/views.py +++ b/netbox/utilities/testing/views.py @@ -10,11 +10,11 @@ from django.utils.translation import gettext as _ from extras.choices import ObjectChangeActionChoices from extras.models import ObjectChange -from netbox.models.features import ChangeLoggingMixin +from netbox.models.features import ChangeLoggingMixin, CustomFieldsMixin from users.models import ObjectPermission from utilities.choices import CSVDelimiterChoices, ImportFormatChoices from .base import ModelTestCase -from .utils import disable_warnings, post_data +from .utils import add_custom_field_data, disable_warnings, post_data __all__ = ( 'ModelViewTestCase', @@ -26,7 +26,6 @@ __all__ = ( # UI Tests # - class ModelViewTestCase(ModelTestCase): """ Base TestCase for model views. Subclass to test individual views. @@ -166,6 +165,10 @@ class ViewTestCases: # Try GET with model-level permission self.assertHttpStatus(self.client.get(self._get_url('add')), 200) + # Add custom field data if the model supports it + if issubclass(self.model, CustomFieldsMixin): + add_custom_field_data(self.form_data, self.model) + # Try POST with model-level permission initial_count = self._get_queryset().count() request = { @@ -265,6 +268,10 @@ class ViewTestCases: # Try GET with model-level permission self.assertHttpStatus(self.client.get(self._get_url('edit', instance)), 200) + # Add custom field data if the model supports it + if issubclass(self.model, CustomFieldsMixin): + add_custom_field_data(self.form_data, self.model) + # Try POST with model-level permission request = { 'path': self._get_url('edit', instance), diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index 34e4037e9..a54643e62 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -76,7 +76,7 @@ class VirtualMachineSerializer(NetBoxModelSerializer): role = NestedDeviceRoleSerializer(required=False, allow_null=True) tenant = NestedTenantSerializer(required=False, allow_null=True) platform = NestedPlatformSerializer(required=False, allow_null=True) - primary_ip = NestedIPAddressSerializer(read_only=True) + primary_ip = NestedIPAddressSerializer(read_only=True, allow_null=True) primary_ip4 = NestedIPAddressSerializer(required=False, allow_null=True) primary_ip6 = NestedIPAddressSerializer(required=False, allow_null=True) config_template = NestedConfigTemplateSerializer(required=False, allow_null=True, default=None) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 6019fc227..ec19a1d22 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -388,7 +388,7 @@ class VirtualMachineVirtualDisksView(generic.ObjectChildrenView): tab = ViewTab( label=_('Virtual Disks'), badge=lambda obj: obj.virtual_disk_count, - permission='virtualization.view_virtual_disk', + permission='virtualization.view_virtualdisk', weight=500 ) actions = { diff --git a/netbox/vpn/api/serializers.py b/netbox/vpn/api/serializers.py index 5f6fcd5f7..36ccf28de 100644 --- a/netbox/vpn/api/serializers.py +++ b/netbox/vpn/api/serializers.py @@ -98,6 +98,9 @@ class TunnelTerminationSerializer(NetBoxModelSerializer): @extend_schema_field(serializers.JSONField(allow_null=True)) def get_termination(self, obj): + if not obj.termination: + return None + serializer = get_serializer_for_model(obj.termination, prefix=NESTED_SERIALIZER_PREFIX) context = {'request': self.context['request']} return serializer(obj.termination, context=context).data diff --git a/netbox/vpn/filtersets.py b/netbox/vpn/filtersets.py index 0647838a8..10f0834fb 100644 --- a/netbox/vpn/filtersets.py +++ b/netbox/vpn/filtersets.py @@ -136,6 +136,17 @@ class IKEProposalFilterSet(NetBoxModelFilterSet): group = django_filters.MultipleChoiceFilter( choices=DHGroupChoices ) + ike_policy_id = django_filters.ModelMultipleChoiceFilter( + field_name='ike_policies', + queryset=IKEPolicy.objects.all(), + label=_('IKE policy (ID)'), + ) + ike_policy = django_filters.ModelMultipleChoiceFilter( + field_name='ike_policies__name', + queryset=IKEPolicy.objects.all(), + to_field_name='name', + label=_('IKE policy (name)'), + ) class Meta: model = IKEProposal diff --git a/netbox/vpn/forms/model_forms.py b/netbox/vpn/forms/model_forms.py index f936de88c..adf358be7 100644 --- a/netbox/vpn/forms/model_forms.py +++ b/netbox/vpn/forms/model_forms.py @@ -91,7 +91,7 @@ class TunnelCreateForm(TunnelForm): termination1_termination = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - label=_('Interface'), + label=_('Tunnel interface'), query_params={ 'device_id': '$termination1_parent', } @@ -126,7 +126,7 @@ class TunnelCreateForm(TunnelForm): termination2_termination = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, - label=_('Interface'), + label=_('Tunnel interface'), query_params={ 'device_id': '$termination2_parent', } @@ -238,7 +238,7 @@ class TunnelTerminationForm(NetBoxModelForm): ) termination = DynamicModelChoiceField( queryset=Interface.objects.all(), - label=_('Interface'), + label=_('Tunnel interface'), query_params={ 'device_id': '$parent', } diff --git a/netbox/vpn/search.py b/netbox/vpn/search.py index 066bc68bb..c1914dc22 100644 --- a/netbox/vpn/search.py +++ b/netbox/vpn/search.py @@ -75,6 +75,7 @@ class L2VPNIndex(SearchIndex): fields = ( ('name', 100), ('slug', 110), + ('identifier', 200), ('description', 500), ('comments', 5000), ) diff --git a/netbox/vpn/tables/l2vpn.py b/netbox/vpn/tables/l2vpn.py index 91fddbd66..9a614ab98 100644 --- a/netbox/vpn/tables/l2vpn.py +++ b/netbox/vpn/tables/l2vpn.py @@ -74,7 +74,7 @@ class L2VPNTerminationTable(NetBoxTable): verbose_name=_('Object Site') ) tags = columns.TagColumn( - url_name='ipam:l2vpntermination_list' + url_name='vpn:l2vpntermination_list' ) class Meta(NetBoxTable.Meta): diff --git a/netbox/vpn/tables/tunnels.py b/netbox/vpn/tables/tunnels.py index bc591c1e6..cf4230652 100644 --- a/netbox/vpn/tables/tunnels.py +++ b/netbox/vpn/tables/tunnels.py @@ -88,7 +88,7 @@ class TunnelTerminationTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('Host') ) termination = tables.Column( - verbose_name=_('Interface'), + verbose_name=_('Tunnel interface'), linkify=True ) ip_addresses = tables.ManyToManyColumn( diff --git a/netbox/vpn/tests/test_filtersets.py b/netbox/vpn/tests/test_filtersets.py index d4e80750d..f11e63f10 100644 --- a/netbox/vpn/tests/test_filtersets.py +++ b/netbox/vpn/tests/test_filtersets.py @@ -331,6 +331,16 @@ class IKEProposalTestCase(TestCase, ChangeLoggedFilterSetTests): ) IKEProposal.objects.bulk_create(ike_proposals) + ike_policies = ( + IKEPolicy(name='IKE Policy 1'), + IKEPolicy(name='IKE Policy 2'), + IKEPolicy(name='IKE Policy 3'), + ) + IKEPolicy.objects.bulk_create(ike_policies) + ike_policies[0].proposals.add(ike_proposals[0]) + ike_policies[1].proposals.add(ike_proposals[1]) + ike_policies[2].proposals.add(ike_proposals[2]) + def test_q(self): params = {'q': 'foobar1'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) @@ -369,6 +379,13 @@ class IKEProposalTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'sa_lifetime': [1000, 2000]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_ike_policy(self): + ike_policies = IKEPolicy.objects.all()[:2] + params = {'ike_policy_id': [ike_policies[0].pk, ike_policies[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'ike_policy': [ike_policies[0].name, ike_policies[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class IKEPolicyTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = IKEPolicy.objects.all() diff --git a/netbox/wireless/forms/bulk_import.py b/netbox/wireless/forms/bulk_import.py index c0e2dfb54..38bc37360 100644 --- a/netbox/wireless/forms/bulk_import.py +++ b/netbox/wireless/forms/bulk_import.py @@ -42,7 +42,7 @@ class WirelessLANImportForm(NetBoxModelImportForm): status = CSVChoiceField( label=_('Status'), choices=WirelessLANStatusChoices, - help_text='Operational status' + help_text=_('Operational status') ) vlan = CSVModelChoiceField( label=_('VLAN'), diff --git a/requirements.txt b/requirements.txt index 39922c9b5..0cf22c7d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,34 +2,34 @@ bleach==6.1.0 Django==4.2.11 django-cors-headers==4.3.1 django-debug-toolbar==4.3.0 -django-filter==24.1 +django-filter==24.2 django-graphiql-debug-toolbar==0.2.0 django-mptt==0.14.0 django-pglocks==1.0.4 django-prometheus==2.3.1 django-redis==5.4.0 django-rich==1.8.0 -django-rq==2.10.1 +django-rq==2.10.2 django-taggit==5.0.1 django-tables2==2.7.0 django-timezone-field==6.1.0 djangorestframework==3.14.0 -drf-spectacular==0.27.1 -drf-spectacular-sidecar==2024.3.4 +drf-spectacular==0.27.2 +drf-spectacular-sidecar==2024.5.1 feedparser==6.0.11 graphene-django==3.0.0 -gunicorn==21.2.0 +gunicorn==22.0.0 Jinja2==3.1.3 -Markdown==3.5.2 -mkdocs-material==9.5.13 -mkdocstrings[python-legacy]==0.24.1 +Markdown==3.6 +mkdocs-material==9.5.20 +mkdocstrings[python-legacy]==0.25.0 netaddr==1.2.1 -Pillow==10.2.0 +Pillow==10.3.0 psycopg[binary,pool]==3.1.18 PyYAML==6.0.1 requests==2.31.0 -social-auth-app-django==5.4.0 -social-auth-core[openidconnect]==4.5.3 +social-auth-app-django==5.4.1 +social-auth-core==4.5.4 svgwrite==1.4.3 -tablib==3.5.0 +tablib==3.6.1 tzdata==2024.1