mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 04:22:01 -06:00
Merge feature
This commit is contained in:
parent
92a5623016
commit
d1ea60f082
@ -15,7 +15,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: NetBox version
|
label: NetBox version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.2.3
|
placeholder: v4.2.4
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
2
.github/ISSUE_TEMPLATE/02-bug_report.yaml
vendored
2
.github/ISSUE_TEMPLATE/02-bug_report.yaml
vendored
@ -27,7 +27,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: NetBox Version
|
label: NetBox Version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.2.3
|
placeholder: v4.2.4
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://app.transifex.com
|
host = https://app.transifex.com
|
||||||
|
|
||||||
[o:netbox-community:p:netbox:r:9cbf4fcf95b3d92e4ebbf1a5e5d1caee]
|
[o:netbox-community:p:netbox:r:034999968a7366ba27a8bdf1ab63bf42]
|
||||||
file_filter = netbox/translations/<lang>/LC_MESSAGES/django.po
|
file_filter = netbox/translations/<lang>/LC_MESSAGES/django.po
|
||||||
source_file = netbox/translations/en/LC_MESSAGES/django.po
|
source_file = netbox/translations/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
@ -8,6 +8,8 @@ This documentation describes the process of packaging and publishing a new NetBo
|
|||||||
|
|
||||||
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
||||||
|
|
||||||
|
For patch releases (e.g. upgrading from v4.2.2 to v4.2.3), begin at the [patch releases](#patch-releases) heading below. For minor or major releases, complete the entire checklist.
|
||||||
|
|
||||||
## Minor Version Releases
|
## Minor Version Releases
|
||||||
|
|
||||||
### Address Constrained Dependencies
|
### Address Constrained Dependencies
|
||||||
@ -85,7 +87,20 @@ In cases where upgrading a dependency to its most recent release is breaking, it
|
|||||||
|
|
||||||
### Update UI Dependencies
|
### Update UI Dependencies
|
||||||
|
|
||||||
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution.
|
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn bundle
|
||||||
|
yarn run v1.22.19
|
||||||
|
$ node bundle.js
|
||||||
|
✅ Bundled source file 'styles/external.scss' to 'netbox-external.css'
|
||||||
|
✅ Bundled source file 'styles/netbox.scss' to 'netbox.css'
|
||||||
|
✅ Bundled source file 'styles/svg/rack_elevation.scss' to 'rack_elevation.css'
|
||||||
|
✅ Bundled source file 'styles/svg/cable_trace.scss' to 'cable_trace.css'
|
||||||
|
✅ Bundled source file 'index.ts' to 'netbox.js'
|
||||||
|
✅ Copied graphiql files
|
||||||
|
Done in 1.00s.
|
||||||
|
```
|
||||||
|
|
||||||
### Rebuild the Device Type Definition Schema
|
### Rebuild the Device Type Definition Schema
|
||||||
|
|
||||||
@ -116,9 +131,12 @@ Then, compile these portable (`.po`) files for use in the application:
|
|||||||
|
|
||||||
### Update Version and Changelog
|
### Update Version and Changelog
|
||||||
|
|
||||||
* Update the version and published date in `release.yaml` with the current version & date. Add a designation (e.g.g `beta1`) if applicable.
|
* Update the version number and date in `netbox/release.yaml`. Add or remove the designation (e.g. `beta1`) if applicable.
|
||||||
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
||||||
* Replace the "FUTURE" placeholder in the release notes with the current date.
|
* Add a section for this release at the top of the changelog page for the minor version (e.g. `docs/release-notes/version-4.2.md`) listing all relevant changes made in this release.
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Put yourself in the shoes of the user when recording change notes. Focus on the effect that each change has for the end user, rather than the specific bits of code that were modified in a PR. Ensure that each message conveys meaning absent context of the initial feature request or bug report. Remember to include key words or phrases (such as exception names) that can be easily searched.
|
||||||
|
|
||||||
### Submit a Pull Request
|
### Submit a Pull Request
|
||||||
|
|
||||||
@ -126,6 +144,9 @@ Commit the above changes and submit a pull request titled **"Release vX.Y.Z"** t
|
|||||||
|
|
||||||
Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch.
|
Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
To ensure a streamlined review process, the pull request for a release **must** be limited to the changes outlined in this document. A release PR must never include functional changes to the application: Any unrelated "cleanup" needs to be captured in a separate PR prior to the release being shipped.
|
||||||
|
|
||||||
### Create a New Release
|
### Create a New Release
|
||||||
|
|
||||||
Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters.
|
Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters.
|
||||||
|
@ -22,7 +22,7 @@ NetBox generally follows the [Django style guide](https://docs.djangoproject.com
|
|||||||
|
|
||||||
### Linting
|
### Linting
|
||||||
|
|
||||||
The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style. A [pre-commit hook](./getting-started.md#3-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `ruff` manually, run:
|
The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style, and is run automatically by [pre-commit](./getting-started.md#5-install-pre-commit). To invoke `ruff` manually, run:
|
||||||
|
|
||||||
```
|
```
|
||||||
ruff check netbox/
|
ruff check netbox/
|
||||||
|
@ -30,7 +30,7 @@ To download translated strings automatically, you'll need to:
|
|||||||
1. Install the [Transifex CLI client](https://github.com/transifex/cli)
|
1. Install the [Transifex CLI client](https://github.com/transifex/cli)
|
||||||
2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/)
|
2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/)
|
||||||
|
|
||||||
Once you have the client set up, run the following command:
|
Once you have the client set up, run the following command from the project root (e.g. `/opt/netbox/`):
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
TX_TOKEN=$TOKEN tx pull
|
TX_TOKEN=$TOKEN tx pull
|
||||||
@ -46,6 +46,9 @@ Once retrieved, the updated strings need to be compiled into new `.mo` files so
|
|||||||
|
|
||||||
Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.)
|
Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.)
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Run `git status` to check that both `*.mo` & `*.po` files have been updated as expected.
|
||||||
|
|
||||||
## Proposing New Languages
|
## Proposing New Languages
|
||||||
|
|
||||||
If you'd like to add support for a new language to NetBox, the first step is to [submit a GitHub issue](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+translation&projects=&template=translation.yaml) to capture the proposal. While we'd like to add as many languages as possible, we do need to limit the rate at which new languages are added. New languages will be selected according to community interest and the number of volunteers who sign up as translators.
|
If you'd like to add support for a new language to NetBox, the first step is to [submit a GitHub issue](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+translation&projects=&template=translation.yaml) to capture the proposal. While we'd like to add as many languages as possible, we do need to limit the rate at which new languages are added. New languages will be selected according to community interest and the number of volunteers who sign up as translators.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## What is a REST API?
|
## What is a REST API?
|
||||||
|
|
||||||
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
|
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/REST). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb:
|
||||||
|
|
||||||
* `GET`: Retrieve an object or list of objects
|
* `GET`: Retrieve an object or list of objects
|
||||||
* `POST`: Create an object
|
* `POST`: Create an object
|
||||||
|
@ -1,5 +1,32 @@
|
|||||||
# NetBox v4.2
|
# NetBox v4.2
|
||||||
|
|
||||||
|
## v4.2.4 (2025-02-21)
|
||||||
|
|
||||||
|
### Enhancements
|
||||||
|
|
||||||
|
* [#17309](https://github.com/netbox-community/netbox/issues/17309) - Omit empty counts in related object tables
|
||||||
|
* [#18277](https://github.com/netbox-community/netbox/issues/18277) - Improve multi-table inheritance in serialization of change-logged models
|
||||||
|
* [#18286](https://github.com/netbox-community/netbox/issues/18286) - Add more job duration choices
|
||||||
|
* [#18357](https://github.com/netbox-community/netbox/issues/18357) - Display author name in plugin list for locally installed plugins
|
||||||
|
* [#18408](https://github.com/netbox-community/netbox/issues/18408) - Add Paused status for virtual machines
|
||||||
|
* [#18584](https://github.com/netbox-community/netbox/issues/18584) - Add rack type column to manufacturer list
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* [#17436](https://github.com/netbox-community/netbox/issues/17436) - Fix {module} replacement in module bays
|
||||||
|
* [#18013](https://github.com/netbox-community/netbox/issues/18013) - Limit object type to selected object in change log filter
|
||||||
|
* [#18241](https://github.com/netbox-community/netbox/issues/18241) - Default logging level of custom scripts changed to INFO
|
||||||
|
* [#18247](https://github.com/netbox-community/netbox/issues/18247) - Fix visibility of disabled cable paths in dark mode
|
||||||
|
* [#18480](https://github.com/netbox-community/netbox/issues/18480) - Clean data passed to script in runscript command
|
||||||
|
* [#18555](https://github.com/netbox-community/netbox/issues/18555) - Add default get_absolute_url method to plugin models
|
||||||
|
* [#18585](https://github.com/netbox-community/netbox/issues/18585) - Fix filtering circuits by location
|
||||||
|
* [#18593](https://github.com/netbox-community/netbox/issues/18593) - Fix "Create & Add Another" IP Address workflow
|
||||||
|
* [#18594](https://github.com/netbox-community/netbox/issues/18594) - Enable sorting by ASN count on site and provider lists
|
||||||
|
* [#18619](https://github.com/netbox-community/netbox/issues/18619) - Ensure shift-click selection selects only visible list items
|
||||||
|
* [#18674](https://github.com/netbox-community/netbox/issues/18674) - Preserve form values when selecting speed on circuit termination
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## v4.2.3 (2025-02-04)
|
## v4.2.3 (2025-02-04)
|
||||||
|
|
||||||
### Enhancements
|
### Enhancements
|
||||||
|
@ -64,6 +64,8 @@ markdown_extensions:
|
|||||||
format: !!python/name:pymdownx.superfences.fence_code_format
|
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||||
- pymdownx.tabbed:
|
- pymdownx.tabbed:
|
||||||
alternate_style: true
|
alternate_style: true
|
||||||
|
not_in_nav: |
|
||||||
|
/index.md
|
||||||
nav:
|
nav:
|
||||||
- Introduction: 'introduction.md'
|
- Introduction: 'introduction.md'
|
||||||
- Features:
|
- Features:
|
||||||
|
@ -234,6 +234,11 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte
|
|||||||
to_field_name='slug',
|
to_field_name='slug',
|
||||||
label=_('Site (slug)'),
|
label=_('Site (slug)'),
|
||||||
)
|
)
|
||||||
|
location_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
field_name='terminations___location',
|
||||||
|
label=_('Location (ID)'),
|
||||||
|
queryset=Location.objects.all(),
|
||||||
|
)
|
||||||
termination_a_id = django_filters.ModelMultipleChoiceFilter(
|
termination_a_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
queryset=CircuitTermination.objects.all(),
|
queryset=CircuitTermination.objects.all(),
|
||||||
label=_('Termination A (ID)'),
|
label=_('Termination A (ID)'),
|
||||||
|
@ -126,7 +126,7 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi
|
|||||||
'type_id', 'status', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit',
|
'type_id', 'status', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit',
|
||||||
name=_('Attributes')
|
name=_('Attributes')
|
||||||
),
|
),
|
||||||
FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')),
|
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')),
|
||||||
FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
|
FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
|
||||||
FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
|
FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
|
||||||
)
|
)
|
||||||
@ -181,6 +181,11 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi
|
|||||||
},
|
},
|
||||||
label=_('Site')
|
label=_('Site')
|
||||||
)
|
)
|
||||||
|
location_id = DynamicModelMultipleChoiceField(
|
||||||
|
queryset=Location.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Location')
|
||||||
|
)
|
||||||
install_date = forms.DateField(
|
install_date = forms.DateField(
|
||||||
label=_('Install date'),
|
label=_('Install date'),
|
||||||
required=False,
|
required=False,
|
||||||
|
@ -349,9 +349,8 @@ class CircuitTermination(
|
|||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
# Must define either site *or* provider network
|
|
||||||
if self.termination is None:
|
if self.termination is None:
|
||||||
raise ValidationError(_("A circuit termination must attach to termination."))
|
raise ValidationError(_("A circuit termination must attach to a terminating object."))
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
# Cache objects associated with the terminating object (for filtering)
|
# Cache objects associated with the terminating object (for filtering)
|
||||||
|
@ -33,7 +33,6 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable):
|
|||||||
verbose_name=_('ASNs')
|
verbose_name=_('ASNs')
|
||||||
)
|
)
|
||||||
asn_count = columns.LinkedCountColumn(
|
asn_count = columns.LinkedCountColumn(
|
||||||
accessor=tables.A('asns__count'),
|
|
||||||
viewname='ipam:asn_list',
|
viewname='ipam:asn_list',
|
||||||
url_params={'provider_id': 'pk'},
|
url_params={'provider_id': 'pk'},
|
||||||
verbose_name=_('ASN Count')
|
verbose_name=_('ASN Count')
|
||||||
|
@ -3,8 +3,10 @@ from django.test import TestCase
|
|||||||
from circuits.choices import *
|
from circuits.choices import *
|
||||||
from circuits.filtersets import *
|
from circuits.filtersets import *
|
||||||
from circuits.models import *
|
from circuits.models import *
|
||||||
from dcim.choices import InterfaceTypeChoices
|
from dcim.choices import InterfaceTypeChoices, LocationStatusChoices
|
||||||
from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Region, Site, SiteGroup
|
from dcim.models import (
|
||||||
|
Cable, Device, DeviceRole, DeviceType, Interface, Location, Manufacturer, Region, Site, SiteGroup
|
||||||
|
)
|
||||||
from ipam.models import ASN, RIR
|
from ipam.models import ASN, RIR
|
||||||
from netbox.choices import DistanceUnitChoices
|
from netbox.choices import DistanceUnitChoices
|
||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
@ -225,6 +227,17 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
)
|
)
|
||||||
ProviderNetwork.objects.bulk_create(provider_networks)
|
ProviderNetwork.objects.bulk_create(provider_networks)
|
||||||
|
|
||||||
|
locations = (
|
||||||
|
Location.objects.create(
|
||||||
|
site=sites[0], name='Test Location 1', slug='test-location-1',
|
||||||
|
status=LocationStatusChoices.STATUS_ACTIVE,
|
||||||
|
),
|
||||||
|
Location.objects.create(
|
||||||
|
site=sites[1], name='Test Location 2', slug='test-location-2',
|
||||||
|
status=LocationStatusChoices.STATUS_ACTIVE,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
circuits = (
|
circuits = (
|
||||||
Circuit(
|
Circuit(
|
||||||
provider=providers[0],
|
provider=providers[0],
|
||||||
@ -305,7 +318,9 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
|
|
||||||
circuit_terminations = ((
|
circuit_terminations = ((
|
||||||
CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'),
|
CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'),
|
||||||
|
CircuitTermination(circuit=circuits[0], termination=locations[0], term_side='Z'),
|
||||||
CircuitTermination(circuit=circuits[1], termination=sites[1], term_side='A'),
|
CircuitTermination(circuit=circuits[1], termination=sites[1], term_side='A'),
|
||||||
|
CircuitTermination(circuit=circuits[1], termination=locations[1], term_side='Z'),
|
||||||
CircuitTermination(circuit=circuits[2], termination=sites[2], term_side='A'),
|
CircuitTermination(circuit=circuits[2], termination=sites[2], term_side='A'),
|
||||||
CircuitTermination(circuit=circuits[3], termination=provider_networks[0], term_side='A'),
|
CircuitTermination(circuit=circuits[3], termination=provider_networks[0], term_side='A'),
|
||||||
CircuitTermination(circuit=circuits[4], termination=provider_networks[1], term_side='A'),
|
CircuitTermination(circuit=circuits[4], termination=provider_networks[1], term_side='A'),
|
||||||
@ -395,6 +410,11 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
params = {'site': [sites[0].slug, sites[1].slug]}
|
params = {'site': [sites[0].slug, sites[1].slug]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
|
def test_location(self):
|
||||||
|
location_ids = Location.objects.values_list('id', flat=True)[:2]
|
||||||
|
params = {'location_id': location_ids}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_tenant(self):
|
def test_tenant(self):
|
||||||
tenants = Tenant.objects.all()[:2]
|
tenants = Tenant.objects.all()[:2]
|
||||||
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
|
params = {'tenant_id': [tenants[0].pk, tenants[1].pk]}
|
||||||
|
@ -4,6 +4,7 @@ from django.shortcuts import get_object_or_404, redirect, render
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from dcim.views import PathTraceView
|
from dcim.views import PathTraceView
|
||||||
|
from ipam.models import ASN
|
||||||
from netbox.views import generic
|
from netbox.views import generic
|
||||||
from tenancy.views import ObjectContactsView
|
from tenancy.views import ObjectContactsView
|
||||||
from utilities.forms import ConfirmationForm
|
from utilities.forms import ConfirmationForm
|
||||||
@ -20,7 +21,8 @@ from .models import *
|
|||||||
@register_model_view(Provider, 'list', path='', detail=False)
|
@register_model_view(Provider, 'list', path='', detail=False)
|
||||||
class ProviderListView(generic.ObjectListView):
|
class ProviderListView(generic.ObjectListView):
|
||||||
queryset = Provider.objects.annotate(
|
queryset = Provider.objects.annotate(
|
||||||
count_circuits=count_related(Circuit, 'provider')
|
count_circuits=count_related(Circuit, 'provider'),
|
||||||
|
asn_count=count_related(ASN, 'providers'),
|
||||||
)
|
)
|
||||||
filterset = filtersets.ProviderFilterSet
|
filterset = filtersets.ProviderFilterSet
|
||||||
filterset_form = forms.ProviderFilterForm
|
filterset_form = forms.ProviderFilterForm
|
||||||
|
@ -81,8 +81,10 @@ class JobIntervalChoices(ChoiceSet):
|
|||||||
CHOICES = (
|
CHOICES = (
|
||||||
(INTERVAL_MINUTELY, _('Minutely')),
|
(INTERVAL_MINUTELY, _('Minutely')),
|
||||||
(INTERVAL_HOURLY, _('Hourly')),
|
(INTERVAL_HOURLY, _('Hourly')),
|
||||||
|
(INTERVAL_HOURLY * 12, _('12 hours')),
|
||||||
(INTERVAL_DAILY, _('Daily')),
|
(INTERVAL_DAILY, _('Daily')),
|
||||||
(INTERVAL_WEEKLY, _('Weekly')),
|
(INTERVAL_WEEKLY, _('Weekly')),
|
||||||
|
(INTERVAL_DAILY * 30, _('30 days')),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ class DataFileFilterForm(NetBoxModelFilterSetForm):
|
|||||||
|
|
||||||
|
|
||||||
class JobFilterForm(SavedFiltersMixin, FilterForm):
|
class JobFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = Job
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('object_type', 'status', name=_('Attributes')),
|
FieldSet('object_type', 'status', name=_('Attributes')),
|
||||||
@ -162,6 +163,7 @@ class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigRevisionFilterForm(SavedFiltersMixin, FilterForm):
|
class ConfigRevisionFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = ConfigRevision
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
)
|
)
|
||||||
|
@ -66,6 +66,7 @@ class Plugin:
|
|||||||
release_recent_history: list[PluginVersion] = field(default_factory=list)
|
release_recent_history: list[PluginVersion] = field(default_factory=list)
|
||||||
is_local: bool = False # extra field for locally installed plugins
|
is_local: bool = False # extra field for locally installed plugins
|
||||||
is_installed: bool = False
|
is_installed: bool = False
|
||||||
|
failed_to_load: bool = False
|
||||||
installed_version: str = ''
|
installed_version: str = ''
|
||||||
netbox_min_version: str = ''
|
netbox_min_version: str = ''
|
||||||
netbox_max_version: str = ''
|
netbox_max_version: str = ''
|
||||||
@ -86,6 +87,13 @@ def get_local_plugins(plugins=None):
|
|||||||
if plugin_config.release_track:
|
if plugin_config.release_track:
|
||||||
installed_version = f'{installed_version}-{plugin_config.release_track}'
|
installed_version = f'{installed_version}-{plugin_config.release_track}'
|
||||||
|
|
||||||
|
if plugin_config.author:
|
||||||
|
author = PluginAuthor(
|
||||||
|
name=plugin_config.author,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
author = None
|
||||||
|
|
||||||
local_plugins[plugin_config.name] = Plugin(
|
local_plugins[plugin_config.name] = Plugin(
|
||||||
config_name=plugin_config.name,
|
config_name=plugin_config.name,
|
||||||
title_short=plugin_config.verbose_name,
|
title_short=plugin_config.verbose_name,
|
||||||
@ -94,6 +102,8 @@ def get_local_plugins(plugins=None):
|
|||||||
description_short=plugin_config.description,
|
description_short=plugin_config.description,
|
||||||
is_local=True,
|
is_local=True,
|
||||||
is_installed=plugin_name in registry['plugins']['installed'],
|
is_installed=plugin_name in registry['plugins']['installed'],
|
||||||
|
failed_to_load=plugin_name not in registry['plugins']['installed'],
|
||||||
|
author=author,
|
||||||
installed_version=installed_version,
|
installed_version=installed_version,
|
||||||
netbox_min_version=plugin_config.min_version,
|
netbox_min_version=plugin_config.min_version,
|
||||||
netbox_max_version=plugin_config.max_version,
|
netbox_max_version=plugin_config.max_version,
|
||||||
|
@ -166,7 +166,7 @@ class DataFileBulkDeleteView(generic.BulkDeleteView):
|
|||||||
|
|
||||||
@register_model_view(Job, 'list', path='', detail=False)
|
@register_model_view(Job, 'list', path='', detail=False)
|
||||||
class JobListView(generic.ObjectListView):
|
class JobListView(generic.ObjectListView):
|
||||||
queryset = Job.objects.all()
|
queryset = Job.objects.defer('data')
|
||||||
filterset = filtersets.JobFilterSet
|
filterset = filtersets.JobFilterSet
|
||||||
filterset_form = forms.JobFilterForm
|
filterset_form = forms.JobFilterForm
|
||||||
table = tables.JobTable
|
table = tables.JobTable
|
||||||
@ -183,12 +183,12 @@ class JobView(generic.ObjectView):
|
|||||||
|
|
||||||
@register_model_view(Job, 'delete')
|
@register_model_view(Job, 'delete')
|
||||||
class JobDeleteView(generic.ObjectDeleteView):
|
class JobDeleteView(generic.ObjectDeleteView):
|
||||||
queryset = Job.objects.all()
|
queryset = Job.objects.defer('data')
|
||||||
|
|
||||||
|
|
||||||
@register_model_view(Job, 'bulk_delete', path='delete', detail=False)
|
@register_model_view(Job, 'bulk_delete', path='delete', detail=False)
|
||||||
class JobBulkDeleteView(generic.BulkDeleteView):
|
class JobBulkDeleteView(generic.BulkDeleteView):
|
||||||
queryset = Job.objects.all()
|
queryset = Job.objects.defer('data')
|
||||||
filterset = filtersets.JobFilterSet
|
filterset = filtersets.JobFilterSet
|
||||||
table = tables.JobTable
|
table = tables.JobTable
|
||||||
|
|
||||||
|
@ -1193,6 +1193,7 @@ class DeviceFilterSet(
|
|||||||
return queryset
|
return queryset
|
||||||
return queryset.filter(
|
return queryset.filter(
|
||||||
Q(name__icontains=value) |
|
Q(name__icontains=value) |
|
||||||
|
Q(virtual_chassis__name__icontains=value) |
|
||||||
Q(serial__icontains=value.strip()) |
|
Q(serial__icontains=value.strip()) |
|
||||||
Q(inventoryitems__serial__icontains=value.strip()) |
|
Q(inventoryitems__serial__icontains=value.strip()) |
|
||||||
Q(asset_tag__icontains=value.strip()) |
|
Q(asset_tag__icontains=value.strip()) |
|
||||||
|
@ -1411,7 +1411,7 @@ class InterfaceBulkEditForm(
|
|||||||
form_from_model(Interface, [
|
form_from_model(Interface, [
|
||||||
'label', 'type', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'wwn', 'mtu', 'mgmt_only', 'mark_connected',
|
'label', 'type', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'wwn', 'mtu', 'mgmt_only', 'mark_connected',
|
||||||
'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
|
'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
|
||||||
'wireless_lans'
|
'wireless_lans', 'vlan_translation_policy'
|
||||||
])
|
])
|
||||||
):
|
):
|
||||||
enabled = forms.NullBooleanField(
|
enabled = forms.NullBooleanField(
|
||||||
@ -1564,7 +1564,9 @@ class InterfaceBulkEditForm(
|
|||||||
FieldSet('vdcs', 'mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected', name=_('Operation')),
|
FieldSet('vdcs', 'mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected', name=_('Operation')),
|
||||||
FieldSet('poe_mode', 'poe_type', name=_('PoE')),
|
FieldSet('poe_mode', 'poe_type', name=_('PoE')),
|
||||||
FieldSet('parent', 'bridge', 'lag', name=_('Related Interfaces')),
|
FieldSet('parent', 'bridge', 'lag', name=_('Related Interfaces')),
|
||||||
FieldSet('mode', 'vlan_group', 'untagged_vlan', 'qinq_svlan', name=_('802.1Q Switching')),
|
FieldSet(
|
||||||
|
'mode', 'vlan_group', 'untagged_vlan', 'qinq_svlan', 'vlan_translation_policy', name=_('802.1Q Switching')
|
||||||
|
),
|
||||||
FieldSet(
|
FieldSet(
|
||||||
TabbedGroups(
|
TabbedGroups(
|
||||||
FieldSet('tagged_vlans', name=_('Assignment')),
|
FieldSet('tagged_vlans', name=_('Assignment')),
|
||||||
@ -1579,7 +1581,7 @@ class InterfaceBulkEditForm(
|
|||||||
nullable_fields = (
|
nullable_fields = (
|
||||||
'module', 'label', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'wwn', 'vdcs', 'mtu', 'description',
|
'module', 'label', 'parent', 'bridge', 'lag', 'speed', 'duplex', 'wwn', 'vdcs', 'mtu', 'description',
|
||||||
'poe_mode', 'poe_type', 'mode', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
|
'poe_mode', 'poe_type', 'mode', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
|
||||||
'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'vrf', 'wireless_lans'
|
'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'vrf', 'wireless_lans', 'vlan_translation_policy',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
@ -303,7 +303,7 @@ class RackTypeFilterForm(RackBaseFilterForm):
|
|||||||
model = RackType
|
model = RackType
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag'),
|
FieldSet('q', 'filter_id', 'tag'),
|
||||||
FieldSet('form_factor', 'width', 'u_height', name=_('Rack Type')),
|
FieldSet('manufacturer_id', 'form_factor', 'width', 'u_height', name=_('Rack Type')),
|
||||||
FieldSet('starting_unit', 'desc_units', name=_('Numbering')),
|
FieldSet('starting_unit', 'desc_units', name=_('Numbering')),
|
||||||
FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')),
|
FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')),
|
||||||
)
|
)
|
||||||
|
@ -802,14 +802,10 @@ class Device(
|
|||||||
verbose_name_plural = _('devices')
|
verbose_name_plural = _('devices')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.name and self.asset_tag:
|
if self.label and self.asset_tag:
|
||||||
return f'{self.name} ({self.asset_tag})'
|
return f'{self.label} ({self.asset_tag})'
|
||||||
elif self.name:
|
elif self.label:
|
||||||
return self.name
|
return self.label
|
||||||
elif self.virtual_chassis and self.asset_tag:
|
|
||||||
return f'{self.virtual_chassis.name}:{self.vc_position} ({self.asset_tag})'
|
|
||||||
elif self.virtual_chassis:
|
|
||||||
return f'{self.virtual_chassis.name}:{self.vc_position} ({self.pk})'
|
|
||||||
elif self.device_type and self.asset_tag:
|
elif self.device_type and self.asset_tag:
|
||||||
return f'{self.device_type.manufacturer} {self.device_type.model} ({self.asset_tag})'
|
return f'{self.device_type.manufacturer} {self.device_type.model} ({self.asset_tag})'
|
||||||
elif self.device_type:
|
elif self.device_type:
|
||||||
@ -1073,14 +1069,22 @@ class Device(
|
|||||||
device.location = self.location
|
device.location = self.location
|
||||||
device.save()
|
device.save()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def label(self):
|
||||||
|
"""
|
||||||
|
Return the device name if set; otherwise return a generated name if available.
|
||||||
|
"""
|
||||||
|
if self.name:
|
||||||
|
return self.name
|
||||||
|
if self.virtual_chassis:
|
||||||
|
return f'{self.virtual_chassis.name}:{self.vc_position}'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def identifier(self):
|
def identifier(self):
|
||||||
"""
|
"""
|
||||||
Return the device name if set; otherwise return the Device's primary key as {pk}
|
Return the device name if set; otherwise return the Device's primary key as {pk}
|
||||||
"""
|
"""
|
||||||
if self.name is not None:
|
return self.label or '{{{}}}'.format(self.pk)
|
||||||
return self.name
|
|
||||||
return '{{{}}}'.format(self.pk)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def primary_ip(self):
|
def primary_ip(self):
|
||||||
@ -1298,6 +1302,7 @@ class Module(PrimaryModel, ConfigContextModel):
|
|||||||
else:
|
else:
|
||||||
# ModuleBays must be saved individually for MPTT
|
# ModuleBays must be saved individually for MPTT
|
||||||
for instance in create_instances:
|
for instance in create_instances:
|
||||||
|
instance.name = instance.name.replace(MODULE_TOKEN, str(self.module_bay.position))
|
||||||
instance.save()
|
instance.save()
|
||||||
|
|
||||||
update_fields = ['module']
|
update_fields = ['module']
|
||||||
|
@ -44,6 +44,7 @@ class DeviceIndex(SearchIndex):
|
|||||||
('asset_tag', 50),
|
('asset_tag', 50),
|
||||||
('serial', 60),
|
('serial', 60),
|
||||||
('name', 100),
|
('name', 100),
|
||||||
|
('virtual_chassis', 200),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
('comments', 5000),
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
|
@ -30,10 +30,8 @@ STROKE_RESERVED = '#4d4dff'
|
|||||||
|
|
||||||
|
|
||||||
def get_device_name(device):
|
def get_device_name(device):
|
||||||
if device.virtual_chassis:
|
if device.label:
|
||||||
name = f'{device.virtual_chassis.name}:{device.vc_position}'
|
name = device.label
|
||||||
elif device.name:
|
|
||||||
name = device.name
|
|
||||||
else:
|
else:
|
||||||
name = str(device.device_type)
|
name = str(device.device_type)
|
||||||
if device.devicebay_count:
|
if device.devicebay_count:
|
||||||
|
@ -143,6 +143,7 @@ class PlatformTable(NetBoxTable):
|
|||||||
class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
|
class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
|
||||||
name = tables.TemplateColumn(
|
name = tables.TemplateColumn(
|
||||||
verbose_name=_('Name'),
|
verbose_name=_('Name'),
|
||||||
|
accessor=Accessor('label'),
|
||||||
template_code=DEVICE_LINK,
|
template_code=DEVICE_LINK,
|
||||||
linkify=True
|
linkify=True
|
||||||
)
|
)
|
||||||
@ -671,7 +672,7 @@ class InterfaceTable(BaseInterfaceTable, ModularDeviceComponentTable, PathEndpoi
|
|||||||
'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description',
|
'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description',
|
||||||
'mark_connected', 'cable', 'cable_color', 'wireless_link', 'wireless_lans', 'link_peer', 'connection',
|
'mark_connected', 'cable', 'cable_color', 'wireless_link', 'wireless_lans', 'link_peer', 'connection',
|
||||||
'tags', 'vdcs', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans',
|
'tags', 'vdcs', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans',
|
||||||
'qinq_svlan', 'inventory_items', 'created', 'last_updated',
|
'qinq_svlan', 'inventory_items', 'created', 'last_updated', 'vlan_translation_policy'
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'device', 'label', 'enabled', 'type', 'description')
|
default_columns = ('pk', 'name', 'device', 'label', 'enabled', 'type', 'description')
|
||||||
|
|
||||||
|
@ -31,6 +31,11 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
|
|||||||
verbose_name=_('Name'),
|
verbose_name=_('Name'),
|
||||||
linkify=True
|
linkify=True
|
||||||
)
|
)
|
||||||
|
racktype_count = columns.LinkedCountColumn(
|
||||||
|
viewname='dcim:racktype_list',
|
||||||
|
url_params={'manufacturer_id': 'pk'},
|
||||||
|
verbose_name=_('Rack Types')
|
||||||
|
)
|
||||||
devicetype_count = columns.LinkedCountColumn(
|
devicetype_count = columns.LinkedCountColumn(
|
||||||
viewname='dcim:devicetype_list',
|
viewname='dcim:devicetype_list',
|
||||||
url_params={'manufacturer_id': 'pk'},
|
url_params={'manufacturer_id': 'pk'},
|
||||||
@ -58,12 +63,12 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
|
|||||||
class Meta(NetBoxTable.Meta):
|
class Meta(NetBoxTable.Meta):
|
||||||
model = models.Manufacturer
|
model = models.Manufacturer
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', 'platform_count',
|
'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
||||||
'description', 'slug', 'tags', 'contacts', 'actions', 'created', 'last_updated',
|
'platform_count', 'description', 'slug', 'tags', 'contacts', 'actions', 'created', 'last_updated',
|
||||||
)
|
)
|
||||||
default_columns = (
|
default_columns = (
|
||||||
'pk', 'name', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', 'platform_count',
|
'pk', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
|
||||||
'description', 'slug',
|
'platform_count', 'description', 'slug',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,6 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
|
|||||||
verbose_name=_('ASNs')
|
verbose_name=_('ASNs')
|
||||||
)
|
)
|
||||||
asn_count = columns.LinkedCountColumn(
|
asn_count = columns.LinkedCountColumn(
|
||||||
accessor=tables.A('asns__count'),
|
|
||||||
viewname='ipam:asn_list',
|
viewname='ipam:asn_list',
|
||||||
url_params={'site_id': 'pk'},
|
url_params={'site_id': 'pk'},
|
||||||
verbose_name=_('ASN Count')
|
verbose_name=_('ASN Count')
|
||||||
|
@ -159,8 +159,8 @@ CONSOLEPORT_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
||||||
@ -172,7 +172,7 @@ CONSOLEPORT_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -209,8 +209,8 @@ CONSOLESERVERPORT_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
||||||
@ -222,7 +222,7 @@ CONSOLESERVERPORT_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -259,8 +259,8 @@ POWERPORT_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
<span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
|
||||||
@ -271,7 +271,7 @@ POWERPORT_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -308,14 +308,14 @@ POWEROUTLET_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
{% if not record.mark_connected %}
|
{% if not record.mark_connected %}
|
||||||
<a href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.poweroutlet&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
|
<a href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.poweroutlet&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
|
||||||
<i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
|
<i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
@ -402,8 +402,8 @@ INTERFACE_BUTTONS = """
|
|||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif record.is_wired and perms.dcim.add_cable %}
|
{% elif record.is_wired and perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
{% if not record.mark_connected %}
|
{% if not record.mark_connected %}
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Connect cable">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Connect cable">
|
||||||
@ -417,7 +417,7 @@ INTERFACE_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif record.is_wireless and perms.wireless.add_wirelesslink %}
|
{% elif record.is_wireless and perms.wireless.add_wirelesslink %}
|
||||||
<a href="{% url 'wireless:wirelesslink_add' %}?site_a={{ record.device.site.pk }}&location_a={{ record.device.location.pk }}&device_a={{ record.device_id }}&interface_a={{ record.pk }}&site_b={{ record.device.site.pk }}&location_b={{ record.device.location.pk }}" class="btn btn-success btn-sm">
|
<a href="{% url 'wireless:wirelesslink_add' %}?site_a={{ record.device.site.pk }}&location_a={{ record.device.location.pk }}&device_a={{ record.device_id }}&interface_a={{ record.pk }}&site_b={{ record.device.site.pk }}&location_b={{ record.device.location.pk }}" class="btn btn-success btn-sm">
|
||||||
@ -459,8 +459,8 @@ FRONTPORT_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
{% if not record.mark_connected %}
|
{% if not record.mark_connected %}
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
@ -476,7 +476,7 @@ FRONTPORT_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
@ -514,8 +514,8 @@ REARPORT_BUTTONS = """
|
|||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif perms.dcim.add_cable %}
|
{% elif perms.dcim.add_cable %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
|
||||||
{% if not record.mark_connected %}
|
{% if not record.mark_connected %}
|
||||||
<span class="dropdown">
|
<span class="dropdown">
|
||||||
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
@ -531,7 +531,7 @@ REARPORT_BUTTONS = """
|
|||||||
</ul>
|
</ul>
|
||||||
</span>
|
</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
"""
|
"""
|
||||||
|
@ -590,6 +590,32 @@ class DeviceTestCase(TestCase):
|
|||||||
device2.full_clean()
|
device2.full_clean()
|
||||||
device2.save()
|
device2.save()
|
||||||
|
|
||||||
|
def test_device_label(self):
|
||||||
|
device1 = Device(
|
||||||
|
site=Site.objects.first(),
|
||||||
|
device_type=DeviceType.objects.first(),
|
||||||
|
role=DeviceRole.objects.first(),
|
||||||
|
name=None,
|
||||||
|
)
|
||||||
|
self.assertEqual(device1.label, None)
|
||||||
|
|
||||||
|
device1.name = 'Test Device 1'
|
||||||
|
self.assertEqual(device1.label, 'Test Device 1')
|
||||||
|
|
||||||
|
virtual_chassis = VirtualChassis.objects.create(name='VC 1')
|
||||||
|
device2 = Device(
|
||||||
|
site=Site.objects.first(),
|
||||||
|
device_type=DeviceType.objects.first(),
|
||||||
|
role=DeviceRole.objects.first(),
|
||||||
|
name=None,
|
||||||
|
virtual_chassis=virtual_chassis,
|
||||||
|
vc_position=2,
|
||||||
|
)
|
||||||
|
self.assertEqual(device2.label, 'VC 1:2')
|
||||||
|
|
||||||
|
device2.name = 'Test Device 2'
|
||||||
|
self.assertEqual(device2.label, 'Test Device 2')
|
||||||
|
|
||||||
def test_device_mismatched_site_cluster(self):
|
def test_device_mismatched_site_cluster(self):
|
||||||
cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
|
cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
|
||||||
Cluster.objects.create(name='Cluster 1', type=cluster_type)
|
Cluster.objects.create(name='Cluster 1', type=cluster_type)
|
||||||
|
@ -4,17 +4,15 @@ from django.core.paginator import EmptyPage, PageNotAnInteger
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Prefetch
|
from django.db.models import Prefetch
|
||||||
from django.forms import ModelMultipleChoiceField, MultipleHiddenInput, modelformset_factory
|
from django.forms import ModelMultipleChoiceField, MultipleHiddenInput, modelformset_factory
|
||||||
from django.http import HttpResponse
|
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
from jinja2.exceptions import TemplateError
|
|
||||||
|
|
||||||
from circuits.models import Circuit, CircuitTermination
|
from circuits.models import Circuit, CircuitTermination
|
||||||
from extras.views import ObjectConfigContextView
|
from extras.views import ObjectConfigContextView, ObjectRenderConfigView
|
||||||
from ipam.models import ASN, IPAddress, Prefix, VLANGroup
|
from ipam.models import ASN, IPAddress, Prefix, VLANGroup
|
||||||
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
||||||
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
||||||
@ -424,7 +422,8 @@ class SiteGroupContactsView(ObjectContactsView):
|
|||||||
@register_model_view(Site, 'list', path='', detail=False)
|
@register_model_view(Site, 'list', path='', detail=False)
|
||||||
class SiteListView(generic.ObjectListView):
|
class SiteListView(generic.ObjectListView):
|
||||||
queryset = Site.objects.annotate(
|
queryset = Site.objects.annotate(
|
||||||
device_count=count_related(Device, 'site')
|
device_count=count_related(Device, 'site'),
|
||||||
|
asn_count=count_related(ASN, 'sites')
|
||||||
)
|
)
|
||||||
filterset = filtersets.SiteFilterSet
|
filterset = filtersets.SiteFilterSet
|
||||||
filterset_form = forms.SiteFilterForm
|
filterset_form = forms.SiteFilterForm
|
||||||
@ -966,6 +965,7 @@ class RackReservationBulkDeleteView(generic.BulkDeleteView):
|
|||||||
@register_model_view(Manufacturer, 'list', path='', detail=False)
|
@register_model_view(Manufacturer, 'list', path='', detail=False)
|
||||||
class ManufacturerListView(generic.ObjectListView):
|
class ManufacturerListView(generic.ObjectListView):
|
||||||
queryset = Manufacturer.objects.annotate(
|
queryset = Manufacturer.objects.annotate(
|
||||||
|
racktype_count=count_related(RackType, 'manufacturer'),
|
||||||
devicetype_count=count_related(DeviceType, 'manufacturer'),
|
devicetype_count=count_related(DeviceType, 'manufacturer'),
|
||||||
moduletype_count=count_related(ModuleType, 'manufacturer'),
|
moduletype_count=count_related(ModuleType, 'manufacturer'),
|
||||||
inventoryitem_count=count_related(InventoryItem, 'manufacturer'),
|
inventoryitem_count=count_related(InventoryItem, 'manufacturer'),
|
||||||
@ -2253,54 +2253,14 @@ class DeviceConfigContextView(ObjectConfigContextView):
|
|||||||
|
|
||||||
|
|
||||||
@register_model_view(Device, 'render-config')
|
@register_model_view(Device, 'render-config')
|
||||||
class DeviceRenderConfigView(generic.ObjectView):
|
class DeviceRenderConfigView(ObjectRenderConfigView):
|
||||||
queryset = Device.objects.all()
|
queryset = Device.objects.all()
|
||||||
template_name = 'dcim/device/render_config.html'
|
base_template = 'dcim/device/base.html'
|
||||||
tab = ViewTab(
|
tab = ViewTab(
|
||||||
label=_('Render Config'),
|
label=_('Render Config'),
|
||||||
weight=2100
|
weight=2100,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get(self, request, **kwargs):
|
|
||||||
instance = self.get_object(**kwargs)
|
|
||||||
context = self.get_extra_context(request, instance)
|
|
||||||
|
|
||||||
# If a direct export has been requested, return the rendered template content as a
|
|
||||||
# downloadable file.
|
|
||||||
if request.GET.get('export'):
|
|
||||||
content = context['rendered_config'] or context['error_message']
|
|
||||||
response = HttpResponse(content, content_type='text')
|
|
||||||
filename = f"{instance.name or 'config'}.txt"
|
|
||||||
response['Content-Disposition'] = f'attachment; filename="{filename}"'
|
|
||||||
return response
|
|
||||||
|
|
||||||
return render(request, self.get_template_name(), {
|
|
||||||
'object': instance,
|
|
||||||
'tab': self.tab,
|
|
||||||
**context,
|
|
||||||
})
|
|
||||||
|
|
||||||
def get_extra_context(self, request, instance):
|
|
||||||
# Compile context data
|
|
||||||
context_data = instance.get_config_context()
|
|
||||||
context_data.update({'device': instance})
|
|
||||||
|
|
||||||
# Render the config template
|
|
||||||
rendered_config = None
|
|
||||||
error_message = None
|
|
||||||
if config_template := instance.get_config_template():
|
|
||||||
try:
|
|
||||||
rendered_config = config_template.render(context=context_data)
|
|
||||||
except TemplateError as e:
|
|
||||||
error_message = _("An error occurred while rendering the template: {error}").format(error=e)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'config_template': config_template,
|
|
||||||
'context_data': context_data,
|
|
||||||
'rendered_config': rendered_config,
|
|
||||||
'error_message': error_message,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@register_model_view(Device, 'virtual-machines')
|
@register_model_view(Device, 'virtual-machines')
|
||||||
class DeviceVirtualMachinesView(generic.ObjectChildrenView):
|
class DeviceVirtualMachinesView(generic.ObjectChildrenView):
|
||||||
|
@ -155,7 +155,6 @@ class JournalEntryKindChoices(ChoiceSet):
|
|||||||
class LogLevelChoices(ChoiceSet):
|
class LogLevelChoices(ChoiceSet):
|
||||||
|
|
||||||
LOG_DEBUG = 'debug'
|
LOG_DEBUG = 'debug'
|
||||||
LOG_DEFAULT = 'default'
|
|
||||||
LOG_INFO = 'info'
|
LOG_INFO = 'info'
|
||||||
LOG_SUCCESS = 'success'
|
LOG_SUCCESS = 'success'
|
||||||
LOG_WARNING = 'warning'
|
LOG_WARNING = 'warning'
|
||||||
@ -163,16 +162,15 @@ class LogLevelChoices(ChoiceSet):
|
|||||||
|
|
||||||
CHOICES = (
|
CHOICES = (
|
||||||
(LOG_DEBUG, _('Debug'), 'teal'),
|
(LOG_DEBUG, _('Debug'), 'teal'),
|
||||||
(LOG_DEFAULT, _('Default'), 'gray'),
|
|
||||||
(LOG_INFO, _('Info'), 'cyan'),
|
(LOG_INFO, _('Info'), 'cyan'),
|
||||||
(LOG_SUCCESS, _('Success'), 'green'),
|
(LOG_SUCCESS, _('Success'), 'green'),
|
||||||
(LOG_WARNING, _('Warning'), 'yellow'),
|
(LOG_WARNING, _('Warning'), 'yellow'),
|
||||||
(LOG_FAILURE, _('Failure'), 'red'),
|
(LOG_FAILURE, _('Failure'), 'red'),
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
SYSTEM_LEVELS = {
|
SYSTEM_LEVELS = {
|
||||||
LOG_DEBUG: logging.DEBUG,
|
LOG_DEBUG: logging.DEBUG,
|
||||||
LOG_DEFAULT: logging.INFO,
|
|
||||||
LOG_INFO: logging.INFO,
|
LOG_INFO: logging.INFO,
|
||||||
LOG_SUCCESS: logging.INFO,
|
LOG_SUCCESS: logging.INFO,
|
||||||
LOG_WARNING: logging.WARNING,
|
LOG_WARNING: logging.WARNING,
|
||||||
@ -180,17 +178,6 @@ class LogLevelChoices(ChoiceSet):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class DurationChoices(ChoiceSet):
|
|
||||||
|
|
||||||
CHOICES = (
|
|
||||||
(60, _('Hourly')),
|
|
||||||
(720, _('12 hours')),
|
|
||||||
(1440, _('Daily')),
|
|
||||||
(10080, _('Weekly')),
|
|
||||||
(43200, _('30 days')),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Webhooks
|
# Webhooks
|
||||||
#
|
#
|
||||||
|
@ -138,9 +138,8 @@ DEFAULT_DASHBOARD = [
|
|||||||
|
|
||||||
LOG_LEVEL_RANK = {
|
LOG_LEVEL_RANK = {
|
||||||
LogLevelChoices.LOG_DEBUG: 0,
|
LogLevelChoices.LOG_DEBUG: 0,
|
||||||
LogLevelChoices.LOG_DEFAULT: 1,
|
LogLevelChoices.LOG_INFO: 1,
|
||||||
LogLevelChoices.LOG_INFO: 2,
|
LogLevelChoices.LOG_SUCCESS: 2,
|
||||||
LogLevelChoices.LOG_SUCCESS: 3,
|
LogLevelChoices.LOG_WARNING: 3,
|
||||||
LogLevelChoices.LOG_WARNING: 4,
|
LogLevelChoices.LOG_FAILURE: 4,
|
||||||
LogLevelChoices.LOG_FAILURE: 5,
|
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ __all__ = (
|
|||||||
|
|
||||||
|
|
||||||
class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
|
class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = CustomField
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet(
|
FieldSet(
|
||||||
@ -115,6 +116,7 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
|
class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = CustomFieldChoiceSet
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('base_choices', 'choice', name=_('Choices')),
|
FieldSet('base_choices', 'choice', name=_('Choices')),
|
||||||
@ -129,6 +131,7 @@ class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
|
class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = CustomLink
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('object_type', 'enabled', 'new_window', 'weight', name=_('Attributes')),
|
FieldSet('object_type', 'enabled', 'new_window', 'weight', name=_('Attributes')),
|
||||||
@ -159,6 +162,7 @@ class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = ExportTemplate
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
||||||
@ -200,6 +204,7 @@ class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = ImageAttachment
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('object_type_id', 'name', name=_('Attributes')),
|
FieldSet('object_type_id', 'name', name=_('Attributes')),
|
||||||
@ -216,6 +221,7 @@ class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
|
class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = SavedFilter
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
FieldSet('object_type', 'enabled', 'shared', 'weight', name=_('Attributes')),
|
FieldSet('object_type', 'enabled', 'shared', 'weight', name=_('Attributes')),
|
||||||
@ -314,6 +320,7 @@ class TagFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
|
class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = ConfigContext
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag_id'),
|
FieldSet('q', 'filter_id', 'tag_id'),
|
||||||
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
||||||
@ -403,6 +410,7 @@ class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
|
|
||||||
|
|
||||||
class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = ConfigTemplate
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag'),
|
FieldSet('q', 'filter_id', 'tag'),
|
||||||
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
FieldSet('data_source_id', 'data_file_id', name=_('Data')),
|
||||||
@ -469,6 +477,7 @@ class JournalEntryFilterForm(NetBoxModelFilterSetForm):
|
|||||||
|
|
||||||
|
|
||||||
class NotificationGroupFilterForm(SavedFiltersMixin, FilterForm):
|
class NotificationGroupFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
|
model = NotificationGroup
|
||||||
user_id = DynamicModelMultipleChoiceField(
|
user_id = DynamicModelMultipleChoiceField(
|
||||||
queryset=User.objects.all(),
|
queryset=User.objects.all(),
|
||||||
required=False,
|
required=False,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from extras.choices import DurationChoices
|
from core.choices import JobIntervalChoices
|
||||||
from utilities.forms.widgets import DateTimePicker, NumberWithOptions
|
from utilities.forms.widgets import DateTimePicker, NumberWithOptions
|
||||||
from utilities.datetime import local_now
|
from utilities.datetime import local_now
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ class ReportForm(forms.Form):
|
|||||||
min_value=1,
|
min_value=1,
|
||||||
label=_("Recurs every"),
|
label=_("Recurs every"),
|
||||||
widget=NumberWithOptions(
|
widget=NumberWithOptions(
|
||||||
options=DurationChoices
|
options=JobIntervalChoices
|
||||||
),
|
),
|
||||||
help_text=_("Interval at which this report is re-run (in minutes)")
|
help_text=_("Interval at which this report is re-run (in minutes)")
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from extras.choices import DurationChoices
|
from core.choices import JobIntervalChoices
|
||||||
from utilities.forms.widgets import DateTimePicker, NumberWithOptions
|
from utilities.forms.widgets import DateTimePicker, NumberWithOptions
|
||||||
from utilities.datetime import local_now
|
from utilities.datetime import local_now
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ class ScriptForm(forms.Form):
|
|||||||
min_value=1,
|
min_value=1,
|
||||||
label=_("Recurs every"),
|
label=_("Recurs every"),
|
||||||
widget=NumberWithOptions(
|
widget=NumberWithOptions(
|
||||||
options=DurationChoices
|
options=JobIntervalChoices
|
||||||
),
|
),
|
||||||
help_text=_("Interval at which this script is re-run (in minutes)")
|
help_text=_("Interval at which this script is re-run (in minutes)")
|
||||||
)
|
)
|
||||||
|
@ -81,12 +81,17 @@ class Command(BaseCommand):
|
|||||||
logger.error(f'\t{field}: {error.get("message")}')
|
logger.error(f'\t{field}: {error.get("message")}')
|
||||||
raise CommandError()
|
raise CommandError()
|
||||||
|
|
||||||
|
# Remove extra fields from ScriptForm before passng data to script
|
||||||
|
form.cleaned_data.pop('_schedule_at')
|
||||||
|
form.cleaned_data.pop('_interval')
|
||||||
|
form.cleaned_data.pop('_commit')
|
||||||
|
|
||||||
# Execute the script.
|
# Execute the script.
|
||||||
job = ScriptJob.enqueue(
|
job = ScriptJob.enqueue(
|
||||||
instance=script_obj,
|
instance=script_obj,
|
||||||
user=user,
|
user=user,
|
||||||
immediate=True,
|
immediate=True,
|
||||||
data=data,
|
data=form.cleaned_data,
|
||||||
request=NetBoxFakeRequest({
|
request=NetBoxFakeRequest({
|
||||||
'META': {},
|
'META': {},
|
||||||
'POST': data,
|
'POST': data,
|
||||||
|
@ -15,7 +15,7 @@ class Report(BaseScript):
|
|||||||
|
|
||||||
# There is no generic log() equivalent on BaseScript
|
# There is no generic log() equivalent on BaseScript
|
||||||
def log(self, message):
|
def log(self, message):
|
||||||
self._log(message, None, level=LogLevelChoices.LOG_DEFAULT)
|
self._log(message, None, level=LogLevelChoices.LOG_INFO)
|
||||||
|
|
||||||
def log_success(self, obj=None, message=None):
|
def log_success(self, obj=None, message=None):
|
||||||
super().log_success(message, obj)
|
super().log_success(message, obj)
|
||||||
|
@ -460,7 +460,7 @@ class BaseScript:
|
|||||||
# Logging
|
# Logging
|
||||||
#
|
#
|
||||||
|
|
||||||
def _log(self, message, obj=None, level=LogLevelChoices.LOG_DEFAULT):
|
def _log(self, message, obj=None, level=LogLevelChoices.LOG_INFO):
|
||||||
"""
|
"""
|
||||||
Log a message. Do not call this method directly; use one of the log_* wrappers below.
|
Log a message. Do not call this method directly; use one of the log_* wrappers below.
|
||||||
"""
|
"""
|
||||||
|
@ -1118,6 +1118,7 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
'devicerole',
|
'devicerole',
|
||||||
'devicetype',
|
'devicetype',
|
||||||
'dummymodel', # From dummy_plugin
|
'dummymodel', # From dummy_plugin
|
||||||
|
'dummynetboxmodel', # From dummy_plugin
|
||||||
'eventrule',
|
'eventrule',
|
||||||
'fhrpgroup',
|
'fhrpgroup',
|
||||||
'frontport',
|
'frontport',
|
||||||
|
@ -75,8 +75,11 @@ urlpatterns = [
|
|||||||
path('scripts/add/', views.ScriptModuleCreateView.as_view(), name='scriptmodule_add'),
|
path('scripts/add/', views.ScriptModuleCreateView.as_view(), name='scriptmodule_add'),
|
||||||
path('scripts/results/<int:job_pk>/', views.ScriptResultView.as_view(), name='script_result'),
|
path('scripts/results/<int:job_pk>/', views.ScriptResultView.as_view(), name='script_result'),
|
||||||
path('scripts/<int:pk>/', views.ScriptView.as_view(), name='script'),
|
path('scripts/<int:pk>/', views.ScriptView.as_view(), name='script'),
|
||||||
|
path('scripts/<str:module>.<str:name>/', views.ScriptView.as_view(), name='script'),
|
||||||
path('scripts/<int:pk>/source/', views.ScriptSourceView.as_view(), name='script_source'),
|
path('scripts/<int:pk>/source/', views.ScriptSourceView.as_view(), name='script_source'),
|
||||||
|
path('scripts/<str:module>.<str:name>/source/', views.ScriptSourceView.as_view(), name='script_source'),
|
||||||
path('scripts/<int:pk>/jobs/', views.ScriptJobsView.as_view(), name='script_jobs'),
|
path('scripts/<int:pk>/jobs/', views.ScriptJobsView.as_view(), name='script_jobs'),
|
||||||
|
path('scripts/<str:module>.<str:name>/jobs/', views.ScriptJobsView.as_view(), name='script_jobs'),
|
||||||
path('script-modules/<int:pk>/', include(get_model_urls('extras', 'scriptmodule'))),
|
path('script-modules/<int:pk>/', include(get_model_urls('extras', 'scriptmodule'))),
|
||||||
|
|
||||||
# Markdown
|
# Markdown
|
||||||
|
@ -10,6 +10,7 @@ from django.utils import timezone
|
|||||||
from django.utils.module_loading import import_string
|
from django.utils.module_loading import import_string
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
from jinja2.exceptions import TemplateError
|
||||||
|
|
||||||
from core.choices import ManagedFileRootPathChoices
|
from core.choices import ManagedFileRootPathChoices
|
||||||
from core.forms import ManagedFileForm
|
from core.forms import ManagedFileForm
|
||||||
@ -885,6 +886,61 @@ class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView):
|
|||||||
queryset = ConfigTemplate.objects.all()
|
queryset = ConfigTemplate.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectRenderConfigView(generic.ObjectView):
|
||||||
|
base_template = None
|
||||||
|
template_name = 'extras/object_render_config.html'
|
||||||
|
|
||||||
|
def get(self, request, **kwargs):
|
||||||
|
instance = self.get_object(**kwargs)
|
||||||
|
context = self.get_extra_context(request, instance)
|
||||||
|
|
||||||
|
# If a direct export has been requested, return the rendered template content as a
|
||||||
|
# downloadable file.
|
||||||
|
if request.GET.get('export'):
|
||||||
|
content = context['rendered_config'] or context['error_message']
|
||||||
|
response = HttpResponse(content, content_type='text')
|
||||||
|
filename = f"{instance.name or 'config'}.txt"
|
||||||
|
response['Content-Disposition'] = f'attachment; filename="{filename}"'
|
||||||
|
return response
|
||||||
|
|
||||||
|
return render(
|
||||||
|
request,
|
||||||
|
self.get_template_name(),
|
||||||
|
{
|
||||||
|
'object': instance,
|
||||||
|
'tab': self.tab,
|
||||||
|
**context,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_extra_context_data(self, request, instance):
|
||||||
|
return {
|
||||||
|
f'{instance._meta.model_name}': instance,
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_extra_context(self, request, instance):
|
||||||
|
# Compile context data
|
||||||
|
context_data = instance.get_config_context()
|
||||||
|
context_data.update(self.get_extra_context_data(request, instance))
|
||||||
|
|
||||||
|
# Render the config template
|
||||||
|
rendered_config = None
|
||||||
|
error_message = None
|
||||||
|
if config_template := instance.get_config_template():
|
||||||
|
try:
|
||||||
|
rendered_config = config_template.render(context=context_data)
|
||||||
|
except TemplateError as e:
|
||||||
|
error_message = _("An error occurred while rendering the template: {error}").format(error=e)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'base_template': self.base_template,
|
||||||
|
'config_template': config_template,
|
||||||
|
'context_data': context_data,
|
||||||
|
'rendered_config': rendered_config,
|
||||||
|
'error_message': error_message,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Image attachments
|
# Image attachments
|
||||||
#
|
#
|
||||||
@ -1195,6 +1251,14 @@ class ScriptListView(ContentTypePermissionRequiredMixin, View):
|
|||||||
class BaseScriptView(generic.ObjectView):
|
class BaseScriptView(generic.ObjectView):
|
||||||
queryset = Script.objects.all()
|
queryset = Script.objects.all()
|
||||||
|
|
||||||
|
def get_object(self, **kwargs):
|
||||||
|
if pk := kwargs.get('pk', False):
|
||||||
|
return get_object_or_404(self.queryset, pk=pk)
|
||||||
|
elif (module := kwargs.get('module')) and (name := kwargs.get('name', False)):
|
||||||
|
return get_object_or_404(self.queryset, module__file_path=f'{module}.py', name=name)
|
||||||
|
else:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
def _get_script_class(self, script):
|
def _get_script_class(self, script):
|
||||||
"""
|
"""
|
||||||
Return an instance of the Script's Python class
|
Return an instance of the Script's Python class
|
||||||
@ -1315,9 +1379,9 @@ class ScriptResultView(TableMixin, generic.ObjectView):
|
|||||||
index = 0
|
index = 0
|
||||||
|
|
||||||
try:
|
try:
|
||||||
log_threshold = LOG_LEVEL_RANK[request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG)]
|
log_threshold = LOG_LEVEL_RANK[request.GET.get('log_threshold', LogLevelChoices.LOG_INFO)]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
log_threshold = LOG_LEVEL_RANK[LogLevelChoices.LOG_DEBUG]
|
log_threshold = LOG_LEVEL_RANK[LogLevelChoices.LOG_INFO]
|
||||||
if job.data:
|
if job.data:
|
||||||
|
|
||||||
if 'log' in job.data:
|
if 'log' in job.data:
|
||||||
@ -1325,7 +1389,7 @@ class ScriptResultView(TableMixin, generic.ObjectView):
|
|||||||
tests = job.data['tests']
|
tests = job.data['tests']
|
||||||
|
|
||||||
for log in job.data['log']:
|
for log in job.data['log']:
|
||||||
log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_DEFAULT)
|
log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_INFO)
|
||||||
if log_level >= log_threshold:
|
if log_level >= log_threshold:
|
||||||
index += 1
|
index += 1
|
||||||
result = {
|
result = {
|
||||||
@ -1348,7 +1412,7 @@ class ScriptResultView(TableMixin, generic.ObjectView):
|
|||||||
for method, test_data in tests.items():
|
for method, test_data in tests.items():
|
||||||
if 'log' in test_data:
|
if 'log' in test_data:
|
||||||
for time, status, obj, url, message in test_data['log']:
|
for time, status, obj, url, message in test_data['log']:
|
||||||
log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_DEFAULT)
|
log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_INFO)
|
||||||
if log_level >= log_threshold:
|
if log_level >= log_threshold:
|
||||||
index += 1
|
index += 1
|
||||||
result = {
|
result = {
|
||||||
@ -1374,9 +1438,9 @@ class ScriptResultView(TableMixin, generic.ObjectView):
|
|||||||
if job.completed:
|
if job.completed:
|
||||||
table = self.get_table(job, request, bulk_actions=False)
|
table = self.get_table(job, request, bulk_actions=False)
|
||||||
|
|
||||||
log_threshold = request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG)
|
log_threshold = request.GET.get('log_threshold', LogLevelChoices.LOG_INFO)
|
||||||
if log_threshold not in LOG_LEVEL_RANK:
|
if log_threshold not in LOG_LEVEL_RANK:
|
||||||
log_threshold = LogLevelChoices.LOG_DEBUG
|
log_threshold = LogLevelChoices.LOG_INFO
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'script': job.object,
|
'script': job.object,
|
||||||
|
@ -212,7 +212,7 @@ class PrefixForm(TenancyForm, ScopedForm, NetBoxModelForm):
|
|||||||
required=False,
|
required=False,
|
||||||
selector=True,
|
selector=True,
|
||||||
query_params={
|
query_params={
|
||||||
'available_at_site': '$site',
|
'available_at_site': '$scope',
|
||||||
},
|
},
|
||||||
label=_('VLAN'),
|
label=_('VLAN'),
|
||||||
)
|
)
|
||||||
@ -240,6 +240,14 @@ class PrefixForm(TenancyForm, ScopedForm, NetBoxModelForm):
|
|||||||
'tenant', 'description', 'comments', 'tags',
|
'tenant', 'description', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# #18605: only filter VLAN select list if scope field is a Site
|
||||||
|
if scope_field := self.fields.get('scope', None):
|
||||||
|
if scope_field.queryset.model is not Site:
|
||||||
|
self.fields['vlan'].widget.attrs.pop('data-dynamic-params', None)
|
||||||
|
|
||||||
|
|
||||||
class IPRangeForm(TenancyForm, NetBoxModelForm):
|
class IPRangeForm(TenancyForm, NetBoxModelForm):
|
||||||
vrf = DynamicModelChoiceField(
|
vrf = DynamicModelChoiceField(
|
||||||
|
@ -868,6 +868,7 @@ class IPAddressEditView(generic.ObjectEditView):
|
|||||||
return {'interface': request.GET['interface']}
|
return {'interface': request.GET['interface']}
|
||||||
elif 'vminterface' in request.GET:
|
elif 'vminterface' in request.GET:
|
||||||
return {'vminterface': request.GET['vminterface']}
|
return {'vminterface': request.GET['vminterface']}
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
# TODO: Standardize or remove this view
|
# TODO: Standardize or remove this view
|
||||||
|
@ -169,15 +169,6 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form)
|
|||||||
|
|
||||||
selector_fields = ('filter_id', 'q')
|
selector_fields = ('filter_id', 'q')
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
# Limit saved filters to those applicable to the form's model
|
|
||||||
object_type = ObjectType.objects.get_for_model(self.model)
|
|
||||||
self.fields['filter_id'].widget.add_query_params({
|
|
||||||
'object_type_id': object_type.pk,
|
|
||||||
})
|
|
||||||
|
|
||||||
def _get_custom_fields(self, content_type):
|
def _get_custom_fields(self, content_type):
|
||||||
return super()._get_custom_fields(content_type).exclude(
|
return super()._get_custom_fields(content_type).exclude(
|
||||||
Q(filter_logic=CustomFieldFilterLogicChoices.FILTER_DISABLED) |
|
Q(filter_logic=CustomFieldFilterLogicChoices.FILTER_DISABLED) |
|
||||||
|
@ -73,6 +73,16 @@ class SavedFiltersMixin(forms.Form):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
# Limit saved filters to those applicable to the form's model
|
||||||
|
if hasattr(self, 'model'):
|
||||||
|
object_type = ObjectType.objects.get_for_model(self.model)
|
||||||
|
self.fields['filter_id'].widget.add_query_params({
|
||||||
|
'object_type_id': object_type.pk,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class TagsMixin(forms.Form):
|
class TagsMixin(forms.Form):
|
||||||
tags = DynamicModelMultipleChoiceField(
|
tags = DynamicModelMultipleChoiceField(
|
||||||
|
@ -10,6 +10,7 @@ from mptt.models import MPTTModel, TreeForeignKey
|
|||||||
from netbox.models.features import *
|
from netbox.models.features import *
|
||||||
from utilities.mptt import TreeManager
|
from utilities.mptt import TreeManager
|
||||||
from utilities.querysets import RestrictedQuerySet
|
from utilities.querysets import RestrictedQuerySet
|
||||||
|
from utilities.views import get_viewname
|
||||||
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
@ -42,7 +43,7 @@ class NetBoxFeatureSet(
|
|||||||
return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/'
|
return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/'
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse(f'{self._meta.app_label}:{self._meta.model_name}', args=[self.pk])
|
return reverse(get_viewname(self), args=[self.pk])
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -814,6 +814,8 @@ for plugin_name in PLUGINS:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Validate version compatibility and user-provided configuration settings and assign defaults
|
# Validate version compatibility and user-provided configuration settings and assign defaults
|
||||||
|
if plugin_name not in PLUGINS_CONFIG:
|
||||||
|
PLUGINS_CONFIG[plugin_name] = {}
|
||||||
try:
|
try:
|
||||||
plugin_config.validate(PLUGINS_CONFIG.get(plugin_name, {}), RELEASE.version)
|
plugin_config.validate(PLUGINS_CONFIG.get(plugin_name, {}), RELEASE.version)
|
||||||
except IncompatiblePluginError as e:
|
except IncompatiblePluginError as e:
|
||||||
|
@ -719,7 +719,7 @@ class PluginActiveColumn(BooleanColumn):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def render(self, value, record, table, **kwargs):
|
def render(self, value, record, table, **kwargs):
|
||||||
if not value and self.false_mark:
|
if record.failed_to_load and self.false_mark:
|
||||||
tooltip = (
|
tooltip = (
|
||||||
f'Could not load due to NetBox version incompatibility. '
|
f'Could not load due to NetBox version incompatibility. '
|
||||||
f'Min version: {record.netbox_min_version}, max version: {record.netbox_max_version}'
|
f'Min version: {record.netbox_min_version}, max version: {record.netbox_max_version}'
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
from netbox.models import NetBoxModel
|
||||||
|
|
||||||
|
|
||||||
class DummyModel(models.Model):
|
class DummyModel(models.Model):
|
||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
@ -11,3 +13,7 @@ class DummyModel(models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['name']
|
ordering = ['name']
|
||||||
|
|
||||||
|
|
||||||
|
class DummyNetBoxModel(NetBoxModel):
|
||||||
|
pass
|
||||||
|
@ -6,4 +6,6 @@ from . import views
|
|||||||
urlpatterns = (
|
urlpatterns = (
|
||||||
path('models/', views.DummyModelsView.as_view(), name='dummy_model_list'),
|
path('models/', views.DummyModelsView.as_view(), name='dummy_model_list'),
|
||||||
path('models/add/', views.DummyModelAddView.as_view(), name='dummy_model_add'),
|
path('models/add/', views.DummyModelAddView.as_view(), name='dummy_model_add'),
|
||||||
|
|
||||||
|
path('netboxmodel/<int:pk>/', views.DummyNetBoxModelView.as_view(), name='dummynetboxmodel'),
|
||||||
)
|
)
|
||||||
|
@ -5,12 +5,17 @@ from django.http import HttpResponse
|
|||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
|
||||||
from dcim.models import Site
|
from dcim.models import Site
|
||||||
|
from netbox.views import generic
|
||||||
from utilities.views import register_model_view
|
from utilities.views import register_model_view
|
||||||
from .models import DummyModel
|
from .models import DummyModel, DummyNetBoxModel
|
||||||
# Trigger registration of custom column
|
# Trigger registration of custom column
|
||||||
from .tables import mycol # noqa: F401
|
from .tables import mycol # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# DummyModel
|
||||||
|
#
|
||||||
|
|
||||||
class DummyModelsView(View):
|
class DummyModelsView(View):
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
@ -32,6 +37,18 @@ class DummyModelAddView(View):
|
|||||||
return HttpResponse("Instance created")
|
return HttpResponse("Instance created")
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# DummyNetBoxModel
|
||||||
|
#
|
||||||
|
|
||||||
|
class DummyNetBoxModelView(generic.ObjectView):
|
||||||
|
queryset = DummyNetBoxModel.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# API
|
||||||
|
#
|
||||||
|
|
||||||
@register_model_view(Site, 'extra', path='other-stuff')
|
@register_model_view(Site, 'extra', path='other-stuff')
|
||||||
class ExtraCoreModelView(View):
|
class ExtraCoreModelView(View):
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ class ObjectJobsView(ConditionalLoginRequiredMixin, View):
|
|||||||
|
|
||||||
def get_jobs(self, instance):
|
def get_jobs(self, instance):
|
||||||
object_type = ContentType.objects.get_for_model(instance)
|
object_type = ContentType.objects.get_for_model(instance)
|
||||||
return Job.objects.filter(
|
return Job.objects.defer('data').filter(
|
||||||
object_type=object_type,
|
object_type=object_type,
|
||||||
object_id=instance.id
|
object_id=instance.id
|
||||||
)
|
)
|
||||||
|
BIN
netbox/project-static/dist/netbox.js
vendored
BIN
netbox/project-static/dist/netbox.js
vendored
Binary file not shown.
BIN
netbox/project-static/dist/netbox.js.map
vendored
BIN
netbox/project-static/dist/netbox.js.map
vendored
Binary file not shown.
@ -30,8 +30,8 @@
|
|||||||
"gridstack": "11.3.0",
|
"gridstack": "11.3.0",
|
||||||
"htmx.org": "1.9.12",
|
"htmx.org": "1.9.12",
|
||||||
"query-string": "9.1.1",
|
"query-string": "9.1.1",
|
||||||
"sass": "1.83.4",
|
"sass": "1.85.0",
|
||||||
"tom-select": "2.4.2",
|
"tom-select": "2.4.3",
|
||||||
"typeface-inter": "3.18.1",
|
"typeface-inter": "3.18.1",
|
||||||
"typeface-roboto-mono": "1.1.13"
|
"typeface-roboto-mono": "1.1.13"
|
||||||
},
|
},
|
||||||
@ -53,5 +53,6 @@
|
|||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@types/bootstrap/**/@popperjs/core": "^2.11.6"
|
"@types/bootstrap/**/@popperjs/core": "^2.11.6"
|
||||||
}
|
},
|
||||||
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,9 @@ function toggleCheckboxRange(
|
|||||||
const typedElement = element as HTMLInputElement;
|
const typedElement = element as HTMLInputElement;
|
||||||
//Change loop's current checkbox state to eventTargetElement checkbox state
|
//Change loop's current checkbox state to eventTargetElement checkbox state
|
||||||
if (changePkCheckboxState === true) {
|
if (changePkCheckboxState === true) {
|
||||||
typedElement.checked = eventTargetElement.checked;
|
if (!typedElement.closest('tr')?.classList.contains('d-none')) {
|
||||||
|
typedElement.checked = eventTargetElement.checked;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//The previously clicked checkbox was above the shift clicked checkbox
|
//The previously clicked checkbox was above the shift clicked checkbox
|
||||||
if (element === previousStateElement) {
|
if (element === previousStateElement) {
|
||||||
@ -52,7 +54,9 @@ function toggleCheckboxRange(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
changePkCheckboxState = true;
|
changePkCheckboxState = true;
|
||||||
typedElement.checked = eventTargetElement.checked;
|
if (!typedElement.closest('tr')?.classList.contains('d-none')) {
|
||||||
|
typedElement.checked = eventTargetElement.checked;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//The previously clicked checkbox was below the shift clicked checkbox
|
//The previously clicked checkbox was below the shift clicked checkbox
|
||||||
if (element === eventTargetElement) {
|
if (element === eventTargetElement) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
import { initForms } from './forms';
|
||||||
import { initButtons } from './buttons';
|
import { initButtons } from './buttons';
|
||||||
import { initClipboard } from './clipboard'
|
import { initClipboard } from './clipboard';
|
||||||
import { initSelects } from './select';
|
import { initSelects } from './select';
|
||||||
import { initObjectSelector } from './objectSelector';
|
import { initObjectSelector } from './objectSelector';
|
||||||
import { initBootstrap } from './bs';
|
import { initBootstrap } from './bs';
|
||||||
@ -9,6 +10,7 @@ import { initQuickAdd } from './quickAdd';
|
|||||||
function initDepedencies(): void {
|
function initDepedencies(): void {
|
||||||
initButtons();
|
initButtons();
|
||||||
initClipboard();
|
initClipboard();
|
||||||
|
initForms();
|
||||||
initSelects();
|
initSelects();
|
||||||
initObjectSelector();
|
initObjectSelector();
|
||||||
initQuickAdd();
|
initQuickAdd();
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version: "4.2.3"
|
version: "4.2.4"
|
||||||
edition: "Community"
|
edition: "Community"
|
||||||
published: "2025-02-04"
|
published: "2025-02-21"
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
{% extends 'dcim/device/base.html' %}
|
|
||||||
{% load static %}
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
{% block title %}{{ object }} - {% trans "Config" %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-5">
|
|
||||||
<div class="card">
|
|
||||||
<h2 class="card-header">{% trans "Config Template" %}</h2>
|
|
||||||
<table class="table table-hover attr-table">
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Config Template" %}</th>
|
|
||||||
<td>{{ config_template|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Data Source" %}</th>
|
|
||||||
<td>{{ config_template.data_file.source|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Data File" %}</th>
|
|
||||||
<td>{{ config_template.data_file|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-7">
|
|
||||||
<div class="card">
|
|
||||||
<div class="accordion accordion-flush" id="renderConfig">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header" id="renderConfigHeading">
|
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapsedRenderConfig" aria-expanded="false" aria-controls="collapsedRenderConfig">
|
|
||||||
{% trans "Context Data" %}
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="collapsedRenderConfig" class="accordion-collapse collapse" aria-labelledby="renderConfigHeading" data-bs-parent="#renderConfig">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<pre class="card-body">{{ context_data|pprint }}</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
{% if config_template %}
|
|
||||||
{% if rendered_config %}
|
|
||||||
<div class="card">
|
|
||||||
<h2 class="card-header d-flex justify-content-between">
|
|
||||||
{% trans "Rendered Config" %}
|
|
||||||
<a href="?export=True" class="btn btn-primary lh-1" role="button">
|
|
||||||
<i class="mdi mdi-download" aria-hidden="true"></i> {% trans "Download" %}
|
|
||||||
</a>
|
|
||||||
</h2>
|
|
||||||
<pre class="card-body">{{ rendered_config }}</pre>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
<h4 class="alert-title mb-1">{% trans "Error rendering template" %}</h4>
|
|
||||||
{% trans error_message %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<div class="alert alert-info">
|
|
||||||
{% trans "No configuration template has been assigned for this device." %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
@ -1,4 +1,4 @@
|
|||||||
<div class="btn-group btn-group-sm" role="group">
|
<div class="btn-group btn-group-sm" role="group">
|
||||||
<a href="?format=json" type="button" class="btn btn-outline-dark{% if format == 'json' %} active{% endif %}">JSON</a>
|
<a href="?format=json" type="button" class="btn {% if format == 'json' %}btn-primary{% else %}btn-outline-secondary{% endif %}">JSON</a>
|
||||||
<a href="?format=yaml" type="button" class="btn btn-outline-dark{% if format == 'yaml' %} active{% endif %}">YAML</a>
|
<a href="?format=yaml" type="button" class="btn {% if format == 'yaml' %}btn-primary{% else %}btn-outline-secondary{% endif %}">YAML</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
{% for level, name in log_levels.items %}
|
{% for level, name in log_levels.items %}
|
||||||
<a class="dropdown-item d-flex justify-content-between" href="{% url 'extras:script_result' job_pk=job.pk %}?log_threshold={{ level }}">
|
<a class="dropdown-item d-flex justify-content-between" href="{% url 'extras:script_result' job_pk=job.pk %}?log_threshold={{ level }}">
|
||||||
{{ name }}{% if forloop.first %} ({% trans "All" %}){% endif %}
|
{{ name }}{% if forloop.counter == 1 %} ({% trans "All" %}){% elif forloop.counter == 2 %} ({% trans "Default" %}){% endif %}
|
||||||
{% if level == log_threshold %}<span class="badge bg-green ms-auto"></span>{% endif %}
|
{% if level == log_threshold %}<span class="badge bg-green ms-auto"></span>{% endif %}
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -55,22 +55,23 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2 class="card-header">{% trans "Tagged Item Types" %}</h2>
|
<h2 class="card-header">{% trans "Tagged Item Types" %}</h2>
|
||||||
<table class="table table-hover attr-table">
|
<ul class="list-group list-group-flush" role="presentation">
|
||||||
{% for object_type in object_types %}
|
{% for object_type in object_types %}
|
||||||
<tr>
|
{% with viewname=object_type.content_type.model_class|validated_viewname:"list" %}
|
||||||
<td>{{ object_type.content_type.name|bettertitle }}</td>
|
{% if viewname %}
|
||||||
<td>
|
<a href="{% url viewname %}?tag={{ object.slug }}" class="list-group-item list-group-item-action d-flex justify-content-between">
|
||||||
{% with viewname=object_type.content_type.model_class|validated_viewname:"list" %}
|
{{ object_type.content_type.name|bettertitle }}
|
||||||
{% if viewname %}
|
<span class="badge text-bg-primary rounded-pill">{{ object_type.item_count }}</span>
|
||||||
<a href="{% url viewname %}?tag={{ object.slug }}">{{ object_type.item_count }}</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ object_type.item_count }}
|
<li class="list-group-item list-group-item-action d-flex justify-content-between">
|
||||||
{% endif %}
|
{{ object_type.content_type.name|bettertitle }}
|
||||||
{% endwith %}
|
<span class="badge text-bg-primary rounded-pill">{{ object_type.item_count }}</span>
|
||||||
</td>
|
</li>
|
||||||
</tr>
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% plugin_right_page object %}
|
{% plugin_right_page object %}
|
||||||
</div>
|
</div>
|
||||||
@ -79,7 +80,7 @@
|
|||||||
<div class="col col-md-12">
|
<div class="col col-md-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2 class="card-header">{% trans "Tagged Objects" %}</h2>
|
<h2 class="card-header">{% trans "Tagged Objects" %}</h2>
|
||||||
<div class="card-body table-responsive">
|
<div class="table-responsive">
|
||||||
{% render_table taggeditem_table 'inc/table.html' %}
|
{% render_table taggeditem_table 'inc/table.html' %}
|
||||||
{% include 'inc/paginator.html' with paginator=taggeditem_table.paginator page=taggeditem_table.page %}
|
{% include 'inc/paginator.html' with paginator=taggeditem_table.paginator page=taggeditem_table.page %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
|
{% empty %}
|
||||||
|
<span class="list-group-item text-muted">{% trans "None" %}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,75 +0,0 @@
|
|||||||
{% extends 'virtualization/virtualmachine/base.html' %}
|
|
||||||
{% load static %}
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
{% block title %}{{ object }} - {% trans "Config" %}{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-5">
|
|
||||||
<div class="card">
|
|
||||||
<h2 class="card-header">{% trans "Config Template" %}</h2>
|
|
||||||
<table class="table table-hover attr-table">
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Config Template" %}</th>
|
|
||||||
<td>{{ config_template|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Data Source" %}</th>
|
|
||||||
<td>{{ config_template.data_file.source|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">{% trans "Data File" %}</th>
|
|
||||||
<td>{{ config_template.data_file|linkify|placeholder }}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-7">
|
|
||||||
<div class="card">
|
|
||||||
<div class="accordion accordion-flush" id="renderConfig">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header" id="renderConfigHeading">
|
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapsedRenderConfig" aria-expanded="false" aria-controls="collapsedRenderConfig">
|
|
||||||
{% trans "Context Data" %}
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="collapsedRenderConfig" class="accordion-collapse collapse" aria-labelledby="renderConfigHeading" data-bs-parent="#renderConfig">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<pre class="card-body">{{ context_data|pprint }}</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
{% if config_template %}
|
|
||||||
{% if rendered_config %}
|
|
||||||
<div class="card">
|
|
||||||
<h2 class="card-header d-flex justify-content-between">
|
|
||||||
{% trans "Rendered Config" %}
|
|
||||||
<a href="?export=True" class="btn btn-primary lh-1" role="button">
|
|
||||||
<i class="mdi mdi-download" aria-hidden="true"></i> {% trans "Download" %}
|
|
||||||
</a>
|
|
||||||
</h2>
|
|
||||||
<pre class="card-body">{{ rendered_config }}</pre>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
<h4 class="alert-title mb-1">{% trans "Error rendering template" %}</h4>
|
|
||||||
{% trans error_message %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<div class="alert alert-info">
|
|
||||||
{% trans "No configuration template has been assigned for this virtual machine." %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
Binary file not shown.
@ -4,10 +4,10 @@
|
|||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# czarnian, 2024
|
|
||||||
# Jeremy Stretch, 2024
|
|
||||||
# Pavel Valach, 2024
|
# Pavel Valach, 2024
|
||||||
# Matěj Gordon, 2025
|
# Matěj Gordon, 2025
|
||||||
|
# czarnian, 2025
|
||||||
|
# Jeremy Stretch, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -16,7 +16,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Matěj Gordon, 2025\n"
|
"Last-Translator: Jeremy Stretch, 2025\n"
|
||||||
"Language-Team: Czech (https://app.transifex.com/netbox-community/teams/178115/cs/)\n"
|
"Language-Team: Czech (https://app.transifex.com/netbox-community/teams/178115/cs/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -64,7 +64,7 @@ msgstr "Naposledy použitý"
|
|||||||
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
||||||
#: netbox/users/forms/model_forms.py:124
|
#: netbox/users/forms/model_forms.py:124
|
||||||
msgid "Allowed IPs"
|
msgid "Allowed IPs"
|
||||||
msgstr "Povolené IP adresy"
|
msgstr "Povolené adresy IP"
|
||||||
|
|
||||||
#: netbox/account/views.py:114
|
#: netbox/account/views.py:114
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -179,7 +179,7 @@ msgstr "Region (zkratka)"
|
|||||||
#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58
|
#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58
|
||||||
#: netbox/virtualization/filtersets.py:186
|
#: netbox/virtualization/filtersets.py:186
|
||||||
msgid "Site group (ID)"
|
msgid "Site group (ID)"
|
||||||
msgstr "Skupina stránek (ID)"
|
msgstr "Skupina míst (ID)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218
|
#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218
|
||||||
#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232
|
#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232
|
||||||
@ -191,7 +191,7 @@ msgstr "Skupina stránek (ID)"
|
|||||||
#: netbox/virtualization/filtersets.py:65
|
#: netbox/virtualization/filtersets.py:65
|
||||||
#: netbox/virtualization/filtersets.py:193
|
#: netbox/virtualization/filtersets.py:193
|
||||||
msgid "Site group (slug)"
|
msgid "Site group (slug)"
|
||||||
msgstr "Skupina stránek (slug)"
|
msgstr "Skupina míst (zkratka)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188
|
#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188
|
||||||
#: netbox/circuits/forms/bulk_edit.py:216
|
#: netbox/circuits/forms/bulk_edit.py:216
|
||||||
@ -252,7 +252,7 @@ msgstr "Skupina stránek (slug)"
|
|||||||
#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76
|
#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76
|
||||||
#: netbox/wireless/forms/model_forms.py:118
|
#: netbox/wireless/forms/model_forms.py:118
|
||||||
msgid "Site"
|
msgid "Site"
|
||||||
msgstr "Stránky"
|
msgstr "Místo"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229
|
#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229
|
||||||
#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242
|
#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242
|
||||||
@ -262,7 +262,7 @@ msgstr "Stránky"
|
|||||||
#: netbox/virtualization/filtersets.py:75
|
#: netbox/virtualization/filtersets.py:75
|
||||||
#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363
|
#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363
|
||||||
msgid "Site (slug)"
|
msgid "Site (slug)"
|
||||||
msgstr "Místo (slug)"
|
msgstr "Místo (zkratka)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:67
|
#: netbox/circuits/filtersets.py:67
|
||||||
msgid "ASN (ID)"
|
msgid "ASN (ID)"
|
||||||
@ -316,7 +316,7 @@ msgstr "Typ okruhu (URL zkratka)"
|
|||||||
#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69
|
#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69
|
||||||
#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368
|
#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368
|
||||||
msgid "Site (ID)"
|
msgid "Site (ID)"
|
||||||
msgstr "Stránky (ID)"
|
msgstr "Místo (ID)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237
|
#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237
|
||||||
msgid "Termination A (ID)"
|
msgid "Termination A (ID)"
|
||||||
@ -371,15 +371,15 @@ msgstr "Síť poskytovatele (ID)"
|
|||||||
|
|
||||||
#: netbox/circuits/filtersets.py:335
|
#: netbox/circuits/filtersets.py:335
|
||||||
msgid "Circuit (ID)"
|
msgid "Circuit (ID)"
|
||||||
msgstr "Obvod (ID)"
|
msgstr "Okruh (ID)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:341
|
#: netbox/circuits/filtersets.py:341
|
||||||
msgid "Circuit (CID)"
|
msgid "Circuit (CID)"
|
||||||
msgstr "Obvod (CID)"
|
msgstr "Okruh (CID)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:345
|
#: netbox/circuits/filtersets.py:345
|
||||||
msgid "Circuit group (ID)"
|
msgid "Circuit group (ID)"
|
||||||
msgstr "Skupina obvodů (ID)"
|
msgstr "Skupina okruhů (ID)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:351
|
#: netbox/circuits/filtersets.py:351
|
||||||
msgid "Circuit group (slug)"
|
msgid "Circuit group (slug)"
|
||||||
@ -804,7 +804,7 @@ msgstr "Datum ukončení"
|
|||||||
#: netbox/circuits/forms/bulk_edit.py:158
|
#: netbox/circuits/forms/bulk_edit.py:158
|
||||||
#: netbox/circuits/forms/filtersets.py:186
|
#: netbox/circuits/forms/filtersets.py:186
|
||||||
msgid "Commit rate (Kbps)"
|
msgid "Commit rate (Kbps)"
|
||||||
msgstr "Rychlost odevzdání (Kbps)"
|
msgstr "Smluvní rychlost (Kbps)"
|
||||||
|
|
||||||
#: netbox/circuits/forms/bulk_edit.py:173
|
#: netbox/circuits/forms/bulk_edit.py:173
|
||||||
#: netbox/circuits/forms/model_forms.py:112
|
#: netbox/circuits/forms/model_forms.py:112
|
||||||
@ -1042,7 +1042,7 @@ msgstr "Region"
|
|||||||
#: netbox/virtualization/forms/filtersets.py:138
|
#: netbox/virtualization/forms/filtersets.py:138
|
||||||
#: netbox/virtualization/forms/model_forms.py:98
|
#: netbox/virtualization/forms/model_forms.py:98
|
||||||
msgid "Site group"
|
msgid "Site group"
|
||||||
msgstr "Skupina stránek"
|
msgstr "Skupina míst"
|
||||||
|
|
||||||
#: netbox/circuits/forms/filtersets.py:65
|
#: netbox/circuits/forms/filtersets.py:65
|
||||||
#: netbox/circuits/forms/filtersets.py:83
|
#: netbox/circuits/forms/filtersets.py:83
|
||||||
@ -1160,19 +1160,19 @@ msgstr "barva"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:36
|
#: netbox/circuits/models/circuits.py:36
|
||||||
msgid "circuit type"
|
msgid "circuit type"
|
||||||
msgstr "typ obvodu"
|
msgstr "typ okruhu"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:37
|
#: netbox/circuits/models/circuits.py:37
|
||||||
msgid "circuit types"
|
msgid "circuit types"
|
||||||
msgstr "typy obvodů"
|
msgstr "typy okruhů"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:48
|
#: netbox/circuits/models/circuits.py:48
|
||||||
msgid "circuit ID"
|
msgid "circuit ID"
|
||||||
msgstr "ID obvodu"
|
msgstr "ID okruhu"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:49
|
#: netbox/circuits/models/circuits.py:49
|
||||||
msgid "Unique circuit ID"
|
msgid "Unique circuit ID"
|
||||||
msgstr "Jedinečné ID obvodu"
|
msgstr "Jedinečné ID okruhu"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52
|
#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52
|
||||||
#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49
|
#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49
|
||||||
@ -1194,11 +1194,11 @@ msgstr "nainstalován"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:89
|
#: netbox/circuits/models/circuits.py:89
|
||||||
msgid "terminates"
|
msgid "terminates"
|
||||||
msgstr "ukončí"
|
msgstr "končí"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:94
|
#: netbox/circuits/models/circuits.py:94
|
||||||
msgid "commit rate (Kbps)"
|
msgid "commit rate (Kbps)"
|
||||||
msgstr "rychlost odevzdání (Kbps)"
|
msgstr "smluvní rychlost (Kbps)"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:95
|
#: netbox/circuits/models/circuits.py:95
|
||||||
msgid "Committed rate"
|
msgid "Committed rate"
|
||||||
@ -1214,11 +1214,11 @@ msgstr "okruhy"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:170
|
#: netbox/circuits/models/circuits.py:170
|
||||||
msgid "circuit group"
|
msgid "circuit group"
|
||||||
msgstr "skupina obvodů"
|
msgstr "skupina okruhů"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:171
|
#: netbox/circuits/models/circuits.py:171
|
||||||
msgid "circuit groups"
|
msgid "circuit groups"
|
||||||
msgstr "skupiny obvodů"
|
msgstr "skupiny okruhů"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93
|
#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93
|
||||||
#: netbox/tenancy/models/contacts.py:134
|
#: netbox/tenancy/models/contacts.py:134
|
||||||
@ -1227,7 +1227,7 @@ msgstr "přednost"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:213
|
#: netbox/circuits/models/circuits.py:213
|
||||||
msgid "Circuit group assignment"
|
msgid "Circuit group assignment"
|
||||||
msgstr "Přiřazení skupiny obvodů"
|
msgstr "Přiřazení skupiny okruhů"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:214
|
#: netbox/circuits/models/circuits.py:214
|
||||||
msgid "Circuit group assignments"
|
msgid "Circuit group assignments"
|
||||||
@ -1235,7 +1235,7 @@ msgstr "Přiřazení skupin obvodů"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "zakončení"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1297,14 +1297,11 @@ msgstr "zakončení okruhů"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zakončení okruhu se musí připojit buď k místu, nebo k síti poskytovatele."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zakončení okruhu se nemůže připojit jak k síti webu, tak k síti "
|
|
||||||
"poskytovatele."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -1534,7 +1531,7 @@ msgstr "Strana Z"
|
|||||||
#: netbox/circuits/tables/circuits.py:77
|
#: netbox/circuits/tables/circuits.py:77
|
||||||
#: netbox/templates/circuits/circuit.html:55
|
#: netbox/templates/circuits/circuit.html:55
|
||||||
msgid "Commit Rate"
|
msgid "Commit Rate"
|
||||||
msgstr "Míra odevzdání"
|
msgstr "Smluvní rychlost"
|
||||||
|
|
||||||
#: netbox/circuits/tables/circuits.py:80
|
#: netbox/circuits/tables/circuits.py:80
|
||||||
#: netbox/circuits/tables/providers.py:48
|
#: netbox/circuits/tables/providers.py:48
|
||||||
@ -1563,7 +1560,7 @@ msgstr "Míra odevzdání"
|
|||||||
#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27
|
#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27
|
||||||
#: netbox/wireless/tables/wirelesslan.py:58
|
#: netbox/wireless/tables/wirelesslan.py:58
|
||||||
msgid "Comments"
|
msgid "Comments"
|
||||||
msgstr "Komentář"
|
msgstr "Komentáře"
|
||||||
|
|
||||||
#: netbox/circuits/tables/circuits.py:86
|
#: netbox/circuits/tables/circuits.py:86
|
||||||
#: netbox/templates/tenancy/contact.html:84
|
#: netbox/templates/tenancy/contact.html:84
|
||||||
@ -1586,12 +1583,12 @@ msgstr "Počet ASN"
|
|||||||
#: netbox/circuits/views.py:331
|
#: netbox/circuits/views.py:331
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "No terminations have been defined for circuit {circuit}."
|
msgid "No terminations have been defined for circuit {circuit}."
|
||||||
msgstr "Pro obvod nebyla definována žádná zakončení {circuit}."
|
msgstr "Pro okruh {circuit} nebyla definována žádná zakončení ."
|
||||||
|
|
||||||
#: netbox/circuits/views.py:380
|
#: netbox/circuits/views.py:380
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Swapped terminations for circuit {circuit}."
|
msgid "Swapped terminations for circuit {circuit}."
|
||||||
msgstr "Vyměněné zakončení pro obvod {circuit}."
|
msgstr "Vyměněná zakončení pro okruh {circuit}."
|
||||||
|
|
||||||
#: netbox/core/api/views.py:39
|
#: netbox/core/api/views.py:39
|
||||||
msgid "This user does not have permission to synchronize this data source."
|
msgid "This user does not have permission to synchronize this data source."
|
||||||
@ -1620,7 +1617,7 @@ msgstr "Dokončeno"
|
|||||||
#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239
|
#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239
|
||||||
#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47
|
#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47
|
||||||
msgid "Failed"
|
msgid "Failed"
|
||||||
msgstr "Neuspěl"
|
msgstr "Selhalo"
|
||||||
|
|
||||||
#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335
|
#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335
|
||||||
#: netbox/netbox/navigation/menu.py:339
|
#: netbox/netbox/navigation/menu.py:339
|
||||||
@ -1647,7 +1644,7 @@ msgstr "Naplánováno"
|
|||||||
|
|
||||||
#: netbox/core/choices.py:56
|
#: netbox/core/choices.py:56
|
||||||
msgid "Running"
|
msgid "Running"
|
||||||
msgstr "Běh"
|
msgstr "Běží"
|
||||||
|
|
||||||
#: netbox/core/choices.py:58
|
#: netbox/core/choices.py:58
|
||||||
msgid "Errored"
|
msgid "Errored"
|
||||||
@ -1656,7 +1653,7 @@ msgstr "Chyba"
|
|||||||
#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63
|
#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63
|
||||||
#: netbox/templates/generic/object.html:61
|
#: netbox/templates/generic/object.html:61
|
||||||
msgid "Updated"
|
msgid "Updated"
|
||||||
msgstr "aktualizováno"
|
msgstr "Aktualizováno"
|
||||||
|
|
||||||
#: netbox/core/choices.py:88
|
#: netbox/core/choices.py:88
|
||||||
msgid "Deleted"
|
msgid "Deleted"
|
||||||
@ -1725,7 +1722,7 @@ msgstr "Tajný přístupový klíč AWS"
|
|||||||
|
|
||||||
#: netbox/core/events.py:27
|
#: netbox/core/events.py:27
|
||||||
msgid "Object created"
|
msgid "Object created"
|
||||||
msgstr "Vytvořený objekt"
|
msgstr "Objekt vytvořen"
|
||||||
|
|
||||||
#: netbox/core/events.py:28
|
#: netbox/core/events.py:28
|
||||||
msgid "Object updated"
|
msgid "Object updated"
|
||||||
@ -1737,7 +1734,7 @@ msgstr "Objekt odstraněn"
|
|||||||
|
|
||||||
#: netbox/core/events.py:30
|
#: netbox/core/events.py:30
|
||||||
msgid "Job started"
|
msgid "Job started"
|
||||||
msgstr "Práce byla zahájena"
|
msgstr "Úloha zahájena"
|
||||||
|
|
||||||
#: netbox/core/events.py:31
|
#: netbox/core/events.py:31
|
||||||
msgid "Job completed"
|
msgid "Job completed"
|
||||||
@ -1850,7 +1847,7 @@ msgstr "Vytvořeno po"
|
|||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:89
|
#: netbox/core/forms/filtersets.py:89
|
||||||
msgid "Created before"
|
msgid "Created before"
|
||||||
msgstr "Vytvořeno dříve"
|
msgstr "Vytvořeno před"
|
||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:94
|
#: netbox/core/forms/filtersets.py:94
|
||||||
msgid "Scheduled after"
|
msgid "Scheduled after"
|
||||||
@ -1858,7 +1855,7 @@ msgstr "Naplánováno po"
|
|||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:99
|
#: netbox/core/forms/filtersets.py:99
|
||||||
msgid "Scheduled before"
|
msgid "Scheduled before"
|
||||||
msgstr "Naplánováno dříve"
|
msgstr "Naplánováno před"
|
||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:104
|
#: netbox/core/forms/filtersets.py:104
|
||||||
msgid "Started after"
|
msgid "Started after"
|
||||||
@ -1866,7 +1863,7 @@ msgstr "Začalo po"
|
|||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:109
|
#: netbox/core/forms/filtersets.py:109
|
||||||
msgid "Started before"
|
msgid "Started before"
|
||||||
msgstr "Začalo dříve"
|
msgstr "Začalo před"
|
||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:114
|
#: netbox/core/forms/filtersets.py:114
|
||||||
msgid "Completed after"
|
msgid "Completed after"
|
||||||
@ -1905,7 +1902,7 @@ msgstr "Po"
|
|||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450
|
#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450
|
||||||
msgid "Before"
|
msgid "Before"
|
||||||
msgstr "Dříve"
|
msgstr "Před"
|
||||||
|
|
||||||
#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29
|
#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29
|
||||||
#: netbox/extras/forms/model_forms.py:396
|
#: netbox/extras/forms/model_forms.py:396
|
||||||
@ -1941,7 +1938,7 @@ msgstr ""
|
|||||||
#: netbox/core/forms/model_forms.py:153
|
#: netbox/core/forms/model_forms.py:153
|
||||||
#: netbox/templates/dcim/rack_elevation_list.html:6
|
#: netbox/templates/dcim/rack_elevation_list.html:6
|
||||||
msgid "Rack Elevations"
|
msgid "Rack Elevations"
|
||||||
msgstr "Výšky stojanů"
|
msgstr "Přehled stojanů"
|
||||||
|
|
||||||
#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520
|
#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520
|
||||||
#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372
|
#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372
|
||||||
@ -2259,16 +2256,16 @@ msgstr "ID úlohy"
|
|||||||
|
|
||||||
#: netbox/core/models/jobs.py:112
|
#: netbox/core/models/jobs.py:112
|
||||||
msgid "job"
|
msgid "job"
|
||||||
msgstr "práce"
|
msgstr "úloha"
|
||||||
|
|
||||||
#: netbox/core/models/jobs.py:113
|
#: netbox/core/models/jobs.py:113
|
||||||
msgid "jobs"
|
msgid "jobs"
|
||||||
msgstr "pracovní místa"
|
msgstr "úlohy"
|
||||||
|
|
||||||
#: netbox/core/models/jobs.py:136
|
#: netbox/core/models/jobs.py:136
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Jobs cannot be assigned to this object type ({type})."
|
msgid "Jobs cannot be assigned to this object type ({type})."
|
||||||
msgstr "K tomuto typu objektu nelze přiřadit úlohy ({type})."
|
msgstr "K tomuto typu objektu ({type}) nelze přiřadit úlohy."
|
||||||
|
|
||||||
#: netbox/core/models/jobs.py:190
|
#: netbox/core/models/jobs.py:190
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -2278,7 +2275,7 @@ msgstr "Neplatný stav pro ukončení úlohy. Možnosti jsou: {choices}"
|
|||||||
#: netbox/core/models/jobs.py:221
|
#: netbox/core/models/jobs.py:221
|
||||||
msgid ""
|
msgid ""
|
||||||
"enqueue() cannot be called with values for both schedule_at and immediate."
|
"enqueue() cannot be called with values for both schedule_at and immediate."
|
||||||
msgstr "enqueue () nelze volat s hodnotami pro schedule_at a instant."
|
msgstr "enqueue() nelze volat s hodnotami pro schedule_at a ihned zároveň."
|
||||||
|
|
||||||
#: netbox/core/signals.py:126
|
#: netbox/core/signals.py:126
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -2396,7 +2393,7 @@ msgstr "Hostitel"
|
|||||||
|
|
||||||
#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535
|
#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535
|
||||||
msgid "Port"
|
msgid "Port"
|
||||||
msgstr "Přístav"
|
msgstr "Port"
|
||||||
|
|
||||||
#: netbox/core/tables/tasks.py:54
|
#: netbox/core/tables/tasks.py:54
|
||||||
msgid "DB"
|
msgid "DB"
|
||||||
@ -2445,7 +2442,7 @@ msgstr "Nebyli nalezeni žádní pracovníci"
|
|||||||
#: netbox/core/views.py:90
|
#: netbox/core/views.py:90
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Queued job #{id} to sync {datasource}"
|
msgid "Queued job #{id} to sync {datasource}"
|
||||||
msgstr "Úloha ve frontě #{id} synchronizovat {datasource}"
|
msgstr "Úloha #{id} k synchronizaci {datasource} zařazena do fronty."
|
||||||
|
|
||||||
#: netbox/core/views.py:319
|
#: netbox/core/views.py:319
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -2455,12 +2452,12 @@ msgstr "Obnovená revize konfigurace #{id}"
|
|||||||
#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531
|
#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {job_id} not found"
|
msgid "Job {job_id} not found"
|
||||||
msgstr "Práce {job_id} nenalezeno"
|
msgstr "Úloha {job_id} nenalezena"
|
||||||
|
|
||||||
#: netbox/core/views.py:463
|
#: netbox/core/views.py:463
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {id} has been deleted."
|
msgid "Job {id} has been deleted."
|
||||||
msgstr "Práce {id} byl vymazán."
|
msgstr "Úloha {id} byla vymazána."
|
||||||
|
|
||||||
#: netbox/core/views.py:465
|
#: netbox/core/views.py:465
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -2470,22 +2467,22 @@ msgstr "Chyba při mazání úlohy {id}: {error}"
|
|||||||
#: netbox/core/views.py:478 netbox/core/views.py:496
|
#: netbox/core/views.py:478 netbox/core/views.py:496
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {id} not found."
|
msgid "Job {id} not found."
|
||||||
msgstr "Práce {id} nenalezeno."
|
msgstr "Úloha {id} nenalezena."
|
||||||
|
|
||||||
#: netbox/core/views.py:484
|
#: netbox/core/views.py:484
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {id} has been re-enqueued."
|
msgid "Job {id} has been re-enqueued."
|
||||||
msgstr "Práce {id} byla znovu zařazena do fronty."
|
msgstr "Úloha {id} byla znovu zařazena do fronty."
|
||||||
|
|
||||||
#: netbox/core/views.py:519
|
#: netbox/core/views.py:519
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {id} has been enqueued."
|
msgid "Job {id} has been enqueued."
|
||||||
msgstr "Práce {id} byl zařazen do fronty."
|
msgstr "Úloha {id} byla zařazena do fronty."
|
||||||
|
|
||||||
#: netbox/core/views.py:538
|
#: netbox/core/views.py:538
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Job {id} has been stopped."
|
msgid "Job {id} has been stopped."
|
||||||
msgstr "Práce {id} byl zastaven."
|
msgstr "Úloha {id} byla zastavena."
|
||||||
|
|
||||||
#: netbox/core/views.py:540
|
#: netbox/core/views.py:540
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -2535,7 +2532,7 @@ msgstr "4-sloupový rám"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:67
|
#: netbox/dcim/choices.py:67
|
||||||
msgid "4-post cabinet"
|
msgid "4-post cabinet"
|
||||||
msgstr "4-sloupová skříňka"
|
msgstr "4-sloupová skříň"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:68
|
#: netbox/dcim/choices.py:68
|
||||||
msgid "Wall-mounted frame"
|
msgid "Wall-mounted frame"
|
||||||
@ -2547,7 +2544,7 @@ msgstr "Nástěnný rám (vertikální)"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:70
|
#: netbox/dcim/choices.py:70
|
||||||
msgid "Wall-mounted cabinet"
|
msgid "Wall-mounted cabinet"
|
||||||
msgstr "Nástěnná skříňka"
|
msgstr "Nástěnná skříň"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:71
|
#: netbox/dcim/choices.py:71
|
||||||
msgid "Wall-mounted cabinet (vertical)"
|
msgid "Wall-mounted cabinet (vertical)"
|
||||||
@ -2582,7 +2579,7 @@ msgstr "Milimetry"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555
|
#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555
|
||||||
msgid "Inches"
|
msgid "Inches"
|
||||||
msgstr "palce"
|
msgstr "Palce"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207
|
#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207
|
||||||
#: netbox/dcim/choices.py:254
|
#: netbox/dcim/choices.py:254
|
||||||
@ -2679,12 +2676,12 @@ msgstr "Zdola nahoru"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:214
|
#: netbox/dcim/choices.py:214
|
||||||
msgid "Top to bottom"
|
msgid "Top to bottom"
|
||||||
msgstr "Nahoru dolů"
|
msgstr "Shora dolů"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259
|
#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259
|
||||||
#: netbox/dcim/choices.py:1305
|
#: netbox/dcim/choices.py:1305
|
||||||
msgid "Passive"
|
msgid "Passive"
|
||||||
msgstr "pasivní"
|
msgstr "Pasivní"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:216
|
#: netbox/dcim/choices.py:216
|
||||||
msgid "Mixed"
|
msgid "Mixed"
|
||||||
@ -2802,17 +2799,17 @@ msgstr "Auto"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:1265
|
#: netbox/dcim/choices.py:1265
|
||||||
msgid "Access"
|
msgid "Access"
|
||||||
msgstr "Přístup"
|
msgstr "Přístupový"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172
|
#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172
|
||||||
#: netbox/ipam/tables/vlans.py:217
|
#: netbox/ipam/tables/vlans.py:217
|
||||||
#: netbox/templates/dcim/inc/interface_vlans_table.html:7
|
#: netbox/templates/dcim/inc/interface_vlans_table.html:7
|
||||||
msgid "Tagged"
|
msgid "Tagged"
|
||||||
msgstr "Označeno"
|
msgstr "Značkovaný"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:1267
|
#: netbox/dcim/choices.py:1267
|
||||||
msgid "Tagged (All)"
|
msgid "Tagged (All)"
|
||||||
msgstr "Označeno (Vše)"
|
msgstr "Značkovaný (Vše)"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:1296
|
#: netbox/dcim/choices.py:1296
|
||||||
msgid "IEEE Standard"
|
msgid "IEEE Standard"
|
||||||
@ -2888,7 +2885,7 @@ msgstr "Gramy"
|
|||||||
#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328
|
#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328
|
||||||
#: netbox/templates/dcim/rack.html:108
|
#: netbox/templates/dcim/rack.html:108
|
||||||
msgid "Pounds"
|
msgid "Pounds"
|
||||||
msgstr "libry"
|
msgstr "Libry"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:1573
|
#: netbox/dcim/choices.py:1573
|
||||||
msgid "Ounces"
|
msgid "Ounces"
|
||||||
@ -2896,7 +2893,7 @@ msgstr "Unce"
|
|||||||
|
|
||||||
#: netbox/dcim/choices.py:1620
|
#: netbox/dcim/choices.py:1620
|
||||||
msgid "Redundant"
|
msgid "Redundant"
|
||||||
msgstr "Redundantní"
|
msgstr "Zdvojený"
|
||||||
|
|
||||||
#: netbox/dcim/choices.py:1641
|
#: netbox/dcim/choices.py:1641
|
||||||
msgid "Single phase"
|
msgid "Single phase"
|
||||||
@ -2922,15 +2919,15 @@ msgstr "Nadřazená oblast (ID)"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:92
|
#: netbox/dcim/filtersets.py:92
|
||||||
msgid "Parent region (slug)"
|
msgid "Parent region (slug)"
|
||||||
msgstr "Nadřazená oblast (URL zkratka)"
|
msgstr "Nadřazená oblast (zkratka)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:116
|
#: netbox/dcim/filtersets.py:116
|
||||||
msgid "Parent site group (ID)"
|
msgid "Parent site group (ID)"
|
||||||
msgstr "Nadřazená skupina webů (ID)"
|
msgstr "Nadřazená skupina míst (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:122
|
#: netbox/dcim/filtersets.py:122
|
||||||
msgid "Parent site group (slug)"
|
msgid "Parent site group (slug)"
|
||||||
msgstr "Nadřazená skupina stránek (slimák)"
|
msgstr "Nadřazená skupina míst (zkratka)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364
|
#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364
|
||||||
#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995
|
#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995
|
||||||
@ -4231,7 +4228,7 @@ msgstr "Šířka musí být nastavena, pokud není zadán typ stojanu."
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:326
|
#: netbox/dcim/forms/bulk_import.py:326
|
||||||
msgid "U height must be set if not specifying a rack type."
|
msgid "U height must be set if not specifying a rack type."
|
||||||
msgstr ""
|
msgstr "Pokud není zadán typ stojanu, musí být nastavena výška U."
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:334
|
#: netbox/dcim/forms/bulk_import.py:334
|
||||||
msgid "Parent site"
|
msgid "Parent site"
|
||||||
@ -4890,6 +4887,11 @@ msgid ""
|
|||||||
"present, will be automatically replaced with the position value when "
|
"present, will be automatically replaced with the position value when "
|
||||||
"creating a new module."
|
"creating a new module."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Pro hromadné vytváření jsou podporovány alfanumerické rozsahy. Smíšené "
|
||||||
|
"případy a typy v rámci jednoho rozsahu nejsou podporovány (příklad: "
|
||||||
|
"<code>[ge, xe] -0/0/ [0-9]</code>). Žeton <code>{module}</code>, pokud je "
|
||||||
|
"přítomen, bude automaticky nahrazen hodnotou pozice při vytváření nového "
|
||||||
|
"modulu."
|
||||||
|
|
||||||
#: netbox/dcim/forms/model_forms.py:1094
|
#: netbox/dcim/forms/model_forms.py:1094
|
||||||
msgid "Console port template"
|
msgid "Console port template"
|
||||||
@ -9595,11 +9597,11 @@ msgstr "Nastavte to jako primární IP pro přiřazené zařízení"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:330
|
#: netbox/ipam/forms/bulk_import.py:330
|
||||||
msgid "Is out-of-band"
|
msgid "Is out-of-band"
|
||||||
msgstr ""
|
msgstr "Je mimo pásmo"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:331
|
#: netbox/ipam/forms/bulk_import.py:331
|
||||||
msgid "Designate this as the out-of-band IP address for the assigned device"
|
msgid "Designate this as the out-of-band IP address for the assigned device"
|
||||||
msgstr ""
|
msgstr "Určete tuto adresu jako mimopásmovou IP adresu přiřazeného zařízení"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:371
|
#: netbox/ipam/forms/bulk_import.py:371
|
||||||
msgid "No device or virtual machine specified; cannot set as primary IP"
|
msgid "No device or virtual machine specified; cannot set as primary IP"
|
||||||
@ -9609,11 +9611,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:375
|
#: netbox/ipam/forms/bulk_import.py:375
|
||||||
msgid "No device specified; cannot set as out-of-band IP"
|
msgid "No device specified; cannot set as out-of-band IP"
|
||||||
msgstr ""
|
msgstr "Není určeno žádné zařízení; nelze nastavit jako IP mimo pásmo"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:379
|
#: netbox/ipam/forms/bulk_import.py:379
|
||||||
msgid "Cannot set out-of-band IP for virtual machines"
|
msgid "Cannot set out-of-band IP for virtual machines"
|
||||||
msgstr ""
|
msgstr "Nelze nastavit IP mimo pásmo pro virtuální počítače"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:383
|
#: netbox/ipam/forms/bulk_import.py:383
|
||||||
msgid "No interface specified; cannot set as primary IP"
|
msgid "No interface specified; cannot set as primary IP"
|
||||||
@ -9621,7 +9623,7 @@ msgstr "Není určeno žádné rozhraní; nelze nastavit jako primární IP"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:387
|
#: netbox/ipam/forms/bulk_import.py:387
|
||||||
msgid "No interface specified; cannot set as out-of-band IP"
|
msgid "No interface specified; cannot set as out-of-band IP"
|
||||||
msgstr ""
|
msgstr "Není určeno žádné rozhraní; nelze nastavit jako IP mimo pásmo"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:422
|
#: netbox/ipam/forms/bulk_import.py:422
|
||||||
msgid "Auth type"
|
msgid "Auth type"
|
||||||
@ -9780,7 +9782,7 @@ msgstr "Řada ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Přiřazení webu/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -9798,7 +9800,7 @@ msgstr "Nastavte z něj primární IP pro zařízení/virtuální počítač"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:314
|
#: netbox/ipam/forms/model_forms.py:314
|
||||||
msgid "Make this the out-of-band IP for the device"
|
msgid "Make this the out-of-band IP for the device"
|
||||||
msgstr ""
|
msgstr "Nastavte z tohoto pole IP mimo pásmo zařízení"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:329
|
#: netbox/ipam/forms/model_forms.py:329
|
||||||
msgid "NAT IP (Inside)"
|
msgid "NAT IP (Inside)"
|
||||||
@ -9811,10 +9813,12 @@ msgstr "IP adresu lze přiřadit pouze jednomu objektu."
|
|||||||
#: netbox/ipam/forms/model_forms.py:398
|
#: netbox/ipam/forms/model_forms.py:398
|
||||||
msgid "Cannot reassign primary IP address for the parent device/VM"
|
msgid "Cannot reassign primary IP address for the parent device/VM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Nelze znovu přiřadit primární adresu IP pro nadřazené zařízení/virtuální "
|
||||||
|
"počítač"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:402
|
#: netbox/ipam/forms/model_forms.py:402
|
||||||
msgid "Cannot reassign out-of-Band IP address for the parent device"
|
msgid "Cannot reassign out-of-Band IP address for the parent device"
|
||||||
msgstr ""
|
msgstr "Nelze znovu přiřadit IP adresu mimo pásmo pro nadřazené zařízení"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:412
|
#: netbox/ipam/forms/model_forms.py:412
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -9827,6 +9831,8 @@ msgid ""
|
|||||||
"Only IP addresses assigned to a device interface can be designated as the "
|
"Only IP addresses assigned to a device interface can be designated as the "
|
||||||
"out-of-band IP for a device."
|
"out-of-band IP for a device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Pouze IP adresy přiřazené k rozhraní zařízení mohou být označeny jako IP "
|
||||||
|
"adresy mimo pásmo zařízení."
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:508
|
#: netbox/ipam/forms/model_forms.py:508
|
||||||
msgid "Virtual IP Address"
|
msgid "Virtual IP Address"
|
||||||
@ -10220,12 +10226,12 @@ msgstr "Nelze nastavit scope_id bez scope_type."
|
|||||||
#: netbox/ipam/models/vlans.py:105
|
#: netbox/ipam/models/vlans.py:105
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}"
|
msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}"
|
||||||
msgstr ""
|
msgstr "Spuštění VLAN ID v dosahu ({value}) nemůže být menší než {minimum}"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:111
|
#: netbox/ipam/models/vlans.py:111
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}"
|
msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}"
|
||||||
msgstr ""
|
msgstr "Ukončení VLAN ID v rozsahu ({value}) nesmí překročit {maximum}"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:118
|
#: netbox/ipam/models/vlans.py:118
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -10233,6 +10239,8 @@ msgid ""
|
|||||||
"Ending VLAN ID in range must be greater than or equal to the starting VLAN "
|
"Ending VLAN ID in range must be greater than or equal to the starting VLAN "
|
||||||
"ID ({range})"
|
"ID ({range})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Koncové ID VLAN v rozsahu musí být větší nebo roven počátečnímu ID VLAN "
|
||||||
|
"({range})"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:124
|
#: netbox/ipam/models/vlans.py:124
|
||||||
msgid "Ranges cannot overlap."
|
msgid "Ranges cannot overlap."
|
||||||
@ -12587,7 +12595,7 @@ msgstr "Chyba při vykreslování šablony"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Pro toto zařízení nebyla přiřazena žádná konfigurační šablona."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13852,7 +13860,7 @@ msgstr "Centrum nápovědy"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Správce Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14266,7 +14274,6 @@ msgstr "Přidat virtuální disk"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pro tento virtuální počítač nebyla přiřazena žádná konfigurační šablona."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15365,7 +15372,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} patří k jinému webu ({device_site}) než cluster ({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16098,7 +16104,7 @@ msgstr "bezdrátové spoje"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "Při nastavování bezdrátové vzdálenosti je nutné zadat jednotku"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -6,7 +6,7 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Jeff Gehlbach, 2024
|
# Jeff Gehlbach, 2024
|
||||||
# ch, 2024
|
# ch, 2024
|
||||||
# Frederik Spang Thomsen <frederik@progras.dk>, 2024
|
# Frederik Spang <fst@progras.dk>, 2024
|
||||||
# Jeremy Stretch, 2025
|
# Jeremy Stretch, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
@ -1235,7 +1235,7 @@ msgstr "Kredsløbsgruppeopgaver"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "opsigelse"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1297,15 +1297,11 @@ msgstr "kredsløbsafslutninger"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"En kredsløbsafslutning skal tilsluttes enten et websted eller et "
|
|
||||||
"udbydernetværk."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"En kredsløbsafslutning kan ikke knyttes til både et websted og et "
|
|
||||||
"udbydernetværk."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9803,7 +9799,7 @@ msgstr "ASN-rækkevidde"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Websted/VLAN-tildeling"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12635,7 +12631,7 @@ msgstr "Fejl ved gengivelse af skabelon"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Der er ikke tildelt nogen konfigurationsskabelon til denne enhed."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13903,7 +13899,7 @@ msgstr "Hjælpecenter"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Django Admin"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14317,8 +14313,6 @@ msgstr "Tilføj virtuel disk"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der er ikke tildelt nogen konfigurationsskabelon til denne virtuelle "
|
|
||||||
"maskine."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15421,7 +15415,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} tilhører et andet sted ({device_site}) end klyngen ({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16151,7 +16144,7 @@ msgstr "trådløse links"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "Skal angive en enhed, når du indstiller en trådløs afstand"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -5,13 +5,13 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Martin R, 2024
|
# Martin R, 2024
|
||||||
# Niklas, 2024
|
|
||||||
# fepilins, 2024
|
# fepilins, 2024
|
||||||
# Steffen, 2024
|
# Steffen, 2024
|
||||||
# haagehan, 2024
|
# haagehan, 2024
|
||||||
|
# Jeremy Stretch, 2024
|
||||||
# Robin Reinhardt, 2024
|
# Robin Reinhardt, 2024
|
||||||
# Jeremy Stretch, 2025
|
|
||||||
# chbally, 2025
|
# chbally, 2025
|
||||||
|
# Niklas, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -20,7 +20,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: chbally, 2025\n"
|
"Last-Translator: Niklas, 2025\n"
|
||||||
"Language-Team: German (https://app.transifex.com/netbox-community/teams/178115/de/)\n"
|
"Language-Team: German (https://app.transifex.com/netbox-community/teams/178115/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1240,7 +1240,7 @@ msgstr "Transportnetzzuweisungen"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "Abschlusspunkt"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1303,15 +1303,11 @@ msgstr "Transportnetzabschlusspunkte"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ein Leitungsabschluss muss entweder an einen Standort oder an ein "
|
|
||||||
"Providernetzwerk angeschlossen werden."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ein Leitungsabschluss kann nicht sowohl an einen Standort als auch an ein "
|
|
||||||
"Providernetzwerk angeschlossen werden."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -8438,8 +8434,7 @@ msgstr "Gewicht anzeigen"
|
|||||||
|
|
||||||
#: netbox/extras/models/customfields.py:173
|
#: netbox/extras/models/customfields.py:173
|
||||||
msgid "Fields with higher weights appear lower in a form."
|
msgid "Fields with higher weights appear lower in a form."
|
||||||
msgstr ""
|
msgstr "Höher gewichtete Felder werden im Formular weiter unten angezeigt."
|
||||||
"Felder mit höheren Gewichten werden in einem Formular niedriger angezeigt."
|
|
||||||
|
|
||||||
#: netbox/extras/models/customfields.py:178
|
#: netbox/extras/models/customfields.py:178
|
||||||
msgid "minimum value"
|
msgid "minimum value"
|
||||||
@ -9531,7 +9526,7 @@ msgstr "Dienst (ID)"
|
|||||||
|
|
||||||
#: netbox/ipam/filtersets.py:675
|
#: netbox/ipam/filtersets.py:675
|
||||||
msgid "NAT inside IP address (ID)"
|
msgid "NAT inside IP address (ID)"
|
||||||
msgstr "NAT innerhalb der IP-Adresse (ID)"
|
msgstr "NAT inside IP-Adresse (ID)"
|
||||||
|
|
||||||
#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322
|
#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322
|
||||||
msgid "Assigned interface"
|
msgid "Assigned interface"
|
||||||
@ -9959,7 +9954,7 @@ msgstr "Ziel der Route"
|
|||||||
#: netbox/templates/ipam/aggregate.html:11
|
#: netbox/templates/ipam/aggregate.html:11
|
||||||
#: netbox/templates/ipam/prefix.html:38
|
#: netbox/templates/ipam/prefix.html:38
|
||||||
msgid "Aggregate"
|
msgid "Aggregate"
|
||||||
msgstr "Aggregat"
|
msgstr "Aggregieren"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12
|
#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12
|
||||||
msgid "ASN Range"
|
msgid "ASN Range"
|
||||||
@ -9967,7 +9962,7 @@ msgstr "ASN-Bereich"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Standort-/VLAN-Zuweisung"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -10095,9 +10090,7 @@ msgstr "ASN-Bereiche"
|
|||||||
#: netbox/ipam/models/asns.py:72
|
#: netbox/ipam/models/asns.py:72
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Starting ASN ({start}) must be lower than ending ASN ({end})."
|
msgid "Starting ASN ({start}) must be lower than ending ASN ({end})."
|
||||||
msgstr ""
|
msgstr "Der ASN ({start}) muss niedriger sein als das letzte ASN ({end})."
|
||||||
"ASN wird gestartet ({start}) muss niedriger sein als das Ende der ASN "
|
|
||||||
"({end})."
|
|
||||||
|
|
||||||
#: netbox/ipam/models/asns.py:104
|
#: netbox/ipam/models/asns.py:104
|
||||||
msgid "Regional Internet Registry responsible for this AS number space"
|
msgid "Regional Internet Registry responsible for this AS number space"
|
||||||
@ -10171,7 +10164,7 @@ msgstr "Aggregat"
|
|||||||
|
|
||||||
#: netbox/ipam/models/ip.py:116
|
#: netbox/ipam/models/ip.py:116
|
||||||
msgid "aggregates"
|
msgid "aggregates"
|
||||||
msgstr "Aggregate"
|
msgstr "aggregiert"
|
||||||
|
|
||||||
#: netbox/ipam/models/ip.py:132
|
#: netbox/ipam/models/ip.py:132
|
||||||
msgid "Cannot create aggregate with /0 mask."
|
msgid "Cannot create aggregate with /0 mask."
|
||||||
@ -10227,7 +10220,8 @@ msgstr "ist ein Pool"
|
|||||||
#: netbox/ipam/models/ip.py:267
|
#: netbox/ipam/models/ip.py:267
|
||||||
msgid "All IP addresses within this prefix are considered usable"
|
msgid "All IP addresses within this prefix are considered usable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Alle IP-Adressen innerhalb dieses Prefixes werden als nutzbar betrachtet"
|
"Alle IP-Adressen (inklusive Netzwerk- und Broadcast-Adresse) innerhalb "
|
||||||
|
"dieses Prefixes werden als nutzbar betrachtet"
|
||||||
|
|
||||||
#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537
|
#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537
|
||||||
msgid "mark utilized"
|
msgid "mark utilized"
|
||||||
@ -10503,7 +10497,7 @@ msgstr "einzigartigen Raum erzwingen"
|
|||||||
|
|
||||||
#: netbox/ipam/models/vrfs.py:43
|
#: netbox/ipam/models/vrfs.py:43
|
||||||
msgid "Prevent duplicate prefixes/IP addresses within this VRF"
|
msgid "Prevent duplicate prefixes/IP addresses within this VRF"
|
||||||
msgstr "Vermeiden Sie doppelte Präfixe/IP-Adressen in diesem VRF"
|
msgstr "Vermeiden Sie doppelte Präfixe/IP-Adressen in dieser VRF"
|
||||||
|
|
||||||
#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186
|
#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186
|
||||||
#: netbox/netbox/navigation/menu.py:188
|
#: netbox/netbox/navigation/menu.py:188
|
||||||
@ -10524,7 +10518,7 @@ msgstr "Routenziele"
|
|||||||
|
|
||||||
#: netbox/ipam/tables/asn.py:52
|
#: netbox/ipam/tables/asn.py:52
|
||||||
msgid "ASDOT"
|
msgid "ASDOT"
|
||||||
msgstr "ALS PUNKT"
|
msgstr "ASDOT"
|
||||||
|
|
||||||
#: netbox/ipam/tables/asn.py:57
|
#: netbox/ipam/tables/asn.py:57
|
||||||
msgid "Site Count"
|
msgid "Site Count"
|
||||||
@ -11552,7 +11546,7 @@ msgstr ""
|
|||||||
#: netbox/netbox/registry.py:14
|
#: netbox/netbox/registry.py:14
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Invalid store: {key}"
|
msgid "Invalid store: {key}"
|
||||||
msgstr "Ungültiger Shop: {key}"
|
msgstr "Ungültiger Store: {key}"
|
||||||
|
|
||||||
#: netbox/netbox/registry.py:17
|
#: netbox/netbox/registry.py:17
|
||||||
msgid "Cannot add stores to registry after initialization"
|
msgid "Cannot add stores to registry after initialization"
|
||||||
@ -12431,7 +12425,7 @@ msgstr "Warteschlange"
|
|||||||
|
|
||||||
#: netbox/templates/core/rq_task.html:65
|
#: netbox/templates/core/rq_task.html:65
|
||||||
msgid "Timeout"
|
msgid "Timeout"
|
||||||
msgstr "Auszeit"
|
msgstr "Timeout"
|
||||||
|
|
||||||
#: netbox/templates/core/rq_task.html:69
|
#: netbox/templates/core/rq_task.html:69
|
||||||
msgid "Result TTL"
|
msgid "Result TTL"
|
||||||
@ -12501,7 +12495,7 @@ msgstr "Anzahl fehlgeschlagener Jobs"
|
|||||||
|
|
||||||
#: netbox/templates/core/rq_worker.html:75
|
#: netbox/templates/core/rq_worker.html:75
|
||||||
msgid "Total working time"
|
msgid "Total working time"
|
||||||
msgstr "Gesamtarbeitszeit"
|
msgstr "Gesamtlaufzeit"
|
||||||
|
|
||||||
#: netbox/templates/core/rq_worker.html:76
|
#: netbox/templates/core/rq_worker.html:76
|
||||||
msgid "seconds"
|
msgid "seconds"
|
||||||
@ -12827,7 +12821,7 @@ msgstr "Fehler beim Rendern der Vorlage"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Diesem Gerät wurde keine Konfigurationsvorlage zugewiesen."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -14098,7 +14092,7 @@ msgstr "Hilfecenter"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Django-Administrator"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14513,7 +14507,6 @@ msgstr "Virtuelles Laufwerk hinzufügen"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Für diese virtuelle Maschine wurde keine Konfigurationsvorlage zugewiesen."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -14540,11 +14533,11 @@ msgstr "Secret anzeigen"
|
|||||||
#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352
|
#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352
|
||||||
#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134
|
#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134
|
||||||
msgid "Proposals"
|
msgid "Proposals"
|
||||||
msgstr "Vorschläge"
|
msgstr "Proposals"
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikeproposal.html:10
|
#: netbox/templates/vpn/ikeproposal.html:10
|
||||||
msgid "IKE Proposal"
|
msgid "IKE Proposal"
|
||||||
msgstr "IKE-Vorschlag"
|
msgstr "IKE- Proposal"
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97
|
#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97
|
||||||
#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101
|
#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101
|
||||||
@ -14575,7 +14568,7 @@ msgstr "DH-Gruppe"
|
|||||||
#: netbox/templates/vpn/ipsecproposal.html:29
|
#: netbox/templates/vpn/ipsecproposal.html:29
|
||||||
#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146
|
#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146
|
||||||
msgid "SA lifetime (seconds)"
|
msgid "SA lifetime (seconds)"
|
||||||
msgstr "SA-Lebensdauer (Sekunden)"
|
msgstr "SA-Gültigkeitsdauer (Sekunden)"
|
||||||
|
|
||||||
#: netbox/templates/vpn/ipsecpolicy.html:10
|
#: netbox/templates/vpn/ipsecpolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170
|
#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170
|
||||||
@ -14660,7 +14653,7 @@ msgstr "Peer-Abschlusspunkt"
|
|||||||
|
|
||||||
#: netbox/templates/wireless/inc/authentication_attrs.html:12
|
#: netbox/templates/wireless/inc/authentication_attrs.html:12
|
||||||
msgid "Cipher"
|
msgid "Cipher"
|
||||||
msgstr "Chiffre"
|
msgstr "Verschlüsselungsalgorithmus"
|
||||||
|
|
||||||
#: netbox/templates/wireless/inc/authentication_attrs.html:16
|
#: netbox/templates/wireless/inc/authentication_attrs.html:16
|
||||||
msgid "PSK"
|
msgid "PSK"
|
||||||
@ -15638,8 +15631,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} gehört zu einer anderen Seite ({device_site}) als der Cluster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -15977,7 +15968,7 @@ msgstr "SA-Lebendauer"
|
|||||||
#: netbox/wireless/forms/filtersets.py:64
|
#: netbox/wireless/forms/filtersets.py:64
|
||||||
#: netbox/wireless/forms/filtersets.py:98
|
#: netbox/wireless/forms/filtersets.py:98
|
||||||
msgid "Pre-shared key"
|
msgid "Pre-shared key"
|
||||||
msgstr "Vorab geteilter Schlüssel (Pre-shared key)"
|
msgstr "Vorab geteilter Schlüssel (PSK)"
|
||||||
|
|
||||||
#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239
|
#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239
|
||||||
#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370
|
#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370
|
||||||
@ -15993,7 +15984,7 @@ msgstr "IPSec-Richtlinie"
|
|||||||
|
|
||||||
#: netbox/vpn/forms/bulk_import.py:50
|
#: netbox/vpn/forms/bulk_import.py:50
|
||||||
msgid "Tunnel encapsulation"
|
msgid "Tunnel encapsulation"
|
||||||
msgstr "Tunnelkapselung"
|
msgstr "Tunnel Encapsulation"
|
||||||
|
|
||||||
#: netbox/vpn/forms/bulk_import.py:83
|
#: netbox/vpn/forms/bulk_import.py:83
|
||||||
msgid "Operational role"
|
msgid "Operational role"
|
||||||
@ -16140,7 +16131,7 @@ msgstr "Vorschläge"
|
|||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39
|
#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39
|
||||||
msgid "pre-shared key"
|
msgid "pre-shared key"
|
||||||
msgstr "vorab geteilter Schlüssel"
|
msgstr "vorab geteilter Schlüssel (PSK)"
|
||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:105
|
#: netbox/vpn/models/crypto.py:105
|
||||||
msgid "IKE policies"
|
msgid "IKE policies"
|
||||||
@ -16273,7 +16264,7 @@ msgstr "SA-Lebensdauer"
|
|||||||
|
|
||||||
#: netbox/vpn/tables/crypto.py:71
|
#: netbox/vpn/tables/crypto.py:71
|
||||||
msgid "Pre-shared Key"
|
msgid "Pre-shared Key"
|
||||||
msgstr "Vorab geteilter Schlüssel"
|
msgstr "Vorab geteilter Schlüssel (PSK)"
|
||||||
|
|
||||||
#: netbox/vpn/tables/crypto.py:103
|
#: netbox/vpn/tables/crypto.py:103
|
||||||
msgid "SA Lifetime (Seconds)"
|
msgid "SA Lifetime (Seconds)"
|
||||||
@ -16390,7 +16381,6 @@ msgstr "Funkverbindungen"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Beim Einstellen einer Funkreichweite muss eine Einheit angegeben werden"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -25,7 +25,7 @@ msgstr ""
|
|||||||
#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39
|
#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39
|
||||||
#: netbox/users/forms/model_forms.py:112
|
#: netbox/users/forms/model_forms.py:112
|
||||||
msgid "Key"
|
msgid "Key"
|
||||||
msgstr "Llave"
|
msgstr "Clave"
|
||||||
|
|
||||||
#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132
|
#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132
|
||||||
msgid "Write Enabled"
|
msgid "Write Enabled"
|
||||||
@ -61,7 +61,7 @@ msgstr "Utilizado por última vez"
|
|||||||
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
||||||
#: netbox/users/forms/model_forms.py:124
|
#: netbox/users/forms/model_forms.py:124
|
||||||
msgid "Allowed IPs"
|
msgid "Allowed IPs"
|
||||||
msgstr "IPs permitidas"
|
msgstr "IP permitidas"
|
||||||
|
|
||||||
#: netbox/account/views.py:114
|
#: netbox/account/views.py:114
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -117,7 +117,7 @@ msgstr "Activo"
|
|||||||
#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24
|
#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24
|
||||||
#: netbox/virtualization/choices.py:43
|
#: netbox/virtualization/choices.py:43
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Desconectado"
|
msgstr "Fuera de línea"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:25
|
#: netbox/circuits/choices.py:25
|
||||||
msgid "Deprovisioning"
|
msgid "Deprovisioning"
|
||||||
@ -125,7 +125,7 @@ msgstr "Desaprovisionamiento"
|
|||||||
|
|
||||||
#: netbox/circuits/choices.py:26
|
#: netbox/circuits/choices.py:26
|
||||||
msgid "Decommissioned"
|
msgid "Decommissioned"
|
||||||
msgstr "Desmantelado"
|
msgstr "Retirado"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619
|
#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619
|
||||||
#: netbox/tenancy/choices.py:17
|
#: netbox/tenancy/choices.py:17
|
||||||
@ -167,7 +167,7 @@ msgstr "Región (ID)"
|
|||||||
#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52
|
#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52
|
||||||
#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353
|
#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353
|
||||||
msgid "Region (slug)"
|
msgid "Region (slug)"
|
||||||
msgstr "Región (slug)"
|
msgstr "Región (babosa)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211
|
#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211
|
||||||
#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225
|
#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225
|
||||||
@ -261,7 +261,7 @@ msgstr "Sitio"
|
|||||||
#: netbox/virtualization/filtersets.py:75
|
#: netbox/virtualization/filtersets.py:75
|
||||||
#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363
|
#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363
|
||||||
msgid "Site (slug)"
|
msgid "Site (slug)"
|
||||||
msgstr "Sitio (babosa)"
|
msgstr "Sitio (slug)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:67
|
#: netbox/circuits/filtersets.py:67
|
||||||
msgid "ASN (ID)"
|
msgid "ASN (ID)"
|
||||||
@ -284,7 +284,7 @@ msgstr "Proveedor (ID)"
|
|||||||
#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289
|
#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289
|
||||||
#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251
|
#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251
|
||||||
msgid "Provider (slug)"
|
msgid "Provider (slug)"
|
||||||
msgstr "Proveedor (babosa)"
|
msgstr "Proveedor (slug)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:167
|
#: netbox/circuits/filtersets.py:167
|
||||||
msgid "Provider account (ID)"
|
msgid "Provider account (ID)"
|
||||||
@ -394,7 +394,7 @@ msgstr "Grupo de circuitos (slug)"
|
|||||||
#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175
|
#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175
|
||||||
#: netbox/templates/circuits/provider.html:23
|
#: netbox/templates/circuits/provider.html:23
|
||||||
msgid "ASNs"
|
msgid "ASNs"
|
||||||
msgstr "ASNs"
|
msgstr "ASN"
|
||||||
|
|
||||||
#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56
|
#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56
|
||||||
#: netbox/circuits/forms/bulk_edit.py:83
|
#: netbox/circuits/forms/bulk_edit.py:83
|
||||||
@ -1234,7 +1234,7 @@ msgstr "Asignaciones de grupos de circuitos"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "terminación"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1296,15 +1296,11 @@ msgstr "terminaciones de circuitos"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Una terminación de circuito debe conectarse a un sitio o a una red de "
|
|
||||||
"proveedores."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Una terminación de circuito no puede conectarse tanto a un sitio como a una "
|
|
||||||
"red de proveedores."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9913,7 +9909,7 @@ msgstr "Gama ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Asignación de sitio/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12769,7 +12765,6 @@ msgstr "Error al renderizar la plantilla"
|
|||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se ha asignado ninguna plantilla de configuración para este dispositivo."
|
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -14039,7 +14034,7 @@ msgstr "Centro de ayuda"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Administrador de Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14454,8 +14449,6 @@ msgstr "Agregar disco virtual"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se ha asignado ninguna plantilla de configuración para esta máquina "
|
|
||||||
"virtual."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15576,8 +15569,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} pertenece a un sitio diferente ({device_site}) que el clúster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16317,7 +16308,7 @@ msgstr "enlaces inalámbricos"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "Debe especificar una unidad al configurar una distancia inalámbrica"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -11,8 +11,10 @@
|
|||||||
# Jean Benoit <jean@unistra.fr>, 2024
|
# Jean Benoit <jean@unistra.fr>, 2024
|
||||||
# thomas rivemale, 2024
|
# thomas rivemale, 2024
|
||||||
# Jeff Gehlbach, 2024
|
# Jeff Gehlbach, 2024
|
||||||
# Jeremy Stretch, 2024
|
|
||||||
# marcpaulchand <paul@u129.fr>, 2025
|
# marcpaulchand <paul@u129.fr>, 2025
|
||||||
|
# Jeremy Stretch, 2025
|
||||||
|
# Mathieu, 2025
|
||||||
|
# Étienne Brunel, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -21,7 +23,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: marcpaulchand <paul@u129.fr>, 2025\n"
|
"Last-Translator: Étienne Brunel, 2025\n"
|
||||||
"Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n"
|
"Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -935,7 +937,7 @@ msgstr "État opérationnel"
|
|||||||
#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59
|
#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59
|
||||||
#: netbox/wireless/forms/bulk_import.py:101
|
#: netbox/wireless/forms/bulk_import.py:101
|
||||||
msgid "Assigned tenant"
|
msgid "Assigned tenant"
|
||||||
msgstr "Locataire associé"
|
msgstr "Entité associée"
|
||||||
|
|
||||||
#: netbox/circuits/forms/bulk_import.py:120
|
#: netbox/circuits/forms/bulk_import.py:120
|
||||||
#: netbox/templates/circuits/inc/circuit_termination.html:6
|
#: netbox/templates/circuits/inc/circuit_termination.html:6
|
||||||
@ -1242,7 +1244,7 @@ msgstr "Assignations de groupes de circuits"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "résiliation"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1304,15 +1306,11 @@ msgstr "terminaisons de circuits"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Une terminaison de circuit doit être connectée à un site ou à un réseau "
|
|
||||||
"fournisseur."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Une terminaison de circuit ne peut pas être connectée à la fois à un site et"
|
|
||||||
" à un réseau fournisseur."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -3205,7 +3203,7 @@ msgstr "Est un membre virtuel du châssis"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1164
|
#: netbox/dcim/filtersets.py:1164
|
||||||
msgid "OOB IP (ID)"
|
msgid "OOB IP (ID)"
|
||||||
msgstr "ASTUCE SUR L'EMPLOI (ID)"
|
msgstr "GESTION HORS BANDE (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1168
|
#: netbox/dcim/filtersets.py:1168
|
||||||
msgid "Has virtual device context"
|
msgid "Has virtual device context"
|
||||||
@ -3334,7 +3332,7 @@ msgstr "VRF (RD)"
|
|||||||
#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032
|
#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032
|
||||||
#: netbox/vpn/filtersets.py:342
|
#: netbox/vpn/filtersets.py:342
|
||||||
msgid "L2VPN (ID)"
|
msgid "L2VPN (ID)"
|
||||||
msgstr "L2VPN (IDENTIFIANT)"
|
msgstr "L2VPN (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433
|
#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433
|
||||||
#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038
|
#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038
|
||||||
@ -3380,7 +3378,7 @@ msgstr "Contexte du périphérique virtuel"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1719
|
#: netbox/dcim/filtersets.py:1719
|
||||||
msgid "Virtual Device Context (Identifier)"
|
msgid "Virtual Device Context (Identifier)"
|
||||||
msgstr "Contexte du périphérique virtuel (identifiant)"
|
msgstr "Contexte du périphérique virtuel (Identifiant)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1730
|
#: netbox/dcim/filtersets.py:1730
|
||||||
#: netbox/templates/wireless/wirelesslan.html:11
|
#: netbox/templates/wireless/wirelesslan.html:11
|
||||||
@ -3418,12 +3416,12 @@ msgstr "Master (nom)"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245
|
#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245
|
||||||
msgid "Tenant (ID)"
|
msgid "Tenant (ID)"
|
||||||
msgstr "Locataire (ID)"
|
msgstr "Entité (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618
|
#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618
|
||||||
#: netbox/tenancy/filtersets.py:251
|
#: netbox/tenancy/filtersets.py:251
|
||||||
msgid "Tenant (slug)"
|
msgid "Tenant (slug)"
|
||||||
msgstr "Locataire (slug)"
|
msgstr "Entité (slug)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077
|
#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077
|
||||||
msgid "Unterminated"
|
msgid "Unterminated"
|
||||||
@ -3474,7 +3472,7 @@ msgstr "Téléphone de contact"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_edit.py:144
|
#: netbox/dcim/forms/bulk_edit.py:144
|
||||||
msgid "Contact E-mail"
|
msgid "Contact E-mail"
|
||||||
msgstr "Adresse électronique de contact"
|
msgstr "Adresse mail de contact"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123
|
#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123
|
||||||
#: netbox/dcim/forms/model_forms.py:128
|
#: netbox/dcim/forms/model_forms.py:128
|
||||||
@ -3691,7 +3689,7 @@ msgstr "Étiquette d'actif"
|
|||||||
#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65
|
#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65
|
||||||
#: netbox/templates/dcim/racktype.html:28
|
#: netbox/templates/dcim/racktype.html:28
|
||||||
msgid "Airflow"
|
msgid "Airflow"
|
||||||
msgstr "Débit d'air"
|
msgstr "Flux d'air"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925
|
#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925
|
||||||
#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347
|
#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347
|
||||||
@ -3732,7 +3730,7 @@ msgstr "Plateforme par défaut"
|
|||||||
#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570
|
#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570
|
||||||
#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622
|
#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622
|
||||||
msgid "Part number"
|
msgid "Part number"
|
||||||
msgstr "Numéro de pièce"
|
msgstr "Référence de pièce"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_edit.py:515
|
#: netbox/dcim/forms/bulk_edit.py:515
|
||||||
msgid "U height"
|
msgid "U height"
|
||||||
@ -4233,7 +4231,7 @@ msgstr "Unité de poids de la baie"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:245
|
#: netbox/dcim/forms/bulk_import.py:245
|
||||||
msgid "Name of assigned tenant"
|
msgid "Name of assigned tenant"
|
||||||
msgstr "Nom du locataire associé"
|
msgstr "Nom de l'entité associée"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:257
|
#: netbox/dcim/forms/bulk_import.py:257
|
||||||
msgid "Name of assigned role"
|
msgid "Name of assigned role"
|
||||||
@ -4250,11 +4248,11 @@ msgstr "Direction du flux d'air"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:324
|
#: netbox/dcim/forms/bulk_import.py:324
|
||||||
msgid "Width must be set if not specifying a rack type."
|
msgid "Width must be set if not specifying a rack type."
|
||||||
msgstr ""
|
msgstr "La largeur doit être définie si aucun type de rack n'est spécifié."
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:326
|
#: netbox/dcim/forms/bulk_import.py:326
|
||||||
msgid "U height must be set if not specifying a rack type."
|
msgid "U height must be set if not specifying a rack type."
|
||||||
msgstr ""
|
msgstr "La hauteur U doit être définie si aucun type de rack n'est spécifié."
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:334
|
#: netbox/dcim/forms/bulk_import.py:334
|
||||||
msgid "Parent site"
|
msgid "Parent site"
|
||||||
@ -4340,7 +4338,7 @@ msgstr "Baie attribuée (le cas échéant)"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:582
|
#: netbox/dcim/forms/bulk_import.py:582
|
||||||
msgid "Face"
|
msgid "Face"
|
||||||
msgstr "Visage"
|
msgstr "Orientation"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:585
|
#: netbox/dcim/forms/bulk_import.py:585
|
||||||
msgid "Mounted rack face"
|
msgid "Mounted rack face"
|
||||||
@ -4427,11 +4425,11 @@ msgstr "Interface pour les parents"
|
|||||||
#: netbox/virtualization/forms/bulk_import.py:162
|
#: netbox/virtualization/forms/bulk_import.py:162
|
||||||
#: netbox/virtualization/forms/model_forms.py:313
|
#: netbox/virtualization/forms/model_forms.py:313
|
||||||
msgid "Bridged interface"
|
msgid "Bridged interface"
|
||||||
msgstr "Interface pontée"
|
msgstr "Interface switchée"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:869
|
#: netbox/dcim/forms/bulk_import.py:869
|
||||||
msgid "Lag"
|
msgid "Lag"
|
||||||
msgstr "Retard"
|
msgstr "Lag"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:873
|
#: netbox/dcim/forms/bulk_import.py:873
|
||||||
msgid "Parent LAG interface"
|
msgid "Parent LAG interface"
|
||||||
@ -4460,7 +4458,7 @@ msgstr "Mode PoE"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:901
|
#: netbox/dcim/forms/bulk_import.py:901
|
||||||
msgid "Poe type"
|
msgid "Poe type"
|
||||||
msgstr "Type de poteau"
|
msgstr "Type de POE"
|
||||||
|
|
||||||
#: netbox/dcim/forms/bulk_import.py:910
|
#: netbox/dcim/forms/bulk_import.py:910
|
||||||
#: netbox/virtualization/forms/bulk_import.py:168
|
#: netbox/virtualization/forms/bulk_import.py:168
|
||||||
@ -4919,6 +4917,11 @@ msgid ""
|
|||||||
"present, will be automatically replaced with the position value when "
|
"present, will be automatically replaced with the position value when "
|
||||||
"creating a new module."
|
"creating a new module."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Les plages alphanumériques sont prises en charge pour la création en masse. "
|
||||||
|
"Les mélanges de casses ou de types au sein d'une même plage ne sont pas pris"
|
||||||
|
" en charge (exemple : <code>[ge,xe]-0/0/[0-9]</code>). Le jeton "
|
||||||
|
"<code>{module}</code>, s'il est présent, sera automatiquement remplacé par "
|
||||||
|
"la valeur de position lors de la création d'un nouveau module."
|
||||||
|
|
||||||
#: netbox/dcim/forms/model_forms.py:1094
|
#: netbox/dcim/forms/model_forms.py:1094
|
||||||
msgid "Console port template"
|
msgid "Console port template"
|
||||||
@ -7624,7 +7627,7 @@ msgstr "Type de cluster (slug)"
|
|||||||
#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16
|
#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16
|
||||||
#: netbox/tenancy/forms/forms.py:39
|
#: netbox/tenancy/forms/forms.py:39
|
||||||
msgid "Tenant group"
|
msgid "Tenant group"
|
||||||
msgstr "Groupe de locataires"
|
msgstr "Groupe d'entitées"
|
||||||
|
|
||||||
#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188
|
#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188
|
||||||
#: netbox/tenancy/filtersets.py:208
|
#: netbox/tenancy/filtersets.py:208
|
||||||
@ -7988,7 +7991,7 @@ msgstr "Clusters"
|
|||||||
#: netbox/extras/forms/filtersets.py:391
|
#: netbox/extras/forms/filtersets.py:391
|
||||||
#: netbox/extras/forms/model_forms.py:557
|
#: netbox/extras/forms/model_forms.py:557
|
||||||
msgid "Tenant groups"
|
msgid "Tenant groups"
|
||||||
msgstr "Groupes de locataires"
|
msgstr "Groupes d'entitées"
|
||||||
|
|
||||||
#: netbox/extras/forms/model_forms.py:49
|
#: netbox/extras/forms/model_forms.py:49
|
||||||
msgid "The type(s) of object that have this custom field"
|
msgid "The type(s) of object that have this custom field"
|
||||||
@ -8149,7 +8152,7 @@ msgstr "Groupe de notifications"
|
|||||||
#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26
|
#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26
|
||||||
#: netbox/tenancy/tables/tenants.py:22
|
#: netbox/tenancy/tables/tenants.py:22
|
||||||
msgid "Tenants"
|
msgid "Tenants"
|
||||||
msgstr "Locataires"
|
msgstr "Entité"
|
||||||
|
|
||||||
#: netbox/extras/forms/model_forms.py:606
|
#: netbox/extras/forms/model_forms.py:606
|
||||||
msgid "Data is populated from the remote source selected below."
|
msgid "Data is populated from the remote source selected below."
|
||||||
@ -8434,8 +8437,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Expression régulière à appliquer aux valeurs des champs de texte. Utilisez ^"
|
"Expression régulière à appliquer aux valeurs des champs de texte. Utilisez ^"
|
||||||
" et $ pour forcer la mise en correspondance de la chaîne entière. Par "
|
" et $ pour forcer la mise en correspondance de la chaîne entière. Par "
|
||||||
"exemple, <code>^ [DE A À Z]{3}$</code> limitera les valeurs à exactement "
|
"exemple, <code>^[A-Z]{3}$</code> limitera les valeurs à exactement trois "
|
||||||
"trois lettres majuscules."
|
"lettres majuscules."
|
||||||
|
|
||||||
#: netbox/extras/models/customfields.py:201
|
#: netbox/extras/models/customfields.py:201
|
||||||
msgid "choice set"
|
msgid "choice set"
|
||||||
@ -8740,10 +8743,9 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Modèle Jinja2 pour un corps de requête personnalisé. Si ce champ est vide, "
|
"Modèle Jinja2 pour un corps de requête personnalisé. Si ce champ est vide, "
|
||||||
"un objet JSON représentant la modification sera inclus. Les données "
|
"un objet JSON représentant la modification sera inclus. Les données "
|
||||||
"contextuelles disponibles incluent : <code>événement</code>, "
|
"contextuelles disponibles incluent : <code>event</code>, <code>model</code>,"
|
||||||
"<code>modèle</code>, <code>horodatage</code>, <code>nom "
|
" <code>timestamp</code>, <code>username</code>, <code>request_id</code>, et "
|
||||||
"d'utilisateur</code>, <code>identifiant_demande</code>, et "
|
"<code>data</code>."
|
||||||
"<code>données</code>."
|
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:204
|
#: netbox/extras/models/models.py:204
|
||||||
msgid "secret"
|
msgid "secret"
|
||||||
@ -8755,10 +8757,10 @@ msgid ""
|
|||||||
"header containing a HMAC hex digest of the payload body using the secret as "
|
"header containing a HMAC hex digest of the payload body using the secret as "
|
||||||
"the key. The secret is not transmitted in the request."
|
"the key. The secret is not transmitted in the request."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lorsqu'elle sera fournie, la demande comprendra un <code>Signature "
|
"Lorsqu'elle sera fournie, la demande comprendra un <code>X-Hook-"
|
||||||
"X-Hook</code> en-tête contenant un condensé hexadécimal HMAC du corps de la "
|
"Signature</code> en-tête contenant un condensé hexadécimal HMAC du corps de "
|
||||||
"charge utile en utilisant le secret comme clé. Le secret n'est pas transmis "
|
"la charge utile en utilisant le secret comme clé. Le secret n'est pas "
|
||||||
"dans la demande."
|
"transmis dans la demande."
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:215
|
#: netbox/extras/models/models.py:215
|
||||||
msgid "Enable SSL certificate verification. Disable with caution!"
|
msgid "Enable SSL certificate verification. Disable with caution!"
|
||||||
@ -8841,13 +8843,11 @@ msgid ""
|
|||||||
"context variable named <code>queryset</code>."
|
"context variable named <code>queryset</code>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Code du modèle Jinja2. La liste des objets exportés est transmise sous forme"
|
"Code du modèle Jinja2. La liste des objets exportés est transmise sous forme"
|
||||||
" de variable de contexte nommée <code>ensemble de requêtes</code>."
|
" de variable de contexte nommée <code>queryset</code>."
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:410
|
#: netbox/extras/models/models.py:410
|
||||||
msgid "Defaults to <code>text/plain; charset=utf-8</code>"
|
msgid "Defaults to <code>text/plain; charset=utf-8</code>"
|
||||||
msgstr ""
|
msgstr "La valeur par défaut est <code>text/plain; charset=utf-8</code>"
|
||||||
"La valeur par défaut est <code>texte/plain ; jeu de caractères = "
|
|
||||||
"utf-8</code>"
|
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:413
|
#: netbox/extras/models/models.py:413
|
||||||
msgid "file extension"
|
msgid "file extension"
|
||||||
@ -9743,11 +9743,11 @@ msgstr "Faites-en l'adresse IP principale de l'appareil attribué"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:330
|
#: netbox/ipam/forms/bulk_import.py:330
|
||||||
msgid "Is out-of-band"
|
msgid "Is out-of-band"
|
||||||
msgstr ""
|
msgstr "Est hors bande"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:331
|
#: netbox/ipam/forms/bulk_import.py:331
|
||||||
msgid "Designate this as the out-of-band IP address for the assigned device"
|
msgid "Designate this as the out-of-band IP address for the assigned device"
|
||||||
msgstr ""
|
msgstr "Désignez-le comme adresse IP hors bande pour l'appareil attribué"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:371
|
#: netbox/ipam/forms/bulk_import.py:371
|
||||||
msgid "No device or virtual machine specified; cannot set as primary IP"
|
msgid "No device or virtual machine specified; cannot set as primary IP"
|
||||||
@ -9758,10 +9758,13 @@ msgstr ""
|
|||||||
#: netbox/ipam/forms/bulk_import.py:375
|
#: netbox/ipam/forms/bulk_import.py:375
|
||||||
msgid "No device specified; cannot set as out-of-band IP"
|
msgid "No device specified; cannot set as out-of-band IP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Aucun appareil n'a été spécifié ; impossible de le définir comme IP hors "
|
||||||
|
"bande"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:379
|
#: netbox/ipam/forms/bulk_import.py:379
|
||||||
msgid "Cannot set out-of-band IP for virtual machines"
|
msgid "Cannot set out-of-band IP for virtual machines"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Impossible de définir une adresse IP hors bande pour les machines virtuelles"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:383
|
#: netbox/ipam/forms/bulk_import.py:383
|
||||||
msgid "No interface specified; cannot set as primary IP"
|
msgid "No interface specified; cannot set as primary IP"
|
||||||
@ -9772,6 +9775,7 @@ msgstr ""
|
|||||||
#: netbox/ipam/forms/bulk_import.py:387
|
#: netbox/ipam/forms/bulk_import.py:387
|
||||||
msgid "No interface specified; cannot set as out-of-band IP"
|
msgid "No interface specified; cannot set as out-of-band IP"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Aucune interface spécifiée ; impossible de définir comme IP hors bande"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:422
|
#: netbox/ipam/forms/bulk_import.py:422
|
||||||
msgid "Auth type"
|
msgid "Auth type"
|
||||||
@ -9930,7 +9934,7 @@ msgstr "Plage ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Affectation de site/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -9949,7 +9953,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:314
|
#: netbox/ipam/forms/model_forms.py:314
|
||||||
msgid "Make this the out-of-band IP for the device"
|
msgid "Make this the out-of-band IP for the device"
|
||||||
msgstr ""
|
msgstr "Choisissez cette adresse IP hors bande pour l'appareil"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:329
|
#: netbox/ipam/forms/model_forms.py:329
|
||||||
msgid "NAT IP (Inside)"
|
msgid "NAT IP (Inside)"
|
||||||
@ -9962,10 +9966,12 @@ msgstr "Une adresse IP ne peut être attribuée qu'à un seul objet."
|
|||||||
#: netbox/ipam/forms/model_forms.py:398
|
#: netbox/ipam/forms/model_forms.py:398
|
||||||
msgid "Cannot reassign primary IP address for the parent device/VM"
|
msgid "Cannot reassign primary IP address for the parent device/VM"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Impossible de réattribuer l'adresse IP principale à l'appareil parent/à la "
|
||||||
|
"machine virtuelle"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:402
|
#: netbox/ipam/forms/model_forms.py:402
|
||||||
msgid "Cannot reassign out-of-Band IP address for the parent device"
|
msgid "Cannot reassign out-of-Band IP address for the parent device"
|
||||||
msgstr ""
|
msgstr "Impossible de réattribuer l'adresse IP hors bande à l'appareil parent"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:412
|
#: netbox/ipam/forms/model_forms.py:412
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -9979,6 +9985,8 @@ msgid ""
|
|||||||
"Only IP addresses assigned to a device interface can be designated as the "
|
"Only IP addresses assigned to a device interface can be designated as the "
|
||||||
"out-of-band IP for a device."
|
"out-of-band IP for a device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Seules les adresses IP attribuées à l'interface d'un appareil peuvent être "
|
||||||
|
"désignées comme IP hors bande pour un appareil."
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:508
|
#: netbox/ipam/forms/model_forms.py:508
|
||||||
msgid "Virtual IP Address"
|
msgid "Virtual IP Address"
|
||||||
@ -10389,11 +10397,14 @@ msgstr "Impossible de définir scope_id sans scope_type."
|
|||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}"
|
msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"ID de VLAN de démarrage dans la plage ({value}) ne peut pas être inférieur à"
|
||||||
|
" {minimum}"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:111
|
#: netbox/ipam/models/vlans.py:111
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}"
|
msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Fin de l'ID VLAN dans la plage ({value}) ne peut pas dépasser {maximum}"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:118
|
#: netbox/ipam/models/vlans.py:118
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -10401,6 +10412,8 @@ msgid ""
|
|||||||
"Ending VLAN ID in range must be greater than or equal to the starting VLAN "
|
"Ending VLAN ID in range must be greater than or equal to the starting VLAN "
|
||||||
"ID ({range})"
|
"ID ({range})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"L'ID VLAN final dans la plage doit être supérieur ou égal à l'ID VLAN de "
|
||||||
|
"départ ({range})"
|
||||||
|
|
||||||
#: netbox/ipam/models/vlans.py:124
|
#: netbox/ipam/models/vlans.py:124
|
||||||
msgid "Ranges cannot overlap."
|
msgid "Ranges cannot overlap."
|
||||||
@ -12787,7 +12800,7 @@ msgstr "Télécharger"
|
|||||||
#: netbox/templates/dcim/device/render_config.html:64
|
#: netbox/templates/dcim/device/render_config.html:64
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:64
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:64
|
||||||
msgid "Error rendering template"
|
msgid "Error rendering template"
|
||||||
msgstr ""
|
msgstr "Erreur lors du rendu du modèle"
|
||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
@ -13322,8 +13335,8 @@ msgstr ""
|
|||||||
"installation de NetBox. Ces paquets sont répertoriés dans "
|
"installation de NetBox. Ces paquets sont répertoriés dans "
|
||||||
"<code>requirements.txt</code> et <code>local_requirements.txt</code>, et "
|
"<code>requirements.txt</code> et <code>local_requirements.txt</code>, et "
|
||||||
"sont normalement installés dans le cadre du processus d'installation ou de "
|
"sont normalement installés dans le cadre du processus d'installation ou de "
|
||||||
"mise à jour. Pour vérifier les paquets installés, exécutez <code>Pip "
|
"mise à jour. Pour vérifier les paquets installés, exécutez <code>pip "
|
||||||
"Freeze</code> depuis la console et comparez la sortie à la liste des paquets"
|
"freeze</code> depuis la console et comparez la sortie à la liste des paquets"
|
||||||
" requis."
|
" requis."
|
||||||
|
|
||||||
#: netbox/templates/exceptions/import_error.html:20
|
#: netbox/templates/exceptions/import_error.html:20
|
||||||
@ -13661,7 +13674,7 @@ msgstr "Exécutez à nouveau"
|
|||||||
#: netbox/templates/extras/script_list.html:133
|
#: netbox/templates/extras/script_list.html:133
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Could not load scripts from module %(module)s"
|
msgid "Could not load scripts from module %(module)s"
|
||||||
msgstr ""
|
msgstr "Impossible de charger les scripts depuis le module %(module)s"
|
||||||
|
|
||||||
#: netbox/templates/extras/script_list.html:141
|
#: netbox/templates/extras/script_list.html:141
|
||||||
msgid "No Scripts Found"
|
msgid "No Scripts Found"
|
||||||
@ -14063,7 +14076,7 @@ msgstr "Centre d'aide"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Administrateur Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14900,7 +14913,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Réseaux IPv4/IPv6 autorisés à partir desquels le jeton peut être utilisé. "
|
"Réseaux IPv4/IPv6 autorisés à partir desquels le jeton peut être utilisé. "
|
||||||
"Laissez ce champ vide pour éviter toute restriction. Exemple : "
|
"Laissez ce champ vide pour éviter toute restriction. Exemple : "
|
||||||
"<code>10.1.1.0/24 192.168.10,16/32 2001 : db 8:1 : /64</code>"
|
"<code>10.1.1.0/24,192.168.10.16/32,2001:db8:1::/64</code>"
|
||||||
|
|
||||||
#: netbox/users/forms/model_forms.py:175
|
#: netbox/users/forms/model_forms.py:175
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
@ -15192,7 +15205,7 @@ msgid ""
|
|||||||
"<code>1-5,20-30</code>"
|
"<code>1-5,20-30</code>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Spécifiez une ou plusieurs plages numériques séparées par des virgules. "
|
"Spécifiez une ou plusieurs plages numériques séparées par des virgules. "
|
||||||
"Exemple : <code>1 à 5, 20 à 30</code>"
|
"Exemple : <code>1-5,20-30</code>"
|
||||||
|
|
||||||
#: netbox/utilities/forms/fields/array.py:47
|
#: netbox/utilities/forms/fields/array.py:47
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -15594,8 +15607,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} appartient à un autre site ({device_site}) puis le cluster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16338,7 +16349,6 @@ msgstr "liaisons sans fil"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous devez spécifier une unité lors du réglage d'une distance sans fil"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -1237,7 +1237,7 @@ msgstr "Assegnazioni di gruppi di circuiti"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "fine"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1299,15 +1299,11 @@ msgstr "terminazioni del circuito"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Una terminazione di circuito deve essere collegata a un sito o alla rete di "
|
|
||||||
"un provider."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Una terminazione di circuito non può essere collegata sia a un sito che alla"
|
|
||||||
" rete di un provider."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9936,7 +9932,7 @@ msgstr "Gamma ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Assegnazione sito/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12797,8 +12793,6 @@ msgstr "Errore nel rendering del modello"
|
|||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Non è stato assegnato alcun modello di configurazione per questo "
|
|
||||||
"dispositivo."
|
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -14070,7 +14064,7 @@ msgstr "Centro assistenza"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Amministratore Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14485,8 +14479,6 @@ msgstr "Aggiungi disco virtuale"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Non è stato assegnato alcun modello di configurazione per questa macchina "
|
|
||||||
"virtuale."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15600,8 +15592,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} appartiene a un sito diverso ({device_site}) rispetto al cluster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16344,7 +16334,6 @@ msgstr "collegamenti wireless"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"È necessario specificare un'unità quando si imposta una distanza wireless"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -5,8 +5,8 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Tatsuya Ueda <ml@tatsuya.info>, 2024
|
# Tatsuya Ueda <ml@tatsuya.info>, 2024
|
||||||
# teapot, 2024
|
# Jeremy Stretch, 2024
|
||||||
# Jeremy Stretch, 2025
|
# teapot, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -15,7 +15,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Jeremy Stretch, 2025\n"
|
"Last-Translator: teapot, 2025\n"
|
||||||
"Language-Team: Japanese (https://app.transifex.com/netbox-community/teams/178115/ja/)\n"
|
"Language-Team: Japanese (https://app.transifex.com/netbox-community/teams/178115/ja/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1234,7 +1234,7 @@ msgstr "割当回線グループ"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "終了"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1295,12 +1295,12 @@ msgstr "回線終端"
|
|||||||
#: netbox/circuits/models/circuits.py:308
|
#: netbox/circuits/models/circuits.py:308
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr "回線終端は、サイトまたはプロバイダーネットワークに接続する必要があります。"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr "回線終端をサイトとプロバイダーネットワークの両方に接続することはできません。"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -1565,7 +1565,7 @@ msgstr "コメント"
|
|||||||
#: netbox/templates/tenancy/contact.html:84
|
#: netbox/templates/tenancy/contact.html:84
|
||||||
#: netbox/tenancy/tables/contacts.py:73
|
#: netbox/tenancy/tables/contacts.py:73
|
||||||
msgid "Assignments"
|
msgid "Assignments"
|
||||||
msgstr "アサイメント"
|
msgstr "割当"
|
||||||
|
|
||||||
#: netbox/circuits/tables/providers.py:23
|
#: netbox/circuits/tables/providers.py:23
|
||||||
msgid "Accounts"
|
msgid "Accounts"
|
||||||
@ -1660,7 +1660,7 @@ msgstr "削除"
|
|||||||
|
|
||||||
#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30
|
#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30
|
||||||
msgid "Finished"
|
msgid "Finished"
|
||||||
msgstr "終了しました"
|
msgstr "終了済"
|
||||||
|
|
||||||
#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38
|
#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38
|
||||||
#: netbox/templates/core/job.html:82
|
#: netbox/templates/core/job.html:82
|
||||||
@ -1670,15 +1670,15 @@ msgstr "開始日時"
|
|||||||
|
|
||||||
#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26
|
#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26
|
||||||
msgid "Deferred"
|
msgid "Deferred"
|
||||||
msgstr "延期"
|
msgstr "延期済"
|
||||||
|
|
||||||
#: netbox/core/constants.py:24
|
#: netbox/core/constants.py:24
|
||||||
msgid "Stopped"
|
msgid "Stopped"
|
||||||
msgstr "停止しました"
|
msgstr "停止済"
|
||||||
|
|
||||||
#: netbox/core/constants.py:25
|
#: netbox/core/constants.py:25
|
||||||
msgid "Cancelled"
|
msgid "Cancelled"
|
||||||
msgstr "キャンセルされました"
|
msgstr "キャンセル済"
|
||||||
|
|
||||||
#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51
|
#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51
|
||||||
#: netbox/templates/core/plugin.html:88
|
#: netbox/templates/core/plugin.html:88
|
||||||
@ -1923,7 +1923,7 @@ msgstr "バックエンド設定"
|
|||||||
|
|
||||||
#: netbox/core/forms/model_forms.py:96
|
#: netbox/core/forms/model_forms.py:96
|
||||||
msgid "File Upload"
|
msgid "File Upload"
|
||||||
msgstr "ファイルのアップロード"
|
msgstr "アップロード"
|
||||||
|
|
||||||
#: netbox/core/forms/model_forms.py:108
|
#: netbox/core/forms/model_forms.py:108
|
||||||
msgid "Cannot upload a file and sync from an existing file"
|
msgid "Cannot upload a file and sync from an existing file"
|
||||||
@ -1972,7 +1972,7 @@ msgstr "ページネーション"
|
|||||||
#: netbox/extras/forms/model_forms.py:129
|
#: netbox/extras/forms/model_forms.py:129
|
||||||
#: netbox/templates/core/inc/config_data.html:93
|
#: netbox/templates/core/inc/config_data.html:93
|
||||||
msgid "Validation"
|
msgid "Validation"
|
||||||
msgstr "バリデーション"
|
msgstr "検証"
|
||||||
|
|
||||||
#: netbox/core/forms/model_forms.py:164
|
#: netbox/core/forms/model_forms.py:164
|
||||||
#: netbox/templates/account/preferences.html:6
|
#: netbox/templates/account/preferences.html:6
|
||||||
@ -2045,7 +2045,7 @@ msgstr "このオブジェクトタイプ ({type}) では変更ログはサポ
|
|||||||
#: netbox/extras/models/notifications.py:186
|
#: netbox/extras/models/notifications.py:186
|
||||||
#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32
|
#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32
|
||||||
msgid "created"
|
msgid "created"
|
||||||
msgstr "作成日時"
|
msgstr "作成"
|
||||||
|
|
||||||
#: netbox/core/models/config.py:22
|
#: netbox/core/models/config.py:22
|
||||||
msgid "comment"
|
msgid "comment"
|
||||||
@ -2380,7 +2380,7 @@ msgstr "最も古いタスク"
|
|||||||
|
|
||||||
#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39
|
#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39
|
||||||
msgid "Workers"
|
msgid "Workers"
|
||||||
msgstr "労働者"
|
msgstr "ワーカー"
|
||||||
|
|
||||||
#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88
|
#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
@ -2939,7 +2939,7 @@ msgstr "AS (ID)"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:246
|
#: netbox/dcim/filtersets.py:246
|
||||||
msgid "Parent location (ID)"
|
msgid "Parent location (ID)"
|
||||||
msgstr "親の場所 (ID)"
|
msgstr "親のロケーション (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:252
|
#: netbox/dcim/filtersets.py:252
|
||||||
msgid "Parent location (slug)"
|
msgid "Parent location (slug)"
|
||||||
@ -3052,7 +3052,7 @@ msgstr "電源コンセントがある"
|
|||||||
#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559
|
#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559
|
||||||
#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876
|
#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876
|
||||||
msgid "Has interfaces"
|
msgid "Has interfaces"
|
||||||
msgstr "インタフェースがある"
|
msgstr "インタフェースを持つ"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708
|
#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708
|
||||||
#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566
|
#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566
|
||||||
@ -3121,7 +3121,7 @@ msgstr "サイト名 (slug)"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1067
|
#: netbox/dcim/filtersets.py:1067
|
||||||
msgid "Parent bay (ID)"
|
msgid "Parent bay (ID)"
|
||||||
msgstr "ペアレントベイ (ID)"
|
msgstr "親ベイ (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1071
|
#: netbox/dcim/filtersets.py:1071
|
||||||
msgid "VM cluster (ID)"
|
msgid "VM cluster (ID)"
|
||||||
@ -3368,11 +3368,11 @@ msgstr "親モジュールベイ (ID)"
|
|||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1808
|
#: netbox/dcim/filtersets.py:1808
|
||||||
msgid "Installed module (ID)"
|
msgid "Installed module (ID)"
|
||||||
msgstr "インストール済みモジュール (ID)"
|
msgstr "インストール済モジュール (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1819
|
#: netbox/dcim/filtersets.py:1819
|
||||||
msgid "Installed device (ID)"
|
msgid "Installed device (ID)"
|
||||||
msgstr "インストール済みデバイス (ID)"
|
msgstr "インストール済デバイス (ID)"
|
||||||
|
|
||||||
#: netbox/dcim/filtersets.py:1825
|
#: netbox/dcim/filtersets.py:1825
|
||||||
msgid "Installed device (name)"
|
msgid "Installed device (name)"
|
||||||
@ -4728,7 +4728,7 @@ msgstr "クラスタグループ"
|
|||||||
|
|
||||||
#: netbox/dcim/forms/filtersets.py:1210
|
#: netbox/dcim/forms/filtersets.py:1210
|
||||||
msgid "Cabled"
|
msgid "Cabled"
|
||||||
msgstr "ケーブル接続済"
|
msgstr "配線済"
|
||||||
|
|
||||||
#: netbox/dcim/forms/filtersets.py:1217
|
#: netbox/dcim/forms/filtersets.py:1217
|
||||||
msgid "Occupied"
|
msgid "Occupied"
|
||||||
@ -6820,7 +6820,7 @@ msgstr "奥行きをすべて利用する"
|
|||||||
|
|
||||||
#: netbox/dcim/tables/devicetypes.py:98
|
#: netbox/dcim/tables/devicetypes.py:98
|
||||||
msgid "U Height"
|
msgid "U Height"
|
||||||
msgstr "U 高さ"
|
msgstr "ユニット数"
|
||||||
|
|
||||||
#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26
|
#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26
|
||||||
#: netbox/dcim/tables/racks.py:89
|
#: netbox/dcim/tables/racks.py:89
|
||||||
@ -7895,7 +7895,7 @@ msgstr "テンプレートコード"
|
|||||||
#: netbox/extras/forms/model_forms.py:247
|
#: netbox/extras/forms/model_forms.py:247
|
||||||
#: netbox/templates/extras/exporttemplate.html:12
|
#: netbox/templates/extras/exporttemplate.html:12
|
||||||
msgid "Export Template"
|
msgid "Export Template"
|
||||||
msgstr "テンプレートをエクスポート"
|
msgstr "エクスポートテンプレート"
|
||||||
|
|
||||||
#: netbox/extras/forms/model_forms.py:249
|
#: netbox/extras/forms/model_forms.py:249
|
||||||
msgid "Rendering"
|
msgid "Rendering"
|
||||||
@ -8204,7 +8204,7 @@ msgstr "最大許容値 (数値フィールド用)"
|
|||||||
|
|
||||||
#: netbox/extras/models/customfields.py:191
|
#: netbox/extras/models/customfields.py:191
|
||||||
msgid "validation regex"
|
msgid "validation regex"
|
||||||
msgstr "バリデーション正規表現"
|
msgstr "検証正規表現"
|
||||||
|
|
||||||
#: netbox/extras/models/customfields.py:193
|
#: netbox/extras/models/customfields.py:193
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@ -9071,11 +9071,11 @@ msgstr "スタンダード"
|
|||||||
|
|
||||||
#: netbox/ipam/choices.py:120
|
#: netbox/ipam/choices.py:120
|
||||||
msgid "CheckPoint"
|
msgid "CheckPoint"
|
||||||
msgstr "チェックポイント"
|
msgstr "CheckPoint"
|
||||||
|
|
||||||
#: netbox/ipam/choices.py:123
|
#: netbox/ipam/choices.py:123
|
||||||
msgid "Cisco"
|
msgid "Cisco"
|
||||||
msgstr "シスコ"
|
msgstr "Cisco"
|
||||||
|
|
||||||
#: netbox/ipam/choices.py:137
|
#: netbox/ipam/choices.py:137
|
||||||
msgid "Plaintext"
|
msgid "Plaintext"
|
||||||
@ -9295,7 +9295,7 @@ msgstr "重複を禁止する"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_edit.py:88
|
#: netbox/ipam/forms/bulk_edit.py:88
|
||||||
msgid "Is private"
|
msgid "Is private"
|
||||||
msgstr "非公開です"
|
msgstr "非公開"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138
|
#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138
|
||||||
#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89
|
#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89
|
||||||
@ -9472,7 +9472,7 @@ msgstr "割当インタフェースの親VM (存在する場合)"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:325
|
#: netbox/ipam/forms/bulk_import.py:325
|
||||||
msgid "Is primary"
|
msgid "Is primary"
|
||||||
msgstr "プライマリか"
|
msgstr "プライマリ"
|
||||||
|
|
||||||
#: netbox/ipam/forms/bulk_import.py:326
|
#: netbox/ipam/forms/bulk_import.py:326
|
||||||
msgid "Make this the primary IP for the assigned device"
|
msgid "Make this the primary IP for the assigned device"
|
||||||
@ -9663,7 +9663,7 @@ msgstr "ASN レンジ"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "サイト/VLAN 割り当て"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -10243,7 +10243,7 @@ msgstr "NAT (アウトサイド)"
|
|||||||
|
|
||||||
#: netbox/ipam/tables/ip.py:393
|
#: netbox/ipam/tables/ip.py:393
|
||||||
msgid "Assigned"
|
msgid "Assigned"
|
||||||
msgstr "割当済み"
|
msgstr "割当済"
|
||||||
|
|
||||||
#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16
|
#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16
|
||||||
#: netbox/vpn/forms/filtersets.py:240
|
#: netbox/vpn/forms/filtersets.py:240
|
||||||
@ -10498,7 +10498,7 @@ msgstr "グローバルテーブル内で一意の IP アドレスを強制す
|
|||||||
#: netbox/netbox/config/parameters.py:75
|
#: netbox/netbox/config/parameters.py:75
|
||||||
#: netbox/templates/core/inc/config_data.html:44
|
#: netbox/templates/core/inc/config_data.html:44
|
||||||
msgid "Prefer IPv4"
|
msgid "Prefer IPv4"
|
||||||
msgstr "IPv4 を優先する"
|
msgstr "IPv4 を優先"
|
||||||
|
|
||||||
#: netbox/netbox/config/parameters.py:77
|
#: netbox/netbox/config/parameters.py:77
|
||||||
msgid "Prefer IPv4 addresses over IPv6"
|
msgid "Prefer IPv4 addresses over IPv6"
|
||||||
@ -10982,7 +10982,7 @@ msgstr "エクスポートテンプレート"
|
|||||||
|
|
||||||
#: netbox/netbox/navigation/menu.py:329
|
#: netbox/netbox/navigation/menu.py:329
|
||||||
msgid "Saved Filters"
|
msgid "Saved Filters"
|
||||||
msgstr "保存済みフィルタ"
|
msgstr "保存済フィルタ"
|
||||||
|
|
||||||
#: netbox/netbox/navigation/menu.py:331
|
#: netbox/netbox/navigation/menu.py:331
|
||||||
msgid "Image Attachments"
|
msgid "Image Attachments"
|
||||||
@ -11006,7 +11006,7 @@ msgstr "イベントルール"
|
|||||||
|
|
||||||
#: netbox/netbox/navigation/menu.py:357
|
#: netbox/netbox/navigation/menu.py:357
|
||||||
msgid "Webhooks"
|
msgid "Webhooks"
|
||||||
msgstr "ウェブフック"
|
msgstr "Webhooks"
|
||||||
|
|
||||||
#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365
|
#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365
|
||||||
#: netbox/netbox/views/generic/feature_views.py:153
|
#: netbox/netbox/views/generic/feature_views.py:153
|
||||||
@ -11201,7 +11201,7 @@ msgstr "デンマーク語"
|
|||||||
|
|
||||||
#: netbox/netbox/settings.py:762
|
#: netbox/netbox/settings.py:762
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr "ドイツ人"
|
msgstr "ドイツ語"
|
||||||
|
|
||||||
#: netbox/netbox/settings.py:763
|
#: netbox/netbox/settings.py:763
|
||||||
msgid "English"
|
msgid "English"
|
||||||
@ -11899,7 +11899,7 @@ msgstr "ユーザープリファレンス"
|
|||||||
|
|
||||||
#: netbox/templates/core/inc/config_data.html:141
|
#: netbox/templates/core/inc/config_data.html:141
|
||||||
msgid "Job retention"
|
msgid "Job retention"
|
||||||
msgstr "仕事の維持"
|
msgstr "ジョブの維持"
|
||||||
|
|
||||||
#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12
|
#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12
|
||||||
#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58
|
#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58
|
||||||
@ -11959,7 +11959,7 @@ msgstr "警告:非アトミックな変更と以前の変更レコードの比
|
|||||||
|
|
||||||
#: netbox/templates/core/objectchange.html:131
|
#: netbox/templates/core/objectchange.html:131
|
||||||
msgid "Post-Change Data"
|
msgid "Post-Change Data"
|
||||||
msgstr "変更後のデータ"
|
msgstr "変更後データ"
|
||||||
|
|
||||||
#: netbox/templates/core/objectchange.html:162
|
#: netbox/templates/core/objectchange.html:162
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -12144,11 +12144,11 @@ msgstr "システムステータス"
|
|||||||
|
|
||||||
#: netbox/templates/core/system.html:31
|
#: netbox/templates/core/system.html:31
|
||||||
msgid "NetBox release"
|
msgid "NetBox release"
|
||||||
msgstr "ネットボックスリリース"
|
msgstr "NetBoxリリース"
|
||||||
|
|
||||||
#: netbox/templates/core/system.html:44
|
#: netbox/templates/core/system.html:44
|
||||||
msgid "Django version"
|
msgid "Django version"
|
||||||
msgstr "ジャンゴバージョン"
|
msgstr "Djangoバージョン"
|
||||||
|
|
||||||
#: netbox/templates/core/system.html:48
|
#: netbox/templates/core/system.html:48
|
||||||
msgid "PostgreSQL version"
|
msgid "PostgreSQL version"
|
||||||
@ -12313,7 +12313,7 @@ msgstr "用の NAT"
|
|||||||
#: netbox/templates/virtualization/virtualmachine.html:59
|
#: netbox/templates/virtualization/virtualmachine.html:59
|
||||||
#: netbox/templates/virtualization/virtualmachine.html:75
|
#: netbox/templates/virtualization/virtualmachine.html:75
|
||||||
msgid "NAT"
|
msgid "NAT"
|
||||||
msgstr "ナット"
|
msgstr "NAT"
|
||||||
|
|
||||||
#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73
|
#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73
|
||||||
msgid "Power Utilization"
|
msgid "Power Utilization"
|
||||||
@ -12441,11 +12441,11 @@ msgstr "エラーレンダリングテンプレート"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "このデバイスには設定テンプレートが割り当てられていません。"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
msgstr "ペアレントベイ"
|
msgstr "親ベイ"
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:48
|
#: netbox/templates/dcim/device_edit.html:48
|
||||||
#: netbox/utilities/templates/form_helpers/render_field.html:22
|
#: netbox/utilities/templates/form_helpers/render_field.html:22
|
||||||
@ -12475,7 +12475,7 @@ msgstr "デバイスベイ"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/devicebay.html:43
|
#: netbox/templates/dcim/devicebay.html:43
|
||||||
msgid "Installed Device"
|
msgid "Installed Device"
|
||||||
msgstr "取付済みデバイス"
|
msgstr "取付済デバイス"
|
||||||
|
|
||||||
#: netbox/templates/dcim/devicebay_depopulate.html:6
|
#: netbox/templates/dcim/devicebay_depopulate.html:6
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -12561,15 +12561,15 @@ msgstr "B サイド"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/inc/cable_termination.html:65
|
#: netbox/templates/dcim/inc/cable_termination.html:65
|
||||||
msgid "No termination"
|
msgid "No termination"
|
||||||
msgstr "終了なし"
|
msgstr "未終端"
|
||||||
|
|
||||||
#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3
|
#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3
|
||||||
msgid "Mark Planned"
|
msgid "Mark Planned"
|
||||||
msgstr "マーク・プランド"
|
msgstr "計画中とマークする"
|
||||||
|
|
||||||
#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6
|
#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6
|
||||||
msgid "Mark Installed"
|
msgid "Mark Installed"
|
||||||
msgstr "取付済みとマークする"
|
msgstr "取付済とマークする"
|
||||||
|
|
||||||
#: netbox/templates/dcim/inc/connection_endpoints.html:13
|
#: netbox/templates/dcim/inc/connection_endpoints.html:13
|
||||||
msgid "Path Status"
|
msgid "Path Status"
|
||||||
@ -12688,7 +12688,7 @@ msgstr "チャンネル幅"
|
|||||||
#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82
|
#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82
|
||||||
#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44
|
#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44
|
||||||
msgid "SSID"
|
msgid "SSID"
|
||||||
msgstr "言った"
|
msgstr "SSID"
|
||||||
|
|
||||||
#: netbox/templates/dcim/interface.html:305
|
#: netbox/templates/dcim/interface.html:305
|
||||||
msgid "LAG Members"
|
msgid "LAG Members"
|
||||||
@ -13273,7 +13273,7 @@ msgstr "スクリプトはソースファイルに存在しなくなりました
|
|||||||
|
|
||||||
#: netbox/templates/extras/script_list.html:47
|
#: netbox/templates/extras/script_list.html:47
|
||||||
msgid "Last Run"
|
msgid "Last Run"
|
||||||
msgstr "ラストラン"
|
msgstr "最終実行"
|
||||||
|
|
||||||
#: netbox/templates/extras/script_list.html:62
|
#: netbox/templates/extras/script_list.html:62
|
||||||
msgid "Script is no longer present in the source file"
|
msgid "Script is no longer present in the source file"
|
||||||
@ -13285,7 +13285,7 @@ msgstr "決して"
|
|||||||
|
|
||||||
#: netbox/templates/extras/script_list.html:85
|
#: netbox/templates/extras/script_list.html:85
|
||||||
msgid "Run Again"
|
msgid "Run Again"
|
||||||
msgstr "もう一度実行"
|
msgstr "再実行"
|
||||||
|
|
||||||
#: netbox/templates/extras/script_list.html:133
|
#: netbox/templates/extras/script_list.html:133
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -13317,7 +13317,7 @@ msgstr "ログ閾値"
|
|||||||
|
|
||||||
#: netbox/templates/extras/script_result.html:56
|
#: netbox/templates/extras/script_result.html:56
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "[すべて]"
|
msgstr "すべて"
|
||||||
|
|
||||||
#: netbox/templates/extras/tag.html:32
|
#: netbox/templates/extras/tag.html:32
|
||||||
msgid "Tagged Items"
|
msgid "Tagged Items"
|
||||||
@ -13557,7 +13557,7 @@ msgstr "新しいリリースが入手可能"
|
|||||||
|
|
||||||
#: netbox/templates/home.html:16
|
#: netbox/templates/home.html:16
|
||||||
msgid "is available"
|
msgid "is available"
|
||||||
msgstr "利用可能です"
|
msgstr "利用可能"
|
||||||
|
|
||||||
#: netbox/templates/home.html:18
|
#: netbox/templates/home.html:18
|
||||||
msgctxt "Document title"
|
msgctxt "Document title"
|
||||||
@ -13570,7 +13570,7 @@ msgstr "ダッシュボードのロック解除"
|
|||||||
|
|
||||||
#: netbox/templates/home.html:49
|
#: netbox/templates/home.html:49
|
||||||
msgid "Lock Dashboard"
|
msgid "Lock Dashboard"
|
||||||
msgstr "ロックダッシュボード"
|
msgstr "ダッシュボードのロック"
|
||||||
|
|
||||||
#: netbox/templates/home.html:60
|
#: netbox/templates/home.html:60
|
||||||
msgid "Add Widget"
|
msgid "Add Widget"
|
||||||
@ -13685,7 +13685,7 @@ msgstr "ヘルプセンター"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "ジャンゴ管理者"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14094,7 +14094,7 @@ msgstr "仮想ディスクを追加"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "このVMには構成テンプレートが割り当てられていません。"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -14251,7 +14251,7 @@ msgstr "PSK"
|
|||||||
#: netbox/templates/wireless/inc/wirelesslink_interface.html:45
|
#: netbox/templates/wireless/inc/wirelesslink_interface.html:45
|
||||||
msgctxt "Abbreviation for megahertz"
|
msgctxt "Abbreviation for megahertz"
|
||||||
msgid "MHz"
|
msgid "MHz"
|
||||||
msgstr "メガヘルツ"
|
msgstr "MHz"
|
||||||
|
|
||||||
#: netbox/templates/wireless/wirelesslan.html:57
|
#: netbox/templates/wireless/wirelesslan.html:57
|
||||||
msgid "Attached Interfaces"
|
msgid "Attached Interfaces"
|
||||||
@ -14454,7 +14454,7 @@ msgstr "通知グループ (ID)"
|
|||||||
|
|
||||||
#: netbox/users/forms/bulk_edit.py:26
|
#: netbox/users/forms/bulk_edit.py:26
|
||||||
msgid "First name"
|
msgid "First name"
|
||||||
msgstr "ファーストネーム"
|
msgstr "名前"
|
||||||
|
|
||||||
#: netbox/users/forms/bulk_edit.py:31
|
#: netbox/users/forms/bulk_edit.py:31
|
||||||
msgid "Last name"
|
msgid "Last name"
|
||||||
@ -14474,11 +14474,11 @@ msgstr "キーが指定されていない場合は、キーが自動的に生成
|
|||||||
|
|
||||||
#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42
|
#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42
|
||||||
msgid "Is Staff"
|
msgid "Is Staff"
|
||||||
msgstr "スタッフですか"
|
msgstr "スタッフ"
|
||||||
|
|
||||||
#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45
|
#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45
|
||||||
msgid "Is Superuser"
|
msgid "Is Superuser"
|
||||||
msgstr "スーパーユーザですか"
|
msgstr "スーパーユーザ"
|
||||||
|
|
||||||
#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86
|
#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86
|
||||||
msgid "Can View"
|
msgid "Can View"
|
||||||
@ -15156,7 +15156,7 @@ msgstr "シリアル番号"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr "{device} 別のサイトに属している ({device_site}) よりもクラスタ ({cluster_site})"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -15572,11 +15572,11 @@ msgstr "トンネルインターフェイス"
|
|||||||
|
|
||||||
#: netbox/vpn/forms/model_forms.py:150
|
#: netbox/vpn/forms/model_forms.py:150
|
||||||
msgid "First Termination"
|
msgid "First Termination"
|
||||||
msgstr "1 回目の解約"
|
msgstr "1 回目の終端"
|
||||||
|
|
||||||
#: netbox/vpn/forms/model_forms.py:153
|
#: netbox/vpn/forms/model_forms.py:153
|
||||||
msgid "Second Termination"
|
msgid "Second Termination"
|
||||||
msgstr "2 回目の終了"
|
msgstr "2 回目の終端"
|
||||||
|
|
||||||
#: netbox/vpn/forms/model_forms.py:197
|
#: netbox/vpn/forms/model_forms.py:197
|
||||||
msgid "This parameter is required when defining a termination."
|
msgid "This parameter is required when defining a termination."
|
||||||
@ -15605,7 +15605,7 @@ msgstr "認証アルゴリズム"
|
|||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:44
|
#: netbox/vpn/models/crypto.py:44
|
||||||
msgid "Diffie-Hellman group ID"
|
msgid "Diffie-Hellman group ID"
|
||||||
msgstr "ディフィー・ヘルマングループ ID"
|
msgstr "Diffie-Hellmanグループ ID"
|
||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:50
|
#: netbox/vpn/models/crypto.py:50
|
||||||
msgid "Security association lifetime (in seconds)"
|
msgid "Security association lifetime (in seconds)"
|
||||||
@ -15613,11 +15613,11 @@ msgstr "セキュリティアソシエーションの有効期間 (秒単位)"
|
|||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:59
|
#: netbox/vpn/models/crypto.py:59
|
||||||
msgid "IKE proposal"
|
msgid "IKE proposal"
|
||||||
msgstr "イケアの提案"
|
msgstr "IKEプロポザール"
|
||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:60
|
#: netbox/vpn/models/crypto.py:60
|
||||||
msgid "IKE proposals"
|
msgid "IKE proposals"
|
||||||
msgstr "IKEの提案"
|
msgstr "IKEプロポザール"
|
||||||
|
|
||||||
#: netbox/vpn/models/crypto.py:76
|
#: netbox/vpn/models/crypto.py:76
|
||||||
msgid "version"
|
msgid "version"
|
||||||
@ -15875,7 +15875,7 @@ msgstr "無線リンク"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "ワイヤレス距離を設定するときは単位を指定する必要があります"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -8,8 +8,8 @@
|
|||||||
# deku_m, 2024
|
# deku_m, 2024
|
||||||
# Peter Mulder <mistermulder+transifex@protonmail.com>, 2024
|
# Peter Mulder <mistermulder+transifex@protonmail.com>, 2024
|
||||||
# Sebastian Berm, 2024
|
# Sebastian Berm, 2024
|
||||||
# Jorg de Jong, 2025
|
|
||||||
# Jeremy Stretch, 2025
|
# Jeremy Stretch, 2025
|
||||||
|
# Jorg de Jong, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -18,7 +18,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Jeremy Stretch, 2025\n"
|
"Last-Translator: Jorg de Jong, 2025\n"
|
||||||
"Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n"
|
"Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1239,7 +1239,7 @@ msgstr "Circuitgroeptoewijzingen"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "beëindiging"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1301,15 +1301,11 @@ msgstr "circuitafsluitingen"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Een circuitafsluiting moet verbonden zijn met een site of een netwerk van "
|
|
||||||
"een provider."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Een circuitafsluiting kan niet worden aangesloten op zowel een site als een "
|
|
||||||
"netwerk van een provider."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -7744,7 +7740,7 @@ msgstr "CA-bestandspad"
|
|||||||
#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192
|
#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192
|
||||||
#: netbox/extras/forms/model_forms.py:377
|
#: netbox/extras/forms/model_forms.py:377
|
||||||
msgid "Event types"
|
msgid "Event types"
|
||||||
msgstr "Soorten evenementen"
|
msgstr "Soorten gebeurtenis"
|
||||||
|
|
||||||
#: netbox/extras/forms/bulk_edit.py:293
|
#: netbox/extras/forms/bulk_edit.py:293
|
||||||
msgid "Is active"
|
msgid "Is active"
|
||||||
@ -7835,7 +7831,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: netbox/extras/forms/bulk_import.py:193
|
#: netbox/extras/forms/bulk_import.py:193
|
||||||
msgid "The event type(s) which will trigger this rule"
|
msgid "The event type(s) which will trigger this rule"
|
||||||
msgstr "Het (de) evenementtype (s) dat deze regel activeert"
|
msgstr "Het (de) gebeurtenistype (s) dat deze regel activeert"
|
||||||
|
|
||||||
#: netbox/extras/forms/bulk_import.py:196
|
#: netbox/extras/forms/bulk_import.py:196
|
||||||
msgid "Action object"
|
msgid "Action object"
|
||||||
@ -7927,7 +7923,7 @@ msgstr "HTTP-inhoudstype"
|
|||||||
|
|
||||||
#: netbox/extras/forms/filtersets.py:286
|
#: netbox/extras/forms/filtersets.py:286
|
||||||
msgid "Event type"
|
msgid "Event type"
|
||||||
msgstr "Soort evenement"
|
msgstr "Soort gebeurtenis"
|
||||||
|
|
||||||
#: netbox/extras/forms/filtersets.py:291
|
#: netbox/extras/forms/filtersets.py:291
|
||||||
msgid "Action type"
|
msgid "Action type"
|
||||||
@ -8680,7 +8676,7 @@ msgstr "regel van het evenement"
|
|||||||
|
|
||||||
#: netbox/extras/models/models.py:117
|
#: netbox/extras/models/models.py:117
|
||||||
msgid "event rules"
|
msgid "event rules"
|
||||||
msgstr "regels voor evenementen"
|
msgstr "regels voor gebeurtenissen"
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:166
|
#: netbox/extras/models/models.py:166
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -8731,11 +8727,8 @@ msgid ""
|
|||||||
"<code>event</code>, <code>model</code>, <code>timestamp</code>, "
|
"<code>event</code>, <code>model</code>, <code>timestamp</code>, "
|
||||||
"<code>username</code>, <code>request_id</code>, and <code>data</code>."
|
"<code>username</code>, <code>request_id</code>, and <code>data</code>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Jinja2-sjabloon voor een aangepaste hoofdtekst van de aanvraag. Indien leeg,"
|
"Jinja2-sjabloon voor een aangepaste hoofdtekst van de aanvraag. Indien leeg, wordt een JSON-object toegevoegd dat de wijziging voorstelt. De beschikbare contextgegevens omvatten: <code>gebeurtenis\n"
|
||||||
" wordt een JSON-object toegevoegd dat de wijziging voorstelt. De beschikbare"
|
"</code>, <code>model-</code>, <code>tijdstempel</code>, <code>gebruikersnaam</code>, <code>aanvraag_id</code>, en <code>gegevens</code>."
|
||||||
" contextgegevens omvatten: <code>evenement</code>, <code>model-</code>, "
|
|
||||||
"<code>tijdstempel</code>, <code>gebruikersnaam</code>, "
|
|
||||||
"<code>aanvraag_id</code>, en <code>gegevens</code>."
|
|
||||||
|
|
||||||
#: netbox/extras/models/models.py:204
|
#: netbox/extras/models/models.py:204
|
||||||
msgid "secret"
|
msgid "secret"
|
||||||
@ -8949,7 +8942,7 @@ msgstr "lezen"
|
|||||||
|
|
||||||
#: netbox/extras/models/notifications.py:66
|
#: netbox/extras/models/notifications.py:66
|
||||||
msgid "event"
|
msgid "event"
|
||||||
msgstr "evenement"
|
msgstr "gebeurtenis"
|
||||||
|
|
||||||
#: netbox/extras/models/notifications.py:84
|
#: netbox/extras/models/notifications.py:84
|
||||||
msgid "notification"
|
msgid "notification"
|
||||||
@ -9180,7 +9173,7 @@ msgstr "SSL-validatie"
|
|||||||
#: netbox/extras/tables/tables.py:418
|
#: netbox/extras/tables/tables.py:418
|
||||||
#: netbox/templates/extras/eventrule.html:37
|
#: netbox/templates/extras/eventrule.html:37
|
||||||
msgid "Event Types"
|
msgid "Event Types"
|
||||||
msgstr "Soorten evenementen"
|
msgstr "Soorten gebeurtenissen"
|
||||||
|
|
||||||
#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77
|
#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77
|
||||||
#: netbox/templates/dcim/devicerole.html:8
|
#: netbox/templates/dcim/devicerole.html:8
|
||||||
@ -9919,7 +9912,7 @@ msgstr "ASN-assortiment"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Site/VLAN-toewijzing"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12772,7 +12765,7 @@ msgstr "Sjabloon voor weergave van fouten"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Er is geen configuratiesjabloon toegewezen voor dit apparaat."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -14044,7 +14037,7 @@ msgstr "Helpcentrum"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Django-beheerder"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14459,7 +14452,6 @@ msgstr "Virtuele schijf toevoegen"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Er is geen configuratiesjabloon toegewezen voor deze virtuele machine."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15574,8 +15566,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} behoort tot een andere site ({device_site}) dan het cluster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16317,7 +16307,6 @@ msgstr "draadloze verbindingen"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Moet een eenheid specificeren bij het instellen van een draadloze afstand"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -1237,7 +1237,7 @@ msgstr "Przydziały grup obwodowych"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "wypowiedzenie"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1298,14 +1298,12 @@ msgstr "zakończenia obwodu"
|
|||||||
#: netbox/circuits/models/circuits.py:308
|
#: netbox/circuits/models/circuits.py:308
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr "Zakończenie obwodu musi być podłączone do witryny lub sieci dostawcy."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zakończenie obwodu nie może połączyć się zarówno z witryną, jak i siecią "
|
|
||||||
"dostawcy."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9846,7 +9844,7 @@ msgstr "Zakres ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Przypisanie witryny/sieci VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12686,7 +12684,7 @@ msgstr "Szablon renderowania błędu"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Dla tego urządzenia nie przypisano szablonu konfiguracji."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13954,7 +13952,7 @@ msgstr "Centrum pomocy"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Administrator Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14368,7 +14366,7 @@ msgstr "Dodaj dysk wirtualny"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "Dla tej maszyny wirtualnej nie przypisano szablonu konfiguracji."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15480,7 +15478,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} należy do innej strony ({device_site}) niż klaster ({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16217,7 +16214,6 @@ msgstr "łącza bezprzewodowe"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Należy określić jednostkę podczas ustawiania odległości bezprzewodowej"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -6,8 +6,8 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Renato Almeida de Oliveira, 2023
|
# Renato Almeida de Oliveira, 2023
|
||||||
# Fer22f <Fer22f@gmail.com>, 2024
|
# Fer22f <Fer22f@gmail.com>, 2024
|
||||||
# Jeremy Stretch, 2025
|
# Jeremy Stretch, 2024
|
||||||
# Fabricio Maciel, 2025
|
# Fabricio Maciel, 2024
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -16,7 +16,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Fabricio Maciel, 2025\n"
|
"Last-Translator: Fabricio Maciel, 2024\n"
|
||||||
"Language-Team: Portuguese (https://app.transifex.com/netbox-community/teams/178115/pt/)\n"
|
"Language-Team: Portuguese (https://app.transifex.com/netbox-community/teams/178115/pt/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1237,7 +1237,7 @@ msgstr "Atribuições do grupo de circuitos"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "terminação"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1299,15 +1299,11 @@ msgstr "terminações dos circuitos"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Uma terminação de circuito deve ser conectada a um site ou a uma rede de "
|
|
||||||
"provedor."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Uma terminação de circuito não pode ser conectada a um site e a uma rede de "
|
|
||||||
"provedor ao mesmo tempo."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9886,7 +9882,7 @@ msgstr "Intervalo de ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Atribuição de site/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12719,7 +12715,7 @@ msgstr "Erro ao renderizar o modelo"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Nenhum modelo de configuração foi atribuído para este dispositivo."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13988,7 +13984,7 @@ msgstr "Centro de ajuda"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Administrador do Django"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14402,7 +14398,6 @@ msgstr "Adicionar Disco Virtual"
|
|||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nenhum modelo de configuração foi atribuído para esta máquina virtual."
|
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15512,8 +15507,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} pertence a um site diferente ({device_site}) do que o cluster "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16248,7 +16241,7 @@ msgstr "links wireless"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "É necessário especificar uma unidade ao definir uma distância sem fio"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -11,9 +11,9 @@
|
|||||||
# stavr666, 2024
|
# stavr666, 2024
|
||||||
# Alexander Ryazanov (alryaz) <alryaz@xavux.com>, 2024
|
# Alexander Ryazanov (alryaz) <alryaz@xavux.com>, 2024
|
||||||
# Vladyslav V. Prodan, 2024
|
# Vladyslav V. Prodan, 2024
|
||||||
# Jeremy Stretch, 2024
|
|
||||||
# Artem Kotik, 2025
|
# Artem Kotik, 2025
|
||||||
# Michail Tatarinov, 2025
|
# Michail Tatarinov, 2025
|
||||||
|
# Jeremy Stretch, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -22,7 +22,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Michail Tatarinov, 2025\n"
|
"Last-Translator: Jeremy Stretch, 2025\n"
|
||||||
"Language-Team: Russian (https://app.transifex.com/netbox-community/teams/178115/ru/)\n"
|
"Language-Team: Russian (https://app.transifex.com/netbox-community/teams/178115/ru/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -64,7 +64,7 @@ msgstr "Истекает"
|
|||||||
|
|
||||||
#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141
|
#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141
|
||||||
msgid "Last Used"
|
msgid "Last Used"
|
||||||
msgstr "Последнее использование"
|
msgstr "Последний раз использованный"
|
||||||
|
|
||||||
#: netbox/account/tables.py:45 netbox/templates/account/token.html:55
|
#: netbox/account/tables.py:45 netbox/templates/account/token.html:55
|
||||||
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122
|
||||||
@ -75,7 +75,7 @@ msgstr "Разрешенные IP-адреса"
|
|||||||
#: netbox/account/views.py:114
|
#: netbox/account/views.py:114
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Logged in as {user}."
|
msgid "Logged in as {user}."
|
||||||
msgstr "Вошел(-ла) в систему как {user}."
|
msgstr "Вошел в систему как {user}."
|
||||||
|
|
||||||
#: netbox/account/views.py:164
|
#: netbox/account/views.py:164
|
||||||
msgid "You have logged out."
|
msgid "You have logged out."
|
||||||
@ -83,11 +83,13 @@ msgstr "Вы вышли из системы."
|
|||||||
|
|
||||||
#: netbox/account/views.py:216
|
#: netbox/account/views.py:216
|
||||||
msgid "Your preferences have been updated."
|
msgid "Your preferences have been updated."
|
||||||
msgstr "Ваши настройки были обновлены."
|
msgstr "Ваши предпочтения обновлены."
|
||||||
|
|
||||||
#: netbox/account/views.py:239
|
#: netbox/account/views.py:239
|
||||||
msgid "LDAP-authenticated user credentials cannot be changed within NetBox."
|
msgid "LDAP-authenticated user credentials cannot be changed within NetBox."
|
||||||
msgstr "Учетные данные доменных пользователей нельзя изменить в NetBox."
|
msgstr ""
|
||||||
|
"Учетные данные пользователя, аутентифицированные по протоколу LDAP, нельзя "
|
||||||
|
"изменить в NetBox."
|
||||||
|
|
||||||
#: netbox/account/views.py:254
|
#: netbox/account/views.py:254
|
||||||
msgid "Your password has been changed successfully."
|
msgid "Your password has been changed successfully."
|
||||||
@ -104,7 +106,7 @@ msgstr "Запланировано"
|
|||||||
|
|
||||||
#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305
|
#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305
|
||||||
msgid "Provisioning"
|
msgid "Provisioning"
|
||||||
msgstr "Эксплутация"
|
msgstr "Выделение ресурсов"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22
|
#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22
|
||||||
#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103
|
#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103
|
||||||
@ -124,11 +126,11 @@ msgstr "Активный"
|
|||||||
#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24
|
#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24
|
||||||
#: netbox/virtualization/choices.py:43
|
#: netbox/virtualization/choices.py:43
|
||||||
msgid "Offline"
|
msgid "Offline"
|
||||||
msgstr "Оффлайн"
|
msgstr "Не в сети"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:25
|
#: netbox/circuits/choices.py:25
|
||||||
msgid "Deprovisioning"
|
msgid "Deprovisioning"
|
||||||
msgstr "Вывод из эксплуатации"
|
msgstr "Выделение резервов"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:26
|
#: netbox/circuits/choices.py:26
|
||||||
msgid "Decommissioned"
|
msgid "Decommissioned"
|
||||||
@ -137,7 +139,7 @@ msgstr "Списан"
|
|||||||
#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619
|
#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619
|
||||||
#: netbox/tenancy/choices.py:17
|
#: netbox/tenancy/choices.py:17
|
||||||
msgid "Primary"
|
msgid "Primary"
|
||||||
msgstr "Основной"
|
msgstr "Начальное"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90
|
#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90
|
||||||
#: netbox/tenancy/choices.py:18
|
#: netbox/tenancy/choices.py:18
|
||||||
@ -146,7 +148,7 @@ msgstr "Вторичный"
|
|||||||
|
|
||||||
#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19
|
#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19
|
||||||
msgid "Tertiary"
|
msgid "Tertiary"
|
||||||
msgstr "Третичный"
|
msgstr "Высшее образование"
|
||||||
|
|
||||||
#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20
|
#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20
|
||||||
msgid "Inactive"
|
msgid "Inactive"
|
||||||
@ -174,7 +176,7 @@ msgstr "Регион (ID)"
|
|||||||
#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52
|
#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52
|
||||||
#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353
|
#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353
|
||||||
msgid "Region (slug)"
|
msgid "Region (slug)"
|
||||||
msgstr "Регион (подстрока)"
|
msgstr "Регион (пуля)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211
|
#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211
|
||||||
#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225
|
#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225
|
||||||
@ -197,7 +199,7 @@ msgstr "Группа сайтов (ID)"
|
|||||||
#: netbox/virtualization/filtersets.py:65
|
#: netbox/virtualization/filtersets.py:65
|
||||||
#: netbox/virtualization/filtersets.py:193
|
#: netbox/virtualization/filtersets.py:193
|
||||||
msgid "Site group (slug)"
|
msgid "Site group (slug)"
|
||||||
msgstr "Группа сайтов (подстрока)"
|
msgstr "Группа сайтов (слизень)"
|
||||||
|
|
||||||
#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188
|
#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188
|
||||||
#: netbox/circuits/forms/bulk_edit.py:216
|
#: netbox/circuits/forms/bulk_edit.py:216
|
||||||
@ -1241,7 +1243,7 @@ msgstr "Назначения групп каналов связи"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "завершение"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1303,15 +1305,11 @@ msgstr "точки подключения канала связи"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Оконечное устройство канала должно быть подключено либо к узлу, либо к сети "
|
|
||||||
"провайдера."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Терминатор канала не может быть подключен как к сайту, так и к сети "
|
|
||||||
"поставщика."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9863,7 +9861,7 @@ msgstr "Диапазон ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Назначение сайта/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12704,7 +12702,7 @@ msgstr "Ошибка при отображении шаблона"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Для этого устройства не назначен шаблон конфигурации."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13973,7 +13971,7 @@ msgstr "Справочный центр"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Администратор Джанго"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14385,7 +14383,7 @@ msgstr "Добавить виртуальный диск"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "Для этой виртуальной машины не назначен шаблон конфигурации."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15497,8 +15495,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} принадлежит другому сайту ({device_site}), чем кластер "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16234,7 +16230,6 @@ msgstr "беспроводные соединения"
|
|||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"При настройке беспроводного расстояния необходимо указать единицу измерения"
|
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -1236,7 +1236,7 @@ msgstr "Devre grubu atamaları"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "sonlandırma"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1298,12 +1298,11 @@ msgstr "devre sonlandırmaları"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Bir devre sonlandırma, bir siteye veya bir sağlayıcı ağına bağlanmalıdır."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr "Devre sonlandırma hem siteye hem de sağlayıcı ağına bağlanamaz."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9794,7 +9793,7 @@ msgstr "ASN Aralığı"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Site/VLAN Ataması"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12617,7 +12616,7 @@ msgstr "Hata oluşturma şablonu"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Bu aygıt için herhangi bir yapılandırma şablonu atanmadı."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13883,7 +13882,7 @@ msgstr "Yardım Merkezi"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Django Yöneticisi"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14296,7 +14295,7 @@ msgstr "Sanal Disk Ekle"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "Bu sanal makine için herhangi bir yapılandırma şablonu atanmadı."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15393,7 +15392,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} farklı bir siteye aittir ({device_site}) kümeden ({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16125,7 +16123,7 @@ msgstr "kablosuz bağlantılar"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "Kablosuz mesafeyi ayarlarken bir birim belirtmelisiniz"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -5,8 +5,8 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Volodymyr Pidgornyi, 2024
|
# Volodymyr Pidgornyi, 2024
|
||||||
|
# Jeremy Stretch, 2024
|
||||||
# Vladyslav V. Prodan, 2024
|
# Vladyslav V. Prodan, 2024
|
||||||
# Jeremy Stretch, 2025
|
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -15,7 +15,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Jeremy Stretch, 2025\n"
|
"Last-Translator: Vladyslav V. Prodan, 2024\n"
|
||||||
"Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n"
|
"Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1235,7 +1235,7 @@ msgstr "Призначення групи каналів зв'язку"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "припинення"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1298,14 +1298,11 @@ msgstr "кінці каналу зв'язку"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Припинення схеми повинно приєднатися або до сайту, або до мережі провайдера."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Припинення схеми не може приєднатися як до сайту, так і до мережі "
|
|
||||||
"провайдера."
|
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -9862,7 +9859,7 @@ msgstr "Діапазон ASN"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "Призначення сайту/VLAN"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12692,7 +12689,7 @@ msgstr "Помилка візуалізації шаблону"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "Для цього пристрою не призначено жодного шаблону конфігурації."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -13958,7 +13955,7 @@ msgstr "Довідковий центр"
|
|||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:41
|
#: netbox/templates/inc/user_menu.html:41
|
||||||
msgid "Django Admin"
|
msgid "Django Admin"
|
||||||
msgstr "Джанго Адміністратор"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/inc/user_menu.html:61
|
#: netbox/templates/inc/user_menu.html:61
|
||||||
msgid "Log Out"
|
msgid "Log Out"
|
||||||
@ -14371,7 +14368,7 @@ msgstr "Додати віртуальний диск"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "Жоден шаблон конфігурації не призначено для цієї віртуальної машини."
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15478,8 +15475,6 @@ msgid ""
|
|||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"{device} належить до іншого сайту ({device_site}) ніж кластер "
|
|
||||||
"({cluster_site})"
|
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
@ -16218,7 +16213,7 @@ msgstr "бездротові канали зв'язку"
|
|||||||
|
|
||||||
#: netbox/wireless/models.py:236
|
#: netbox/wireless/models.py:236
|
||||||
msgid "Must specify a unit when setting a wireless distance"
|
msgid "Must specify a unit when setting a wireless distance"
|
||||||
msgstr "Необхідно вказати одиницю при установці бездротової відстані"
|
msgstr ""
|
||||||
|
|
||||||
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
#: netbox/wireless/models.py:242 netbox/wireless/models.py:248
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
|
Binary file not shown.
@ -15,6 +15,7 @@
|
|||||||
# 闻寄云, 2024
|
# 闻寄云, 2024
|
||||||
# luo jiyin, 2024
|
# luo jiyin, 2024
|
||||||
# Jeremy Stretch, 2025
|
# Jeremy Stretch, 2025
|
||||||
|
# yawei jia, 2025
|
||||||
#
|
#
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -23,7 +24,7 @@ msgstr ""
|
|||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
"POT-Creation-Date: 2025-01-04 05:02+0000\n"
|
||||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||||
"Last-Translator: Jeremy Stretch, 2025\n"
|
"Last-Translator: yawei jia, 2025\n"
|
||||||
"Language-Team: Chinese (https://app.transifex.com/netbox-community/teams/178115/zh/)\n"
|
"Language-Team: Chinese (https://app.transifex.com/netbox-community/teams/178115/zh/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -1242,7 +1243,7 @@ msgstr "电路组分配"
|
|||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:240
|
#: netbox/circuits/models/circuits.py:240
|
||||||
msgid "termination"
|
msgid "termination"
|
||||||
msgstr "终止"
|
msgstr "终端"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:257
|
#: netbox/circuits/models/circuits.py:257
|
||||||
msgid "port speed (Kbps)"
|
msgid "port speed (Kbps)"
|
||||||
@ -1303,12 +1304,12 @@ msgstr "线路接入"
|
|||||||
#: netbox/circuits/models/circuits.py:308
|
#: netbox/circuits/models/circuits.py:308
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination must attach to either a site or a provider network."
|
"A circuit termination must attach to either a site or a provider network."
|
||||||
msgstr "电路终端必须连接到站点或提供商网络。"
|
msgstr "电路终端必须连接到站点或服务提供商网络。"
|
||||||
|
|
||||||
#: netbox/circuits/models/circuits.py:310
|
#: netbox/circuits/models/circuits.py:310
|
||||||
msgid ""
|
msgid ""
|
||||||
"A circuit termination cannot attach to both a site and a provider network."
|
"A circuit termination cannot attach to both a site and a provider network."
|
||||||
msgstr "电路终端不能同时连接到站点和提供商网络。"
|
msgstr "电路终端不能同时连接到站点和服务提供商网络。"
|
||||||
|
|
||||||
#: netbox/circuits/models/providers.py:22
|
#: netbox/circuits/models/providers.py:22
|
||||||
#: netbox/circuits/models/providers.py:66
|
#: netbox/circuits/models/providers.py:66
|
||||||
@ -1741,11 +1742,11 @@ msgstr "对象已删除"
|
|||||||
|
|
||||||
#: netbox/core/events.py:30
|
#: netbox/core/events.py:30
|
||||||
msgid "Job started"
|
msgid "Job started"
|
||||||
msgstr "工作已开始"
|
msgstr "作业已开始"
|
||||||
|
|
||||||
#: netbox/core/events.py:31
|
#: netbox/core/events.py:31
|
||||||
msgid "Job completed"
|
msgid "Job completed"
|
||||||
msgstr "任务已完成"
|
msgstr "作业已完成"
|
||||||
|
|
||||||
#: netbox/core/events.py:32
|
#: netbox/core/events.py:32
|
||||||
msgid "Job failed"
|
msgid "Job failed"
|
||||||
@ -9638,7 +9639,7 @@ msgstr "ASN范围"
|
|||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:231
|
#: netbox/ipam/forms/model_forms.py:231
|
||||||
msgid "Site/VLAN Assignment"
|
msgid "Site/VLAN Assignment"
|
||||||
msgstr "站点/VLAN 分配"
|
msgstr "站点/VLAN 关联"
|
||||||
|
|
||||||
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10
|
||||||
msgid "IP Range"
|
msgid "IP Range"
|
||||||
@ -12414,7 +12415,7 @@ msgstr "渲染模板时出错"
|
|||||||
|
|
||||||
#: netbox/templates/dcim/device/render_config.html:70
|
#: netbox/templates/dcim/device/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this device."
|
msgid "No configuration template has been assigned for this device."
|
||||||
msgstr "尚未为此设备分配任何配置模板。"
|
msgstr "尚未为该设备分配配置模板。"
|
||||||
|
|
||||||
#: netbox/templates/dcim/device_edit.html:44
|
#: netbox/templates/dcim/device_edit.html:44
|
||||||
msgid "Parent Bay"
|
msgid "Parent Bay"
|
||||||
@ -14051,7 +14052,7 @@ msgstr "增加虚拟硬盘"
|
|||||||
|
|
||||||
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
#: netbox/templates/virtualization/virtualmachine/render_config.html:70
|
||||||
msgid "No configuration template has been assigned for this virtual machine."
|
msgid "No configuration template has been assigned for this virtual machine."
|
||||||
msgstr "尚未为此虚拟机分配任何配置模板。"
|
msgstr "尚未为该虚拟机分配配置模板。"
|
||||||
|
|
||||||
#: netbox/templates/vpn/ikepolicy.html:10
|
#: netbox/templates/vpn/ikepolicy.html:10
|
||||||
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166
|
||||||
@ -15100,7 +15101,7 @@ msgstr "序列号"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"{device} belongs to a different site ({device_site}) than the cluster "
|
"{device} belongs to a different site ({device_site}) than the cluster "
|
||||||
"({cluster_site})"
|
"({cluster_site})"
|
||||||
msgstr "{device} 属于另一个站点 ({device_site}) 而不是集群 ({cluster_site})"
|
msgstr "{device} 属于与集群 ({cluster_site}) 不同的站点 ({device_site})"
|
||||||
|
|
||||||
#: netbox/virtualization/forms/model_forms.py:192
|
#: netbox/virtualization/forms/model_forms.py:192
|
||||||
msgid "Optionally pin this VM to a specific host device within the cluster"
|
msgid "Optionally pin this VM to a specific host device within the cluster"
|
||||||
|
@ -29,7 +29,7 @@ def serialize_object(obj, resolve_tags=True, extra=None, exclude=None):
|
|||||||
exclude = exclude or []
|
exclude = exclude or []
|
||||||
|
|
||||||
# Include custom_field_data as "custom_fields"
|
# Include custom_field_data as "custom_fields"
|
||||||
if hasattr(obj, 'custom_field_data'):
|
if 'custom_field_data' in data:
|
||||||
data['custom_fields'] = data.pop('custom_field_data')
|
data['custom_fields'] = data.pop('custom_field_data')
|
||||||
|
|
||||||
# Resolve any assigned tags to their names. Check for tags cached on the instance;
|
# Resolve any assigned tags to their names. Check for tags cached on the instance;
|
||||||
|
@ -196,7 +196,10 @@ class GetRelatedModelsMixin:
|
|||||||
]
|
]
|
||||||
related_models.extend(extra)
|
related_models.extend(extra)
|
||||||
|
|
||||||
return sorted(related_models, key=lambda x: x[0].model._meta.verbose_name.lower())
|
return sorted(
|
||||||
|
filter(lambda qs: qs[0].exists(), related_models),
|
||||||
|
key=lambda qs: qs[0].model._meta.verbose_name.lower(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ViewTab:
|
class ViewTab:
|
||||||
|
@ -38,6 +38,7 @@ class VirtualMachineStatusChoices(ChoiceSet):
|
|||||||
STATUS_STAGED = 'staged'
|
STATUS_STAGED = 'staged'
|
||||||
STATUS_FAILED = 'failed'
|
STATUS_FAILED = 'failed'
|
||||||
STATUS_DECOMMISSIONING = 'decommissioning'
|
STATUS_DECOMMISSIONING = 'decommissioning'
|
||||||
|
STATUS_PAUSED = 'paused'
|
||||||
|
|
||||||
CHOICES = [
|
CHOICES = [
|
||||||
(STATUS_OFFLINE, _('Offline'), 'gray'),
|
(STATUS_OFFLINE, _('Offline'), 'gray'),
|
||||||
@ -46,4 +47,5 @@ class VirtualMachineStatusChoices(ChoiceSet):
|
|||||||
(STATUS_STAGED, _('Staged'), 'blue'),
|
(STATUS_STAGED, _('Staged'), 'blue'),
|
||||||
(STATUS_FAILED, _('Failed'), 'red'),
|
(STATUS_FAILED, _('Failed'), 'red'),
|
||||||
(STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'),
|
(STATUS_DECOMMISSIONING, _('Decommissioning'), 'yellow'),
|
||||||
|
(STATUS_PAUSED, _('Paused'), 'orange'),
|
||||||
]
|
]
|
||||||
|
@ -6,7 +6,7 @@ from dcim.constants import INTERFACE_MTU_MAX, INTERFACE_MTU_MIN
|
|||||||
from dcim.forms.mixins import ScopedBulkEditForm
|
from dcim.forms.mixins import ScopedBulkEditForm
|
||||||
from dcim.models import Device, DeviceRole, Platform, Site
|
from dcim.models import Device, DeviceRole, Platform, Site
|
||||||
from extras.models import ConfigTemplate
|
from extras.models import ConfigTemplate
|
||||||
from ipam.models import VLAN, VLANGroup, VRF
|
from ipam.models import VLAN, VLANGroup, VLANTranslationPolicy, VRF
|
||||||
from netbox.forms import NetBoxModelBulkEditForm
|
from netbox.forms import NetBoxModelBulkEditForm
|
||||||
from tenancy.models import Tenant
|
from tenancy.models import Tenant
|
||||||
from utilities.forms import BulkRenameForm, add_blank_choice
|
from utilities.forms import BulkRenameForm, add_blank_choice
|
||||||
@ -242,15 +242,23 @@ class VMInterfaceBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('VRF')
|
label=_('VRF')
|
||||||
)
|
)
|
||||||
|
vlan_translation_policy = DynamicModelChoiceField(
|
||||||
|
queryset=VLANTranslationPolicy.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('VLAN Translation Policy')
|
||||||
|
)
|
||||||
|
|
||||||
model = VMInterface
|
model = VMInterface
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('mtu', 'enabled', 'vrf', 'description'),
|
FieldSet('mtu', 'enabled', 'vrf', 'description'),
|
||||||
FieldSet('parent', 'bridge', name=_('Related Interfaces')),
|
FieldSet('parent', 'bridge', name=_('Related Interfaces')),
|
||||||
FieldSet('mode', 'vlan_group', 'untagged_vlan', 'tagged_vlans', name=_('802.1Q Switching')),
|
FieldSet(
|
||||||
|
'mode', 'vlan_group', 'untagged_vlan', 'tagged_vlans', 'vlan_translation_policy',
|
||||||
|
name=_('802.1Q Switching')
|
||||||
|
),
|
||||||
)
|
)
|
||||||
nullable_fields = (
|
nullable_fields = (
|
||||||
'parent', 'bridge', 'mtu', 'vrf', 'description',
|
'parent', 'bridge', 'mtu', 'vrf', 'description', 'vlan_translation_policy',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
@ -122,7 +122,7 @@ class VMInterfaceTable(BaseInterfaceTable):
|
|||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'virtual_machine', 'enabled', 'mtu', 'mode', 'description', 'tags', 'vrf',
|
'pk', 'id', 'name', 'virtual_machine', 'enabled', 'mtu', 'mode', 'description', 'tags', 'vrf',
|
||||||
'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans',
|
'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans',
|
||||||
'qinq_svlan', 'created', 'last_updated',
|
'qinq_svlan', 'created', 'last_updated', 'vlan_translation_policy',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'virtual_machine', 'enabled', 'description')
|
default_columns = ('pk', 'name', 'virtual_machine', 'enabled', 'description')
|
||||||
|
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Prefetch, Sum
|
from django.db.models import Prefetch, Sum
|
||||||
from django.http import HttpResponse
|
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from jinja2.exceptions import TemplateError
|
|
||||||
|
|
||||||
from dcim.filtersets import DeviceFilterSet
|
from dcim.filtersets import DeviceFilterSet
|
||||||
from dcim.forms import DeviceFilterForm
|
from dcim.forms import DeviceFilterForm
|
||||||
from dcim.models import Device
|
from dcim.models import Device
|
||||||
from dcim.tables import DeviceTable
|
from dcim.tables import DeviceTable
|
||||||
from extras.views import ObjectConfigContextView
|
from extras.views import ObjectConfigContextView, ObjectRenderConfigView
|
||||||
from ipam.models import IPAddress
|
from ipam.models import IPAddress
|
||||||
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable
|
||||||
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
from netbox.constants import DEFAULT_ACTION_PERMISSIONS
|
||||||
@ -427,54 +425,14 @@ class VirtualMachineConfigContextView(ObjectConfigContextView):
|
|||||||
|
|
||||||
|
|
||||||
@register_model_view(VirtualMachine, 'render-config')
|
@register_model_view(VirtualMachine, 'render-config')
|
||||||
class VirtualMachineRenderConfigView(generic.ObjectView):
|
class VirtualMachineRenderConfigView(ObjectRenderConfigView):
|
||||||
queryset = VirtualMachine.objects.all()
|
queryset = VirtualMachine.objects.all()
|
||||||
template_name = 'virtualization/virtualmachine/render_config.html'
|
base_template = 'virtualization/virtualmachine/base.html'
|
||||||
tab = ViewTab(
|
tab = ViewTab(
|
||||||
label=_('Render Config'),
|
label=_('Render Config'),
|
||||||
weight=2100
|
weight=2100,
|
||||||
)
|
)
|
||||||
|
|
||||||
def get(self, request, **kwargs):
|
|
||||||
instance = self.get_object(**kwargs)
|
|
||||||
context = self.get_extra_context(request, instance)
|
|
||||||
|
|
||||||
# If a direct export has been requested, return the rendered template content as a
|
|
||||||
# downloadable file.
|
|
||||||
if request.GET.get('export'):
|
|
||||||
content = context['rendered_config'] or context['error_message']
|
|
||||||
response = HttpResponse(content, content_type='text')
|
|
||||||
filename = f"{instance.name or 'config'}.txt"
|
|
||||||
response['Content-Disposition'] = f'attachment; filename="{filename}"'
|
|
||||||
return response
|
|
||||||
|
|
||||||
return render(request, self.get_template_name(), {
|
|
||||||
'object': instance,
|
|
||||||
'tab': self.tab,
|
|
||||||
**context,
|
|
||||||
})
|
|
||||||
|
|
||||||
def get_extra_context(self, request, instance):
|
|
||||||
# Compile context data
|
|
||||||
context_data = instance.get_config_context()
|
|
||||||
context_data.update({'virtualmachine': instance})
|
|
||||||
|
|
||||||
# Render the config template
|
|
||||||
rendered_config = None
|
|
||||||
error_message = None
|
|
||||||
if config_template := instance.get_config_template():
|
|
||||||
try:
|
|
||||||
rendered_config = config_template.render(context=context_data)
|
|
||||||
except TemplateError as e:
|
|
||||||
error_message = _("An error occurred while rendering the template: {error}").format(error=e)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'config_template': config_template,
|
|
||||||
'context_data': context_data,
|
|
||||||
'rendered_config': rendered_config,
|
|
||||||
'error_message': error_message,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@register_model_view(VirtualMachine, 'add', detail=False)
|
@register_model_view(VirtualMachine, 'add', detail=False)
|
||||||
@register_model_view(VirtualMachine, 'edit')
|
@register_model_view(VirtualMachine, 'edit')
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user