From 7816d8e39e2d832b28140eeae9e42ec572b84400 Mon Sep 17 00:00:00 2001 From: Ken Hoes Date: Mon, 9 Jan 2017 13:39:11 -0500 Subject: [PATCH 01/55] Fixing audit bugs --- awx/ui/client/legacy-styles/forms.less | 2 -- awx/ui/client/src/access/add-rbac.block.less | 4 ++++ .../auth-form/sub-forms/auth-azure.form.js | 4 ++-- .../auth-form/sub-forms/auth-github-org.form.js | 4 ++-- .../auth-form/sub-forms/auth-github-team.form.js | 4 ++-- .../auth-form/sub-forms/auth-github.form.js | 4 ++-- .../sub-forms/auth-google-oauth2.form.js | 4 ++-- .../auth-form/sub-forms/auth-ldap.form.js | 4 ++-- .../auth-form/sub-forms/auth-radius.form.js | 4 ++-- .../auth-form/sub-forms/auth-saml.form.js | 4 ++-- .../src/configuration/configuration.block.less | 13 +++++++++++++ .../jobs-form/configuration-jobs.form.js | 4 ++-- .../sub-forms/system-activity-stream.form.js | 4 ++-- .../system-form/sub-forms/system-logging.form.js | 4 ++-- .../system-form/sub-forms/system-misc.form.js | 4 ++-- .../ui-form/configuration-ui.form.js | 4 ++-- awx/ui/client/src/lists/Projects.js | 16 ++++++++-------- awx/ui/client/src/shared/modal/modal.less | 1 - awx/ui/templates/ui/index.html | 2 +- 19 files changed, 52 insertions(+), 38 deletions(-) diff --git a/awx/ui/client/legacy-styles/forms.less b/awx/ui/client/legacy-styles/forms.less index 89ff33dd03..8d44ec661a 100644 --- a/awx/ui/client/legacy-styles/forms.less +++ b/awx/ui/client/legacy-styles/forms.less @@ -44,8 +44,6 @@ color: @list-header-txt; font-size: 14px; font-weight: bold; - padding-bottom: 25px; - min-height: 45px; word-break: break-all; max-width: 90%; word-wrap: break-word; diff --git a/awx/ui/client/src/access/add-rbac.block.less b/awx/ui/client/src/access/add-rbac.block.less index 88f5b1211f..0bc6617ba4 100644 --- a/awx/ui/client/src/access/add-rbac.block.less +++ b/awx/ui/client/src/access/add-rbac.block.less @@ -51,6 +51,10 @@ padding-top: 20px; } +.AddPermissions-list { + margin-bottom: 20px; +} + .AddPermissions-list .List-searchRow { height: 0px; } diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js index 17b36e67fb..c780814f87 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js @@ -38,8 +38,8 @@ buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js index bd547cf8b1..81eeec8329 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js @@ -28,8 +28,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js index d43d8c01be..72af97b899 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js @@ -28,8 +28,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js index 03af137a7c..e95fef41b0 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js @@ -24,8 +24,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js index ac1c23545e..1aa8cbab30 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js @@ -36,8 +36,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js index 8d38fea688..824692ea9d 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js @@ -84,8 +84,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js index b16fd649dc..cec19eb122 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js @@ -29,8 +29,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js index ca2bb50dcb..7ef0735247 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js @@ -56,8 +56,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/configuration.block.less b/awx/ui/client/src/configuration/configuration.block.less index 0b2a1ea0ee..b25d36e400 100644 --- a/awx/ui/client/src/configuration/configuration.block.less +++ b/awx/ui/client/src/configuration/configuration.block.less @@ -12,6 +12,19 @@ float: right } +.Form-resetAll { + border: none; + padding: 0; + background-color: @white; + margin-right: auto; + color: @default-link; + font-size: 12px; + + &:hover { + color: @default-link-hov; + } +} + .Form-tab { min-width: 77px; } diff --git a/awx/ui/client/src/configuration/jobs-form/configuration-jobs.form.js b/awx/ui/client/src/configuration/jobs-form/configuration-jobs.form.js index caf0392c24..99e52498c2 100644 --- a/awx/ui/client/src/configuration/jobs-form/configuration-jobs.form.js +++ b/awx/ui/client/src/configuration/jobs-form/configuration-jobs.form.js @@ -64,8 +64,8 @@ buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/system-form/sub-forms/system-activity-stream.form.js b/awx/ui/client/src/configuration/system-form/sub-forms/system-activity-stream.form.js index 09cf80eccd..3dc7fd89f7 100644 --- a/awx/ui/client/src/configuration/system-form/sub-forms/system-activity-stream.form.js +++ b/awx/ui/client/src/configuration/system-form/sub-forms/system-activity-stream.form.js @@ -22,8 +22,8 @@ buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js b/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js index ee99024b45..6fcfa0dda5 100644 --- a/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js +++ b/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js @@ -48,8 +48,8 @@ buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/system-form/sub-forms/system-misc.form.js b/awx/ui/client/src/configuration/system-form/sub-forms/system-misc.form.js index 690418f323..892dfd0bc0 100644 --- a/awx/ui/client/src/configuration/system-form/sub-forms/system-misc.form.js +++ b/awx/ui/client/src/configuration/system-form/sub-forms/system-misc.form.js @@ -26,8 +26,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/configuration/ui-form/configuration-ui.form.js b/awx/ui/client/src/configuration/ui-form/configuration-ui.form.js index 0ef2cb44ff..e566c076d1 100644 --- a/awx/ui/client/src/configuration/ui-form/configuration-ui.form.js +++ b/awx/ui/client/src/configuration/ui-form/configuration-ui.form.js @@ -32,8 +32,8 @@ export default ['i18n', function(i18n) { buttons: { reset: { ngClick: 'vm.resetAllConfirm()', - label: i18n._('Reset All'), - class: 'Form-button--left Form-cancelButton' + label: i18n._('Revert all to default'), + class: 'Form-resetAll' }, cancel: { ngClick: 'vm.formCancel()', diff --git a/awx/ui/client/src/lists/Projects.js b/awx/ui/client/src/lists/Projects.js index bf8fde2d03..e64310b458 100644 --- a/awx/ui/client/src/lists/Projects.js +++ b/awx/ui/client/src/lists/Projects.js @@ -61,6 +61,14 @@ export default }, actions: { + refresh: { + mode: 'all', + awToolTip: i18n._("Refresh the page"), + ngClick: "refresh()", + ngShow: "socketStatus === 'error'", + actionClass: 'btn List-buttonDefault', + buttonContent: i18n._('REFRESH') + }, add: { mode: 'all', // One of: edit, select, all ngClick: 'addProject()', @@ -68,14 +76,6 @@ export default actionClass: 'btn List-buttonSubmit', buttonContent: '+ ' + i18n._('ADD'), ngShow: "canAdd" - }, - refresh: { - mode: 'all', - awToolTip: i18n._("Refresh the page"), - ngClick: "refresh()", - ngShow: "socketStatus == 'error'", - actionClass: 'btn List-buttonDefault', - buttonContent: i18n._('REFRESH') } }, diff --git a/awx/ui/client/src/shared/modal/modal.less b/awx/ui/client/src/shared/modal/modal.less index da254e07f6..2b90315afa 100644 --- a/awx/ui/client/src/shared/modal/modal.less +++ b/awx/ui/client/src/shared/modal/modal.less @@ -13,7 +13,6 @@ .Modal-header { display: flex; width: 100%; - margin-bottom: 25px; } .Modal-title { diff --git a/awx/ui/templates/ui/index.html b/awx/ui/templates/ui/index.html index 9c8d91918f..3b29937bc0 100644 --- a/awx/ui/templates/ui/index.html +++ b/awx/ui/templates/ui/index.html @@ -81,7 +81,7 @@
From a3d8cbde253b3ba473f872322899677542675b56 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 08:51:33 -0500 Subject: [PATCH 02/55] add in defaults for cleanup facts management job --- awx/main/management/commands/cleanup_facts.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awx/main/management/commands/cleanup_facts.py b/awx/main/management/commands/cleanup_facts.py index a709f81c1a..f6b3c76b26 100644 --- a/awx/main/management/commands/cleanup_facts.py +++ b/awx/main/management/commands/cleanup_facts.py @@ -96,12 +96,12 @@ class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('--older_than', dest='older_than', - default=None, - help='Specify the relative time to consider facts older than (w)eek (d)ay or (y)ear (i.e. 5d, 2w, 1y).'), + default='30d', + help='Specify the relative time to consider facts older than (w)eek (d)ay or (y)ear (i.e. 5d, 2w, 1y). Defaults to 30d.'), make_option('--granularity', dest='granularity', - default=None, - help='Window duration to group same hosts by for deletion (w)eek (d)ay or (y)ear (i.e. 5d, 2w, 1y).'), + default='1w', + help='Window duration to group same hosts by for deletion (w)eek (d)ay or (y)ear (i.e. 5d, 2w, 1y). Defaults to 1w.'), make_option('--module', dest='module', default=None, From 4990a59fa747d307d66a23721f4346baa430adc2 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 09:38:52 -0500 Subject: [PATCH 03/55] mark inventory scripts as added in 2.1.0 --- awx/api/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/awx/api/views.py b/awx/api/views.py index 48892e7f00..7d0586b296 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -1553,12 +1553,14 @@ class InventoryScriptList(ListCreateAPIView): model = CustomInventoryScript serializer_class = CustomInventoryScriptSerializer + new_in_210 = True class InventoryScriptDetail(RetrieveUpdateDestroyAPIView): model = CustomInventoryScript serializer_class = CustomInventoryScriptSerializer + new_in_210 = True def destroy(self, request, *args, **kwargs): instance = self.get_object() From 8caf355857e2339db6f75c9bf44be26448478c44 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 09:47:54 -0500 Subject: [PATCH 04/55] handle reload when deleting org card under edit --- .../list/organizations-list.controller.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/awx/ui/client/src/organizations/list/organizations-list.controller.js b/awx/ui/client/src/organizations/list/organizations-list.controller.js index 9bae54afc8..769a844354 100644 --- a/awx/ui/client/src/organizations/list/organizations-list.controller.js +++ b/awx/ui/client/src/organizations/list/organizations-list.controller.js @@ -127,6 +127,16 @@ export default ['$stateParams', '$scope', '$rootScope', '$location', }); }; + function isDeletedOrganizationBeingEdited(deleted_organization_id, editing_organization_id) { + if (editing_organization_id === undefined) { + return false; + } + if (deleted_organization_id == editing_organization_id) { + return true; + } + return false; + } + $scope.deleteOrganization = function(id, name) { var action = function() { @@ -137,7 +147,11 @@ export default ['$stateParams', '$scope', '$rootScope', '$location', Rest.destroy() .success(function() { Wait('stop'); - $state.reload('organizations'); + if (isDeletedOrganizationBeingEdited(id, $stateParams.organization_id) === true) { + $state.go('^', null, { reload: true }); + } else { + $state.reload('organizations'); + } }) .error(function(data, status) { ProcessErrors($scope, data, status, null, { From 78d8d4139a50baa8d89915e2cb17a9e4ea785631 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 10:09:29 -0500 Subject: [PATCH 05/55] workflow docs revisions after label copy change --- docs/workflow.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/workflow.md b/docs/workflow.md index fcabb9891f..43cc6104f9 100644 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -47,11 +47,11 @@ Workflow job summary: ``` ### Workflow Copy and Relaunch -Other than the normal way of creating workflow job templates, it is also possible to copy existing workflow job templates. The resulting new workflow job template will be identical to which it copies from, except for `name` field which will be appended a text to indicate it's a copy. +Other than the normal way of creating workflow job templates, it is also possible to copy existing workflow job templates. The resulting new workflow job template will be mostly identical to which it copies from, except for `name` field which will be appended a text to indicate it's a copy. -Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, labels, 'launch_type' and survey-related fields (survey_passwords, survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions on determining which workflow job template node is copied. In specific, a workflow job template is allowed to be copied if the user has at least read permission on all related resources like credential and job template. On the other hand, schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. +Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, and survey-related fields (survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions on determining which workflow job template node is copied. In specific, a workflow job template is allowed to be copied if the user has at least read permission on all related resources like credential and job template. On the other hand, schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. -Worflow jobs cannot be copied directly, instead a workflow job is implicitly copied when it needs to relaunch. Relaunching an existing workflow job is done by POSTing to endpoint `/workflow_jobs/\d+/relaunch/`. What happens next is the original workflow job is copied to create a new workflow job. The new workflow job then gets a copy of all nodes of the original as well as the topology they bear. Finally the full-fledged new workflow job is triggered to run, thus fulfilling the purpose of relaunch. +Workflow jobs cannot be copied directly, instead a workflow job is implicitly copied when it needs to relaunch. Relaunching an existing workflow job is done by POSTing to endpoint `/workflow_jobs/\d+/relaunch/`. What happens next is the original workflow job is copied to create a new workflow job. The new workflow job then gets a copy of all nodes of the original as well as the topology they bear. Finally the full-fledged new workflow job is triggered to run, thus fulfilling the purpose of relaunch. Survey password-type answers should also be redacted in the relaunched version of the workflow job. ## Test Coverage ### CRUD-related From 7f6551ec20f128a639494a27127d29ac4b03f616 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 10:12:09 -0500 Subject: [PATCH 06/55] consider org id in url an int --- .../src/organizations/list/organizations-list.controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/organizations/list/organizations-list.controller.js b/awx/ui/client/src/organizations/list/organizations-list.controller.js index 769a844354..3849c123a4 100644 --- a/awx/ui/client/src/organizations/list/organizations-list.controller.js +++ b/awx/ui/client/src/organizations/list/organizations-list.controller.js @@ -131,7 +131,7 @@ export default ['$stateParams', '$scope', '$rootScope', '$location', if (editing_organization_id === undefined) { return false; } - if (deleted_organization_id == editing_organization_id) { + if (deleted_organization_id === editing_organization_id) { return true; } return false; @@ -147,7 +147,7 @@ export default ['$stateParams', '$scope', '$rootScope', '$location', Rest.destroy() .success(function() { Wait('stop'); - if (isDeletedOrganizationBeingEdited(id, $stateParams.organization_id) === true) { + if (isDeletedOrganizationBeingEdited(id, parseInt($stateParams.organization_id)) === true) { $state.go('^', null, { reload: true }); } else { $state.reload('organizations'); From 52c861503bf0242aee61d14393adde34f7b5305c Mon Sep 17 00:00:00 2001 From: Ken Hoes Date: Tue, 10 Jan 2017 10:15:00 -0500 Subject: [PATCH 07/55] Updated fix for form titles --- awx/ui/client/legacy-styles/forms.less | 1 + awx/ui/client/src/shared/modal/modal.less | 1 + 2 files changed, 2 insertions(+) diff --git a/awx/ui/client/legacy-styles/forms.less b/awx/ui/client/legacy-styles/forms.less index 8d44ec661a..570a096c7e 100644 --- a/awx/ui/client/legacy-styles/forms.less +++ b/awx/ui/client/legacy-styles/forms.less @@ -47,6 +47,7 @@ word-break: break-all; max-width: 90%; word-wrap: break-word; + margin-bottom: 20px; } .Form-secondaryTitle{ diff --git a/awx/ui/client/src/shared/modal/modal.less b/awx/ui/client/src/shared/modal/modal.less index 2b90315afa..da254e07f6 100644 --- a/awx/ui/client/src/shared/modal/modal.less +++ b/awx/ui/client/src/shared/modal/modal.less @@ -13,6 +13,7 @@ .Modal-header { display: flex; width: 100%; + margin-bottom: 25px; } .Modal-title { From efe0f867050d94edad62ba655d26708ff2cdc6ce Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Tue, 10 Jan 2017 10:51:23 -0500 Subject: [PATCH 08/55] Set TIME_ZONE to None. This causes Tower to use the system timezone. --- awx/settings/defaults.py | 2 +- awx/settings/local_settings.py.docker_compose | 2 +- awx/settings/local_settings.py.example | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 8e67e9a025..8c296bbe76 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -73,7 +73,7 @@ DATABASES = { # timezone as the operating system. # If running in a Windows environment this must be set to the same as your # system time zone. -TIME_ZONE = 'America/New_York' +TIME_ZONE = None # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html diff --git a/awx/settings/local_settings.py.docker_compose b/awx/settings/local_settings.py.docker_compose index a439d17989..1202b1cbe1 100644 --- a/awx/settings/local_settings.py.docker_compose +++ b/awx/settings/local_settings.py.docker_compose @@ -114,7 +114,7 @@ SYSTEM_UUID = '00000000-0000-0000-0000-000000000000' # timezone as the operating system. # If running in a Windows environment this must be set to the same as your # system time zone. -TIME_ZONE = 'America/New_York' +TIME_ZONE = None # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html diff --git a/awx/settings/local_settings.py.example b/awx/settings/local_settings.py.example index e731acc8b1..2996a8a28e 100644 --- a/awx/settings/local_settings.py.example +++ b/awx/settings/local_settings.py.example @@ -71,7 +71,7 @@ SYSTEM_UUID = '00000000-0000-0000-0000-000000000000' # timezone as the operating system. # If running in a Windows environment this must be set to the same as your # system time zone. -TIME_ZONE = 'America/New_York' +TIME_ZONE = None # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html From 30fb6fcdd375ae929f8438dc1faf9da862c5ee4e Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 11:14:44 -0500 Subject: [PATCH 09/55] update clarification on what WFJT copy does --- docs/workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/workflow.md b/docs/workflow.md index 43cc6104f9..bb2f49e5c4 100644 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -49,7 +49,7 @@ Workflow job summary: ### Workflow Copy and Relaunch Other than the normal way of creating workflow job templates, it is also possible to copy existing workflow job templates. The resulting new workflow job template will be mostly identical to which it copies from, except for `name` field which will be appended a text to indicate it's a copy. -Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, and survey-related fields (survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions on determining which workflow job template node is copied. In specific, a workflow job template is allowed to be copied if the user has at least read permission on all related resources like credential and job template. On the other hand, schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. +Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, and survey-related fields (survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions copying workflow job template nodes. A workflow job template is allowed to be copied if the user has permission to add an equivalent workflow job template. If the user performing the copy does not have access to a node's related resources (job template, inventory, or credential), those related fields will be null in the copy's version of the node. Schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. Workflow jobs cannot be copied directly, instead a workflow job is implicitly copied when it needs to relaunch. Relaunching an existing workflow job is done by POSTing to endpoint `/workflow_jobs/\d+/relaunch/`. What happens next is the original workflow job is copied to create a new workflow job. The new workflow job then gets a copy of all nodes of the original as well as the topology they bear. Finally the full-fledged new workflow job is triggered to run, thus fulfilling the purpose of relaunch. Survey password-type answers should also be redacted in the relaunched version of the workflow job. From e52e6ae19239f401c5ed6794ec5c5477b6050b1a Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 11:25:54 -0500 Subject: [PATCH 10/55] handle case where the UJT related resource is null --- docs/workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/workflow.md b/docs/workflow.md index bb2f49e5c4..e0d195d18c 100644 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -32,7 +32,7 @@ As stated, workflow job templates can be created with populated `extra_vars`. Th Job resources spawned by workflow jobs are needed by workflow to run correctly. Therefore deletion of spawned job resources is blocked while the underlying workflow job is executing. -Other than success and failure, a workflow spawned job resource can also end with status 'error' and 'canceled'. When a workflow spawned job resource errors, all branches starting from that job will stop executing while the rest keep their own paces. Canceling a workflow spawned job resource follows the same rules. +Other than success and failure, a workflow spawned job resource can also end with status 'error' and 'canceled'. When a workflow spawned job resource errors, all branches starting from that job will stop executing while the rest keep their own paces. Canceling a workflow spawned job resource follows the same rules. If the unified job template of the node is null (which could be a result of deleting the unified job template or copying a its workflow when the user lacks necessary permissions to use it), then the branch should stop executing in this case as well. A workflow job itself can also be canceled. In this case all its spawned job resources will be canceled if cancelable and following paths stop executing. From 0a975736d96301a7dc0c3cf128361878dc6bcd8c Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 11:50:58 -0500 Subject: [PATCH 11/55] further workflow doc copy edit with QE --- docs/workflow.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/workflow.md b/docs/workflow.md index e0d195d18c..d7336bce08 100644 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -32,7 +32,7 @@ As stated, workflow job templates can be created with populated `extra_vars`. Th Job resources spawned by workflow jobs are needed by workflow to run correctly. Therefore deletion of spawned job resources is blocked while the underlying workflow job is executing. -Other than success and failure, a workflow spawned job resource can also end with status 'error' and 'canceled'. When a workflow spawned job resource errors, all branches starting from that job will stop executing while the rest keep their own paces. Canceling a workflow spawned job resource follows the same rules. If the unified job template of the node is null (which could be a result of deleting the unified job template or copying a its workflow when the user lacks necessary permissions to use it), then the branch should stop executing in this case as well. +Other than success and failure, a workflow spawned job resource can also end with status 'error' and 'canceled'. When a workflow spawned job resource errors, all branches starting from that job will stop executing while the rest continue executing. Canceling a workflow spawned job resource follows the same rules. If the unified job template of the node is null (which could be a result of deleting the unified job template or copying a workflow when the user lacks necessary permissions to use the resource), then the branch should stop executing in this case as well. A workflow job itself can also be canceled. In this case all its spawned job resources will be canceled if cancelable and following paths stop executing. @@ -47,9 +47,9 @@ Workflow job summary: ``` ### Workflow Copy and Relaunch -Other than the normal way of creating workflow job templates, it is also possible to copy existing workflow job templates. The resulting new workflow job template will be mostly identical to which it copies from, except for `name` field which will be appended a text to indicate it's a copy. +Other than the normal way of creating workflow job templates, it is also possible to copy existing workflow job templates. The resulting new workflow job template will be mostly identical to the original, except for `name` field which will be appended a text to indicate it's a copy. -Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, and survey-related fields (survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions copying workflow job template nodes. A workflow job template is allowed to be copied if the user has permission to add an equivalent workflow job template. If the user performing the copy does not have access to a node's related resources (job template, inventory, or credential), those related fields will be null in the copy's version of the node. Schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. +Workflow job templates can be copied by POSTing to endpoint `/workflow_job_templates/\d+/copy/`. After copy finished, the resulting new workflow job template will have identical fields including description, extra_vars, and survey-related fields (survey_spec and survey_enabled). More importantly, workflow job template node of the original workflow job template, as well as the topology they bear, will be copied. Note there are RBAC restrictions on copying workflow job template nodes. A workflow job template is allowed to be copied if the user has permission to add an equivalent workflow job template. If the user performing the copy does not have access to a node's related resources (job template, inventory, or credential), those related fields will be null in the copy's version of the node. Schedules and notification templates of the original workflow job template will not be copied nor shared, and the name of the created workflow job template is the original name plus a special-formatted suffix to indicate its copy origin as well as the copy time, such as 'copy_from_name@10:30:00 am'. Workflow jobs cannot be copied directly, instead a workflow job is implicitly copied when it needs to relaunch. Relaunching an existing workflow job is done by POSTing to endpoint `/workflow_jobs/\d+/relaunch/`. What happens next is the original workflow job is copied to create a new workflow job. The new workflow job then gets a copy of all nodes of the original as well as the topology they bear. Finally the full-fledged new workflow job is triggered to run, thus fulfilling the purpose of relaunch. Survey password-type answers should also be redacted in the relaunched version of the workflow job. From bc4bc2e8cefeafd0d864b32808bfe21cd6b4622f Mon Sep 17 00:00:00 2001 From: Ken Hoes Date: Tue, 10 Jan 2017 12:15:38 -0500 Subject: [PATCH 12/55] Enable show/hide on password and secret fields --- .../src/configuration/auth-form/sub-forms/auth-azure.form.js | 3 ++- .../configuration/auth-form/sub-forms/auth-github-org.form.js | 3 ++- .../configuration/auth-form/sub-forms/auth-github-team.form.js | 3 ++- .../src/configuration/auth-form/sub-forms/auth-github.form.js | 3 ++- .../auth-form/sub-forms/auth-google-oauth2.form.js | 3 ++- .../src/configuration/auth-form/sub-forms/auth-ldap.form.js | 3 ++- .../src/configuration/auth-form/sub-forms/auth-radius.form.js | 3 ++- .../src/configuration/auth-form/sub-forms/auth-saml.form.js | 3 ++- .../configuration/system-form/sub-forms/system-logging.form.js | 3 ++- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js index 17b36e67fb..83ee570a13 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-azure.form.js @@ -16,7 +16,8 @@ reset: 'SOCIAL_AUTH_AZUREAD_OAUTH2_KEY' }, SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET' }, SOCIAL_AUTH_AZUREAD_OAUTH2_ORGANIZATION_MAP: { diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js index bd547cf8b1..88b3d273f6 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-org.form.js @@ -16,7 +16,8 @@ export default ['i18n', function(i18n) { reset: 'SOCIAL_AUTH_GITHUB_ORG_KEY' }, SOCIAL_AUTH_GITHUB_ORG_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_GITHUB_ORG_SECRET' }, SOCIAL_AUTH_GITHUB_ORG_NAME: { diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js index d43d8c01be..42cdd3fcaf 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github-team.form.js @@ -16,7 +16,8 @@ export default ['i18n', function(i18n) { reset: 'SOCIAL_AUTH_GITHUB_TEAM_KEY' }, SOCIAL_AUTH_GITHUB_TEAM_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_GITHUB_TEAM_SECRET' }, SOCIAL_AUTH_GITHUB_TEAM_ID: { diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js index 03af137a7c..2fb983eadc 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-github.form.js @@ -16,7 +16,8 @@ export default ['i18n', function(i18n) { reset: 'SOCIAL_AUTH_GITHUB_KEY' }, SOCIAL_AUTH_GITHUB_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_GITHUB_SECRET' } }, diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js index ac1c23545e..2715c73f9a 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js @@ -16,7 +16,8 @@ export default ['i18n', function(i18n) { reset: 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY' }, SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET' }, SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS: { diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js index 8d38fea688..25fb2ce934 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-ldap.form.js @@ -21,7 +21,8 @@ export default ['i18n', function(i18n) { reset: 'AUTH_LDAP_BIND_DN' }, AUTH_LDAP_BIND_PASSWORD: { - type: 'password' + type: 'sensitive', + hasShowInputButton: true, }, AUTH_LDAP_USER_SEARCH: { type: 'textarea', diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js index b16fd649dc..70d68015e0 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-radius.form.js @@ -21,7 +21,8 @@ export default ['i18n', function(i18n) { reset: 'RADIUS_PORT' }, RADIUS_SECRET: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'RADIUS_SECRET' } }, diff --git a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js index ca2bb50dcb..0d10e6e8b1 100644 --- a/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js +++ b/awx/ui/client/src/configuration/auth-form/sub-forms/auth-saml.form.js @@ -20,7 +20,8 @@ export default ['i18n', function(i18n) { reset: 'SOCIAL_AUTH_SAML_SP_PUBLIC_CERT' }, SOCIAL_AUTH_SAML_SP_PRIVATE_KEY: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'SOCIAL_AUTH_SAML_SP_PRIVATE_KEY' }, SOCIAL_AUTH_SAML_ORG_INFO: { diff --git a/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js b/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js index ee99024b45..a14844bf26 100644 --- a/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js +++ b/awx/ui/client/src/configuration/system-form/sub-forms/system-logging.form.js @@ -30,7 +30,8 @@ reset: 'LOG_AGGREGATOR_USERNAME' }, LOG_AGGREGATOR_PASSWORD: { - type: 'text', + type: 'sensitive', + hasShowInputButton: true, reset: 'LOG_AGGREGATOR_PASSWORD' }, LOG_AGGREGATOR_LOGGERS: { From fe896dbda5e8ce63e39e331b7e49a8e0cd5b8feb Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 12:57:40 -0500 Subject: [PATCH 13/55] permission tab disable for private credentials --- awx/ui/client/src/controllers/Credentials.js | 19 ++++++++++--------- awx/ui/client/src/forms/Credentials.js | 4 +++- awx/ui/client/src/shared/directives.js | 8 +++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/awx/ui/client/src/controllers/Credentials.js b/awx/ui/client/src/controllers/Credentials.js index a64056ccd4..2bddc26f0d 100644 --- a/awx/ui/client/src/controllers/Credentials.js +++ b/awx/ui/client/src/controllers/Credentials.js @@ -283,7 +283,7 @@ CredentialsAdd.$inject = ['$scope', '$rootScope', '$compile', '$location', export function CredentialsEdit($scope, $rootScope, $compile, $location, $log, $stateParams, CredentialForm, Rest, Alert, ProcessErrors, ClearScope, Prompt, GetBasePath, GetChoices, KindChange, Empty, OwnerChange, FormSave, Wait, - $state, CreateSelect2, Authorization) { + $state, CreateSelect2, Authorization, i18n) { ClearScope(); @@ -336,13 +336,14 @@ export function CredentialsEdit($scope, $rootScope, $compile, $location, $log, }); } - // if the credential is assigned to an organization, allow permission delegation - // do NOT use $scope.organization in a view directive to determine if a credential is associated with an org - // @todo why not? ^ and what is this type check for a number doing - should this be a type check for undefined? - $scope.disablePermissionAssignment = typeof($scope.organization) === 'number' ? false : true; - if ($scope.disablePermissionAssignment) { - $scope.permissionsTooltip = 'Credentials are only shared within an organization. Assign credentials to an organization to delegate credential permissions. The organization cannot be edited after credentials are assigned.'; - } + $scope.$watch('organization', function(val) { + if (val === undefined) { + $scope.permissionsTooltip = i18n._('Credentials are only shared within an organization. Assign credentials to an organization to delegate credential permissions. The organization cannot be edited after credentials are assigned.'); + } else { + $scope.permissionsTooltip = ''; + } + }); + setAskCheckboxes(); KindChange({ scope: $scope, @@ -613,5 +614,5 @@ CredentialsEdit.$inject = ['$scope', '$rootScope', '$compile', '$location', '$log', '$stateParams', 'CredentialForm', 'Rest', 'Alert', 'ProcessErrors', 'ClearScope', 'Prompt', 'GetBasePath', 'GetChoices', 'KindChange', 'Empty', 'OwnerChange', - 'FormSave', 'Wait', '$state', 'CreateSelect2', 'Authorization' + 'FormSave', 'Wait', '$state', 'CreateSelect2', 'Authorization', 'i18n', ]; diff --git a/awx/ui/client/src/forms/Credentials.js b/awx/ui/client/src/forms/Credentials.js index 9d816c9ce4..727172c94c 100644 --- a/awx/ui/client/src/forms/Credentials.js +++ b/awx/ui/client/src/forms/Credentials.js @@ -420,7 +420,9 @@ export default related: { permissions: { - disabled: 'disablePermissionAssignment', + disabled: '(organization === undefined ? true : false)', + // Do not transition the state if organization is undefined + ngClick: `(organization === undefined ? true : false)||$state.go('credentials.edit.permissions')`, awToolTip: '{{permissionsTooltip}}', dataTipWatch: 'permissionsTooltip', dataPlacement: 'top', diff --git a/awx/ui/client/src/shared/directives.js b/awx/ui/client/src/shared/directives.js index 1da55f80f8..a66ca71e9f 100644 --- a/awx/ui/client/src/shared/directives.js +++ b/awx/ui/client/src/shared/directives.js @@ -621,11 +621,9 @@ angular.module('AWDirectives', ['RestServices', 'Utilities', 'JobsHelper']) if (attrs.tipWatch) { // Add dataTipWatch: 'variable_name' scope.$watch(attrs.tipWatch, function(newVal, oldVal) { - if (newVal !== oldVal) { - // Where did fixTitle come from?: - // http://stackoverflow.com/questions/9501921/change-twitter-bootstrap-tooltip-content-on-click - $(element).tooltip('hide').attr('data-original-title', newVal).tooltip('fixTitle'); - } + // Where did fixTitle come from?: + // http://stackoverflow.com/questions/9501921/change-twitter-bootstrap-tooltip-content-on-click + $(element).tooltip('hide').attr('data-original-title', newVal).tooltip('fixTitle'); }); } } From f3ade65ac6e8b883c61a31acc34aba4464b7b5eb Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Tue, 10 Jan 2017 14:27:55 -0500 Subject: [PATCH 14/55] Vendor pywinrm and deps for Ansible. --- requirements/requirements_ansible.in | 1 + requirements/requirements_ansible.txt | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/requirements/requirements_ansible.in b/requirements/requirements_ansible.in index 2d381c955b..5497b2a7b1 100644 --- a/requirements/requirements_ansible.in +++ b/requirements/requirements_ansible.in @@ -7,5 +7,6 @@ boto==2.45.0 psphere==0.5.2 psutil==5.0.0 pyvmomi==6.5 +pywinrm[kerberos]==0.2.2 secretstorage==2.3.1 shade==1.13.1 diff --git a/requirements/requirements_ansible.txt b/requirements/requirements_ansible.txt index 59a7fe9544..fef057d56b 100644 --- a/requirements/requirements_ansible.txt +++ b/requirements/requirements_ansible.txt @@ -64,8 +64,10 @@ msrestazure==0.4.6 # via azure-common munch==2.0.4 # via shade netaddr==0.7.18 # via oslo.config, oslo.utils, python-neutronclient netifaces==0.10.5 # via oslo.utils, shade +ntlm-auth==1.0.2 # via requests-ntlm oauthlib==2.0.1 # via requests-oauthlib openstacksdk==0.9.11 # via python-openstackclient +ordereddict==1.1 # via ntlm-auth os-client-config==1.24.0 # via openstacksdk, osc-lib, python-magnumclient, python-neutronclient, shade os-diskconfig-python-novaclient-ext==0.1.3 # via rackspace-novaclient os-networksv2-python-novaclient-ext==0.26 # via rackspace-novaclient @@ -83,6 +85,7 @@ psutil==5.0.0 pyasn1==0.1.9 # via cryptography pycparser==2.17 # via cffi PyJWT==1.4.2 # via adal +pykerberos==1.1.13 # via requests-kerberos pyparsing==2.1.10 # via cliff, cmd2, oslo.utils python-cinderclient==1.9.0 # via python-openstackclient, shade python-dateutil==2.6.0 # via adal, azure-storage @@ -100,24 +103,28 @@ python-swiftclient==3.2.0 # via python-heatclient, python-troveclient, shade python-troveclient==2.7.0 # via shade pytz==2016.10 # via babel, oslo.serialization, oslo.utils pyvmomi==6.5 +pywinrm[kerberos]==0.2.2 PyYAML==3.12 # via cliff, os-client-config, psphere, python-heatclient, python-ironicclient, python-mistralclient rackspace-auth-openstack==1.3 # via rackspace-novaclient rackspace-novaclient==2.1 rax-default-network-flags-python-novaclient-ext==0.4.0 # via rackspace-novaclient rax-scheduled-images-python-novaclient-ext==0.3.1 # via rackspace-novaclient +requests-kerberos==0.11.0 # via pywinrm +requests-ntlm==1.0.0 # via pywinrm requests-oauthlib==0.7.0 # via msrest -requests==2.11.1 # via adal, azure-servicebus, azure-servicemanagement-legacy, azure-storage, keystoneauth1, msrest, python-cinderclient, python-designateclient, python-glanceclient, python-heatclient, python-ironicclient, python-keystoneclient, python-magnumclient, python-mistralclient, python-neutronclient, python-novaclient, python-swiftclient, python-troveclient, pyvmomi, requests-oauthlib +requests==2.11.1 # via adal, azure-servicebus, azure-servicemanagement-legacy, azure-storage, keystoneauth1, msrest, python-cinderclient, python-designateclient, python-glanceclient, python-heatclient, python-ironicclient, python-keystoneclient, python-magnumclient, python-mistralclient, python-neutronclient, python-novaclient, python-swiftclient, python-troveclient, pyvmomi, pywinrm, requests-kerberos, requests-ntlm, requests-oauthlib requestsexceptions==1.1.3 # via os-client-config, shade rfc3986==0.4.1 # via oslo.config secretstorage==2.3.1 shade==1.13.1 simplejson==3.10.0 # via osc-lib, python-cinderclient, python-neutronclient, python-novaclient, python-troveclient -six==1.10.0 # via cliff, cryptography, debtcollector, keystoneauth1, mock, openstacksdk, osc-lib, oslo.config, oslo.i18n, oslo.serialization, oslo.utils, python-cinderclient, python-dateutil, python-designateclient, python-glanceclient, python-heatclient, python-ironicclient, python-keystoneclient, python-magnumclient, python-mistralclient, python-neutronclient, python-novaclient, python-openstackclient, python-swiftclient, python-troveclient, pyvmomi, shade, stevedore, warlock +six==1.10.0 # via cliff, cryptography, debtcollector, keystoneauth1, mock, ntlm-auth, openstacksdk, osc-lib, oslo.config, oslo.i18n, oslo.serialization, oslo.utils, python-cinderclient, python-dateutil, python-designateclient, python-glanceclient, python-heatclient, python-ironicclient, python-keystoneclient, python-magnumclient, python-mistralclient, python-neutronclient, python-novaclient, python-openstackclient, python-swiftclient, python-troveclient, pyvmomi, pywinrm, shade, stevedore, warlock stevedore==1.19.1 # via cliff, keystoneauth1, openstacksdk, osc-lib, oslo.config, python-designateclient, python-keystoneclient, python-magnumclient suds==0.4 # via psphere unicodecsv==0.14.1 # via cliff warlock==1.2.0 # via python-glanceclient wrapt==1.10.8 # via debtcollector, positional +xmltodict==0.10.2 # via pywinrm # The following packages are considered to be unsafe in a requirements file: # setuptools # via cryptography From 0f8f53b9d0b91ac31138f2ddb99f750c67d38822 Mon Sep 17 00:00:00 2001 From: Ken Hoes Date: Tue, 10 Jan 2017 14:35:44 -0500 Subject: [PATCH 15/55] Fixed resolve in route --- awx/ui/client/src/inventories/main.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/awx/ui/client/src/inventories/main.js b/awx/ui/client/src/inventories/main.js index 8505c9b80f..ac031283cd 100644 --- a/awx/ui/client/src/inventories/main.js +++ b/awx/ui/client/src/inventories/main.js @@ -66,7 +66,19 @@ angular.module('inventory', [ ], ParentObject: ['groupData', function(groupData) { return groupData; - }] + }], + UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q', + function(Rest, GetBasePath, $stateParams, $q) { + Rest.setUrl(GetBasePath('unified_jobs')); + var val = $q.defer(); + Rest.options() + .then(function(data) { + val.resolve(data.data); + }, function(data) { + val.reject(data); + }); + return val.promise; + }] }, views: { // clear form template when views render in this substate From 2b0598f0929ed83df9da7d4dabb4946577a58577 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Tue, 10 Jan 2017 14:49:58 -0500 Subject: [PATCH 16/55] Started to refactor some smart search functionality --- awx/ui/client/src/shared/smart-search/main.js | 3 +- .../shared/smart-search/queryset.service.js | 102 ++++++++++++++++-- .../smart-search/smart-search.controller.js | 76 +++++++++---- .../smart-search/smart-search.service.js | 19 ++++ .../smart-search/smart-search.service-test.js | 42 ++++++++ 5 files changed, 215 insertions(+), 27 deletions(-) create mode 100644 awx/ui/client/src/shared/smart-search/smart-search.service.js create mode 100644 awx/ui/tests/spec/smart-search/smart-search.service-test.js diff --git a/awx/ui/client/src/shared/smart-search/main.js b/awx/ui/client/src/shared/smart-search/main.js index 7653df7bd7..e7aaf825a7 100644 --- a/awx/ui/client/src/shared/smart-search/main.js +++ b/awx/ui/client/src/shared/smart-search/main.js @@ -2,11 +2,12 @@ import directive from './smart-search.directive'; import controller from './smart-search.controller'; import service from './queryset.service'; import DjangoSearchModel from './django-search-model.class'; - +import smartSearchService from './smart-search.service'; export default angular.module('SmartSearchModule', []) .directive('smartSearch', directive) .controller('SmartSearchController', controller) .service('QuerySet', service) + .service('SmartSearchService', smartSearchService) .constant('DjangoSearchModel', DjangoSearchModel); diff --git a/awx/ui/client/src/shared/smart-search/queryset.service.js b/awx/ui/client/src/shared/smart-search/queryset.service.js index 359245bed4..ec18f1b0d1 100644 --- a/awx/ui/client/src/shared/smart-search/queryset.service.js +++ b/awx/ui/client/src/shared/smart-search/queryset.service.js @@ -1,5 +1,5 @@ -export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSearchModel', '$cacheFactory', - function($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearchModel, $cacheFactory) { +export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSearchModel', '$cacheFactory', 'SmartSearchService', + function($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearchModel, $cacheFactory, SmartSearchService) { return { // kick off building a model for a specific endpoint // this is usually a list's basePath @@ -67,29 +67,114 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear return angular.isObject(params) ? `?${queryset}` : ''; function encodeTerm(value, key){ + if (Array.isArray(value)){ - return _.map(value, (item) => `${key}=${item}`).join('&') + '&'; + return _.map(value, function(item){ + item = item.replace(/"|'/g, ""); + return `${key}=${item}`.join('&') + '&'; + }); } else { + value = value.replace(/"|'/g, ""); return `${key}=${value}&`; } } }, // encodes a ui smart-search param to a django-friendly param // operand:key:comparator:value => {operand__key__comparator: value} - encodeParam(param){ - let split = param.split(':'); - return {[split.slice(0,split.length -1).join('__')] : split[split.length-1]}; + encodeParam(params){ + // Assumption here is that we have a key and a value so the length + // of the paramParts array will be 2. [0] is the key and [1] the value + let paramParts = SmartSearchService.splitTermIntoParts(params.term); + let keySplit = paramParts[0].split('.'); + let exclude = false; + let lessThanGreaterThan = paramParts[1].match(/^(>|<).*$/) ? true : false; + if(keySplit[0].startsWith("-")) { + exclude = true; + keySplit[0] = keySplit[0].replace(/^-/, ''); + } + let paramString = exclude ? "not__" : ""; + let valueString = paramParts[1]; + if(keySplit.length === 1) { + if(params.searchTerm && !lessThanGreaterThan) { + paramString += keySplit[0] + '__icontains'; + } + else if(params.relatedSearchTerm) { + paramString += keySplit[0] + '__search'; + } + else { + paramString += keySplit[0]; + } + } + else { + paramString += keySplit.join('__'); + } + + if(lessThanGreaterThan) { + if(paramParts[1].match(/^>=.*$/)) { + paramString += '__gte'; + valueString = valueString.replace(/^(>=)/,""); + } + else if(paramParts[1].match(/^<=.*$/)) { + paramString += '__lte'; + valueString = valueString.replace(/^(<=)/,""); + } + else if(paramParts[1].match(/^<.*$/)) { + paramString += '__lt'; + valueString = valueString.replace(/^(<)/,""); + } + else if(paramParts[1].match(/^>.*$/)) { + paramString += '__gt'; + valueString = valueString.replace(/^(>)/,""); + } + } + + return {[paramString] : valueString}; }, // decodes a django queryset param into a ui smart-search tag or set of tags decodeParam(value, key){ + + let decodeParamString = function(searchString) { + if(key === 'search') { + // Don't include 'search:' in the search tag + return decodeURIComponent(`${searchString}`); + } + else { + key = key.replace(/__icontains/g, ""); + let split = key.split('__'); + let decodedParam = searchString; + let exclude = false; + if(key.startsWith('not__')) { + exclude = true; + split = split.splice(1, split.length); + } + if(key.endsWith('__gt')) { + decodedParam = '>' + decodedParam; + split = split.splice(0, split.length-1); + } + else if(key.endsWith('__lt')) { + decodedParam = '<' + decodedParam; + split = split.splice(0, split.length-1); + } + else if(key.endsWith('__gte')) { + decodedParam = '>=' + decodedParam; + split = split.splice(0, split.length-1); + } + else if(key.endsWith('__lte')) { + decodedParam = '<=' + decodedParam; + split = split.splice(0, split.length-1); + } + return exclude ? `-${split.join('.')}:${decodedParam}` : `${split.join('.')}:${decodedParam}`; + } + }; + if (Array.isArray(value)){ return _.map(value, (item) => { - return `${key.split('__').join(':')}:${item}`; + return decodeParamString(item); }); } else { - return `${key.split('__').join(':')}:${value}`; + return decodeParamString(value); } }, @@ -161,6 +246,7 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear success(data) { return data; }, + }; } ]; diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index 95f3be3adb..7b09def616 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -1,5 +1,5 @@ -export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', 'QuerySet', - function($stateParams, $scope, $state, QuerySet, GetBasePath, qs) { +export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', 'QuerySet', 'SmartSearchService', + function($stateParams, $scope, $state, QuerySet, GetBasePath, qs, SmartSearchService) { let path, relations, // steps through the current tree of $state configurations, grabs default search params @@ -17,6 +17,7 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' $scope.searchTags = stripDefaultParams($state.params[`${$scope.iterator}_search`]); qs.initFieldset(path, $scope.djangoModel, relations).then((data) => { $scope.models = data.models; + $scope.options = data.options.data; $scope.$emit(`${$scope.list.iterator}_options`, data.options); }); } @@ -38,6 +39,16 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' return flat; } + function setDefaults(term) { + if ($scope.list.defaultSearchParams) { + return $scope.list.defaultSearchParams(term); + } else { + return { + search: encodeURIComponent(term) + }; + } + } + $scope.toggleKeyPane = function() { $scope.showKeyPane = !$scope.showKeyPane; }; @@ -56,7 +67,27 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' // remove tag, merge new queryset, $state.go $scope.remove = function(index) { - let removed = qs.encodeParam($scope.searchTags.splice(index, 1)[0]); + let tagToRemove = $scope.searchTags.splice(index, 1)[0]; + let termParts = SmartSearchService.splitTermIntoParts(tagToRemove); + let removed; + if (termParts.length === 1) { + removed = setDefaults(tagToRemove); + } + else { + let root = termParts[0].split(".")[0].replace(/^-/, ''); + let encodeParams = { + term: tagToRemove + }; + if(_.has($scope.options.actions.GET, root)) { + if($scope.options.actions.GET[root].type && $scope.options.actions.GET[root].type === 'field') { + encodeParams.relatedSearchTerm = true; + } + else { + encodeParams.searchTerm = true; + } + } + removed = qs.encodeParam(encodeParams); + } _.each(removed, (value, key) => { if (Array.isArray(queryset[key])){ _.remove(queryset[key], (item) => item === value); @@ -79,26 +110,35 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' let params = {}, origQueryset = _.clone(queryset); - function setDefaults(term) { - // "name" and "description" are sane defaults for MOST models, but not ALL! - // defaults may be configured in ListDefinition.defaultSearchParams - if ($scope.list.defaultSearchParams) { - return $scope.list.defaultSearchParams(term); - } else { - return { - or__name__icontains: term, - or__description__icontains: term - }; - } - } + // Remove leading/trailing whitespace if there is any + terms = terms.trim(); if(terms && terms !== '') { - _.forEach(terms.split(' '), (term) => { + // Split the terms up + let splitTerms = SmartSearchService.splitSearchIntoTerms(terms); + _.forEach(splitTerms, (term) => { + + let termParts = SmartSearchService.splitTermIntoParts(term); + // if only a value is provided, search using default keys - if (term.split(':').length === 1) { + if (termParts.length === 1) { params = _.merge(params, setDefaults(term)); } else { - params = _.merge(params, qs.encodeParam(term)); + // Figure out if this is a search term + let root = termParts[0].split(".")[0].replace(/^-/, ''); + if(_.has($scope.options.actions.GET, root)) { + if($scope.options.actions.GET[root].type && $scope.options.actions.GET[root].type === 'field') { + params = _.merge(params, qs.encodeParam({term: term, relatedSearchTerm: true})); + } + else { + params = _.merge(params, qs.encodeParam({term: term, searchTerm: true})); + } + } + // Its not a search term or a related search term + else { + params = _.merge(params, qs.encodeParam({term: term})); + } + } }); diff --git a/awx/ui/client/src/shared/smart-search/smart-search.service.js b/awx/ui/client/src/shared/smart-search/smart-search.service.js new file mode 100644 index 0000000000..fe683c08d7 --- /dev/null +++ b/awx/ui/client/src/shared/smart-search/smart-search.service.js @@ -0,0 +1,19 @@ +export default [function() { + return { + splitSearchIntoTerms(searchString) { + return searchString.match(/(?:[^\s("')]+|"[^"]*"|'[^']*')+/g); + }, + splitTermIntoParts(searchTerm) { + let breakOnColon = searchTerm.match(/(?:[^:"]+|"[^"]*")+/g); + + if(breakOnColon.length > 2) { + // concat all the strings after the first one together + let stringsToJoin = breakOnColon.slice(1,breakOnColon.length); + return [breakOnColon[0], stringsToJoin.join(':')]; + } + else { + return breakOnColon; + } + } + }; +}]; diff --git a/awx/ui/tests/spec/smart-search/smart-search.service-test.js b/awx/ui/tests/spec/smart-search/smart-search.service-test.js new file mode 100644 index 0000000000..679a5656b4 --- /dev/null +++ b/awx/ui/tests/spec/smart-search/smart-search.service-test.js @@ -0,0 +1,42 @@ +'use strict'; + +describe('Service: SmartSearch', () => { + let SmartSearchService; + + beforeEach(angular.mock.module('Tower')); + + beforeEach(angular.mock.module('SmartSearchModule')); + + beforeEach(angular.mock.inject((_SmartSearchService_) => { + SmartSearchService = _SmartSearchService_; + })); + + describe('fn splitSearchIntoTerms', () => { + it('should convert the search string to an array tag strings', () =>{ + expect(SmartSearchService.splitSearchIntoTerms('foo')).toEqual(["foo"]); + expect(SmartSearchService.splitSearchIntoTerms('foo bar')).toEqual(["foo", "bar"]); + expect(SmartSearchService.splitSearchIntoTerms('name:foo bar')).toEqual(["name:foo", "bar"]); + expect(SmartSearchService.splitSearchIntoTerms('name:foo description:bar')).toEqual(["name:foo", "description:bar"]); + expect(SmartSearchService.splitSearchIntoTerms('name:"foo bar"')).toEqual(["name:\"foo bar\""]); + expect(SmartSearchService.splitSearchIntoTerms('name:"foo bar" description:"bar foo"')).toEqual(["name:\"foo bar\"", "description:\"bar foo\""]); + expect(SmartSearchService.splitSearchIntoTerms('name:"foo bar" description:"bar foo"')).toEqual(["name:\"foo bar\"", "description:\"bar foo\""]); + expect(SmartSearchService.splitSearchIntoTerms('name:\'foo bar\'')).toEqual(["name:\'foo bar\'"]); + expect(SmartSearchService.splitSearchIntoTerms('name:\'foo bar\' description:\'bar foo\'')).toEqual(["name:\'foo bar\'", "description:\'bar foo\'"]); + expect(SmartSearchService.splitSearchIntoTerms('name:\'foo bar\' description:\'bar foo\'')).toEqual(["name:\'foo bar\'", "description:\'bar foo\'"]); + expect(SmartSearchService.splitSearchIntoTerms('name:\"foo bar\" description:\'bar foo\'')).toEqual(["name:\"foo bar\"", "description:\'bar foo\'"]); + }); + }); + + describe('fn splitTermIntoParts', () => { + it('should convert the search term to a key and value', () =>{ + expect(SmartSearchService.splitTermIntoParts('foo')).toEqual(["foo"]); + expect(SmartSearchService.splitTermIntoParts('foo:bar')).toEqual(["foo", "bar"]); + expect(SmartSearchService.splitTermIntoParts('foo:bar:foobar')).toEqual(["foo", "bar:foobar"]); + expect(SmartSearchService.splitTermIntoParts('name:\"foo bar\"')).toEqual(["name", "\"foo bar\""]); + expect(SmartSearchService.splitTermIntoParts('name:\"foo:bar\"')).toEqual(["name", "\"foo:bar\""]); + expect(SmartSearchService.splitTermIntoParts('name:\'foo bar\'')).toEqual(["name", "\'foo bar\'"]); + expect(SmartSearchService.splitTermIntoParts('name:\'foo:bar\'')).toEqual(["name", "\'foo:bar\'"]); + }); + }); + +}); From ff419921944928793178318c5ed9ec9dec3ac705 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 15:52:08 -0500 Subject: [PATCH 17/55] don't include var if not going to use it --- awx/ui/client/src/shared/directives.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/shared/directives.js b/awx/ui/client/src/shared/directives.js index a66ca71e9f..55278c5ab9 100644 --- a/awx/ui/client/src/shared/directives.js +++ b/awx/ui/client/src/shared/directives.js @@ -620,7 +620,7 @@ angular.module('AWDirectives', ['RestServices', 'Utilities', 'JobsHelper']) if (attrs.tipWatch) { // Add dataTipWatch: 'variable_name' - scope.$watch(attrs.tipWatch, function(newVal, oldVal) { + scope.$watch(attrs.tipWatch, function(newVal) { // Where did fixTitle come from?: // http://stackoverflow.com/questions/9501921/change-twitter-bootstrap-tooltip-content-on-click $(element).tooltip('hide').attr('data-original-title', newVal).tooltip('fixTitle'); From d590432590dfe8a7a3eb146d30085ed9c2355ee7 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 15:54:06 -0500 Subject: [PATCH 18/55] gracefully handle 409 on delete related to #3245 --- awx/ui/client/src/shared/Utilities.js | 2 ++ .../client/src/templates/list/templates-list.controller.js | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/shared/Utilities.js b/awx/ui/client/src/shared/Utilities.js index 9bc18dfd13..3bb9c02de0 100644 --- a/awx/ui/client/src/shared/Utilities.js +++ b/awx/ui/client/src/shared/Utilities.js @@ -198,6 +198,8 @@ angular.module('Utilities', ['RestServices', 'Utilities', 'sanitizeFilter']) msg += 'Please contact your system administrator.'; } Alert(defaultMsg.hdr, msg); + } else if (status === 409) { + Alert('Conflict', data.conflict || "Resource currently in use."); } else if (status === 410) { Alert('Deleted Object', 'The requested object was previously deleted and can no longer be accessed.'); } else if ((status === 'Token is expired') || (status === 401 && data.detail && data.detail === 'Token is expired') || diff --git a/awx/ui/client/src/templates/list/templates-list.controller.js b/awx/ui/client/src/templates/list/templates-list.controller.js index 5bcd659a38..820f843852 100644 --- a/awx/ui/client/src/templates/list/templates-list.controller.js +++ b/awx/ui/client/src/templates/list/templates-list.controller.js @@ -131,7 +131,7 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', handleSuccessfulDelete(); }, function (data) { Wait('stop'); - ProcessErrors($scope, data, status, null, { hdr: 'Error!', + ProcessErrors($scope, data, data.status, null, { hdr: 'Error!', msg: 'Call to delete workflow job template failed. DELETE returned status: ' + status }); }); } @@ -141,8 +141,8 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', handleSuccessfulDelete(); }, function (data) { Wait('stop'); - ProcessErrors($scope, data, status, null, { hdr: 'Error!', - msg: 'Call to delete job template failed. DELETE returned status: ' + status }); + ProcessErrors($scope, data, data.status, null, { hdr: 'Error!', + msg: 'Call to delete job template failed. DELETE returned status: ' + data.status }); }); } else { From d589dceaa2e3509899c2ccbc9518d04ad33e4d22 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Tue, 10 Jan 2017 16:00:59 -0500 Subject: [PATCH 19/55] Fixed pagination by stringifying the page number before trying to update the query param --- awx/ui/client/src/shared/paginate/paginate.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/shared/paginate/paginate.controller.js b/awx/ui/client/src/shared/paginate/paginate.controller.js index fdd80000c7..407f9e10f6 100644 --- a/awx/ui/client/src/shared/paginate/paginate.controller.js +++ b/awx/ui/client/src/shared/paginate/paginate.controller.js @@ -18,7 +18,7 @@ export default ['$scope', '$stateParams', '$state', '$filter', 'GetBasePath', 'Q return; } path = GetBasePath($scope.basePath) || $scope.basePath; - queryset = _.merge($stateParams[`${$scope.iterator}_search`], { page: page }); + queryset = _.merge($stateParams[`${$scope.iterator}_search`], { page: page.toString() }); $state.go('.', { [$scope.iterator + '_search']: queryset }); From fb1e00e3ae57e15d77597ddf6c0da03b8fcc37c7 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 16:42:30 -0500 Subject: [PATCH 20/55] better job list empty message related to #4250 --- awx/ui/client/src/lists/AllJobs.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/lists/AllJobs.js b/awx/ui/client/src/lists/AllJobs.js index 16a37e5c04..12a94a5f1b 100644 --- a/awx/ui/client/src/lists/AllJobs.js +++ b/awx/ui/client/src/lists/AllJobs.js @@ -7,7 +7,8 @@ export default angular.module('AllJobsDefinition', ['sanitizeFilter', 'capitalizeFilter']) - .value( 'AllJobsList', { + .factory('AllJobsList', ['i18n', function(i18n) { + return { name: 'jobs', basePath: 'unified_jobs', @@ -16,6 +17,8 @@ export default index: false, hover: true, well: false, + emptyListText: i18n._('No jobs have yet run.'), + fields: { status: { label: '', @@ -113,4 +116,5 @@ export default ngShow: "(job.status !== 'running' && job.status !== 'waiting' && job.status !== 'pending') && job.summary_fields.user_capabilities.delete" } } - }); + }; +}]); From 806e6d143fd0aba88716bcd25eed0d4783400f23 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 09:15:46 -0500 Subject: [PATCH 21/55] word wrap large callback key in alert modal --- .../add-job-template/job-template-add.controller.js | 2 +- .../edit-job-template/job-template-edit.controller.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js index bbb97b3684..858cfc3452 100644 --- a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js +++ b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js @@ -295,7 +295,7 @@ ${data.related.callback}

-

The host configuration key is: +

The host configuration key is: ${$filter('sanitize')(data.host_config_key)} diff --git a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js index 83df997d81..a42c089273 100644 --- a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js +++ b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js @@ -432,14 +432,14 @@ export default ${data.related.callback}

-

The host configuration key is: +

The host configuration key is: ${$filter('sanitize')(data.host_config_key)}

`, - 'alert-info', saveCompleted, null, null, + 'alert-danger', saveCompleted, null, null, null, true); } var orgDefer = $q.defer(); From a36981dcb98705fc9a8db21567b5224caba0a08a Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Tue, 10 Jan 2017 16:53:35 -0500 Subject: [PATCH 22/55] Now handling multiple instances of the same query param with different values --- .../shared/smart-search/queryset.service.js | 6 ++++-- .../smart-search/smart-search.controller.js | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/queryset.service.js b/awx/ui/client/src/shared/smart-search/queryset.service.js index ec18f1b0d1..89ad2f14d1 100644 --- a/awx/ui/client/src/shared/smart-search/queryset.service.js +++ b/awx/ui/client/src/shared/smart-search/queryset.service.js @@ -69,10 +69,12 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear function encodeTerm(value, key){ if (Array.isArray(value)){ - return _.map(value, function(item){ + let concated = ''; + angular.forEach(value, function(item){ item = item.replace(/"|'/g, ""); - return `${key}=${item}`.join('&') + '&'; + concated += `${key}=${item}&`; }); + return concated; } else { value = value.replace(/"|'/g, ""); diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index 7b09def616..2da9648ca1 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -120,23 +120,34 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' let termParts = SmartSearchService.splitTermIntoParts(term); + function combineSameSearches(a,b){ + if (_.isArray(a)) { + return a.concat(b); + } + else { + if(a) { + return [a,b]; + } + } + } + // if only a value is provided, search using default keys if (termParts.length === 1) { - params = _.merge(params, setDefaults(term)); + params = _.merge(params, setDefaults(term), combineSameSearches); } else { // Figure out if this is a search term let root = termParts[0].split(".")[0].replace(/^-/, ''); if(_.has($scope.options.actions.GET, root)) { if($scope.options.actions.GET[root].type && $scope.options.actions.GET[root].type === 'field') { - params = _.merge(params, qs.encodeParam({term: term, relatedSearchTerm: true})); + params = _.merge(params, qs.encodeParam({term: term, relatedSearchTerm: true}), combineSameSearches); } else { - params = _.merge(params, qs.encodeParam({term: term, searchTerm: true})); + params = _.merge(params, qs.encodeParam({term: term, searchTerm: true}), combineSameSearches); } } // Its not a search term or a related search term else { - params = _.merge(params, qs.encodeParam({term: term})); + params = _.merge(params, qs.encodeParam({term: term}), combineSameSearches); } } From f2d2409c16f0f2eb4a805435277ebf68b7fbdb9a Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 17:03:42 -0500 Subject: [PATCH 23/55] mispellings and reduce verticle space usage --- .../job-template-add.controller.js | 26 +++++++++--------- .../job-template-edit.controller.js | 27 +++++++++---------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js index 858cfc3452..d6f26092f7 100644 --- a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js +++ b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js @@ -287,20 +287,18 @@ if (data.related && data.related.callback) { Alert('Callback URL', -`
-

Host callbacks are enabled for this template. The callback URL is:

-

- - ${$scope.callback_server_path} - ${data.related.callback} - -

-

The host configuration key is: - - ${$filter('sanitize')(data.host_config_key)} - -

-
`, +`Host callbacks are enabled for this template. The callback URL is: +

+ + ${$scope.callback_server_path} + ${data.related.callback} + +

+

The host configuration key is: + + ${$filter('sanitize')(data.host_config_key)} + +

`, 'alert-danger', saveCompleted, null, null, null, true); } diff --git a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js index a42c089273..f4df25796b 100644 --- a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js +++ b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js @@ -423,21 +423,18 @@ export default if (data.related && data.related.callback) { Alert('Callback URL', -` -
-

Host callbacks are enabled for this template. The callback URL is:

-

- - ${$scope.callback_server_path} - ${data.related.callback} - -

-

The host configuration key is: - - ${$filter('sanitize')(data.host_config_key)} - -

-
+`Host callbacks are enabled for this template. The callback URL is: +

+ + ${$scope.callback_server_path} + ${data.related.callback} + +

+

The host configuration key is: + + ${$filter('sanitize')(data.host_config_key)} + +

`, 'alert-danger', saveCompleted, null, null, null, true); From 3e8c7127712fa630d74766cc1315f80ae9b0ece4 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Tue, 10 Jan 2017 17:04:48 -0500 Subject: [PATCH 24/55] Licenses + LGPL code for winrm vendoring. --- docs/licenses/ntlm-auth-1.0.2.zip | Bin 0 -> 33770 bytes docs/licenses/ntlm-auth.txt | 163 ++++++++++++++++++++++ docs/licenses/pykerberos.txt | 202 ++++++++++++++++++++++++++++ docs/licenses/pywinrm.txt | 22 ++- docs/licenses/requests-kerberos.txt | 15 +++ docs/licenses/requests-ntlm.txt | 15 +++ 6 files changed, 411 insertions(+), 6 deletions(-) create mode 100644 docs/licenses/ntlm-auth-1.0.2.zip create mode 100644 docs/licenses/ntlm-auth.txt create mode 100644 docs/licenses/pykerberos.txt create mode 100644 docs/licenses/requests-kerberos.txt create mode 100644 docs/licenses/requests-ntlm.txt diff --git a/docs/licenses/ntlm-auth-1.0.2.zip b/docs/licenses/ntlm-auth-1.0.2.zip new file mode 100644 index 0000000000000000000000000000000000000000..d847ae6be669bb0708836f521f93bd5ecf0a2313 GIT binary patch literal 33770 zcma%h1C%IFv)|gbZQHhO+vZ){wr$(qy=&X%UE9e0e=o_)my_h>)S2p@>gqXXs(({m zQ`HL6z#u39000mGkJh-7%nCJ#+kgN7{2%}T7=NX9E;hEbhORCaw2X8NbWHRL(&Ds| za$@p1O0v$23lTGGVZNoIPYB?=Tm!LF2QiBl7 zo!tQ}QL)X5zlRVgT_QXE8E1QcMJ1`R$#fB06{X8z%XZl*Q`ndBv*&tjjlMmu&p7*j z5bR~ax41YkMt{=E&q>*W@DTE|R>ZH}S1&>79;vD?<0fMegSBg=dbmX>f^IJmkk0N6 zH|_j^s8M-f|EEq2G$?E+GzdOL4#`HJ3O-zJ^f_%s03UR7JQiLaVV8y&4^ z&+4R+wpMgkV@jrxP)rwy-~g6HQhg0(sBC8gg9r3ul3Hr7uD{=H8+5Y{@0d=+1+&oK zxQS7dEAWNmjUfZaK*f3P`)%euHhYmpP$L_gyuhmK6hEHk1-DpIw?6NG@O2jtKPq%0 z4jlR8-_4EZlxp4wsPJ!)$WtSkOZW?gfxj2#{{a%trY^1ybjD`pq%nd}K@13@F9BNv zz`s|ND7GI-l!RX%XljN>kKq+o(UV0m{2cMo?4FEN<}e zgzCq>REpaT;&c+oJ;*;?ot1Rf>FSMsN6e~L@&D(0Ec}J`)DBN0BM<<<+5ZLF|M4CU z9w{o5cAE?c-PpJMHc3G?OAQm9ULGQQYTcLA$*-5eK|1T*k)D)&V&zZmO(1* zsvmSo5B`|4-~jN8EoqpHT)azw^i7lLc8H2kWD{ghBA6f4KbL(aBO5)TY7A9!U(j!;t)K^*DE z^EssER@PLg$-jYvgX1FQRn-*wN)vD<$s7>KjGKzLXBp)b+J(2VTUd}gO=9}LK-hq~ zJdT*3Y6`U{`UjdcH*Mm{?@i{2D;q&doAXYTwl-X9b!)uRa+-&pfi^?W>5c7e9b8>Z^(_pYE$AFPw$*OriP;gpVv~Oi;j~B< zhlGGasBGnB>w=>)@hKpM&Vu8cxU<^tH>fwW>VLjsde&|B6sQ$Sq>h0jdzkHaro5i7 z5vSC*{P&=zUEm&>SHcZcY}jRt(VbER$4D%q+Z!_JnWFk>88CAwbh$YKMMQaKw)Mz} zmkiV)&|HlKhJ77*dqW7ZglB6N3(bJ+8bkI9Ch_hON(2qSl-exSFb0TTB7DS6TT6g^ zL|>QD)l%CPA`Xb_l!9Lcoc0t5H$7=CyTitm7G!5HuxV% zQgIL}YiCMkA-je#bY}X#%TV_0f)5RR?y%0`PmQWKVLp;8pAE>`bK!e;;y#x;ICJ-8 zOw|JUV;XUq^3Se<^<+88q(>AQidkTyn{9scM%aWGg&Pd7NEn5Ut^SS|EMNGv6@ns7 z>ouRKD3y`{XOuA2HVD6?r?y_a9v?Srf=p$CPS(o}2O7xscB%QX4b~_ns+WH*viCo! zXbu5Qn+ndpVN;u`F86Mc(`eVWsK))RMM_X3fu||v-6l`O0@vb(Ur4zUh$|b^#wZ$gs3yTDo&P*)sKVuhWH#>b6niM5msR%7m=SSuPWq zU+pQhcLq(dXu7#eL?+Ffr})Fv>9utjZ+s# z4f0&*ZO~6G*iZvS_DoTLid?(rTwl(s)>-^Ysf7EZNYlYo9`9o503@_9KfPJLPq)YI zmoPfI6284rX!hd;s1Rf~jipxUs?{jdVl=<`OdGUMM^@`!cq*Uw1s(X;-#>fCz{v$O z%A0Em7O7)(Lb{!NJF%*k%@4iJKOrxp4?jgO#JwWM9j}$hC1(8?vcCek-HvI zuehGBlNMgkZkabtLW%=@8^S4bn*nkGiYoAV)n?p(2+8WFa1mQ}e0$@yg~$eFewChd zBys8e*$XjtTcoBrq&-Nzd6??E83b~ap8;xKdrhT;7JlDqB>m>IdK7b3)-9%|d&um` z%lO#5I4Sw~^L16Df7zUWZ{yMOVO`sJ$&VAM9y_f5?+!)72lCMe3;=-r@8C>pl*8xjcLdKEv0OH%0VWO71@YzMVvMN5*3{YMNGF-|EhYtYqJHb=U`uP^LP zzJS~$vKG$vf5J8{a$Zg|a*kOa$%O*xLlL7={o{(lo#Xc`Hv!zr8;fB2iOqJP?9 z`P}au?tQMlcE57|g0=eliN0M^R_Jr$lt+=YlvzLD42Ie$K&$YgxWM>1Gf$!Tu3*{j zsgBaWNo|+O7JH_X*P`FFXw{w-{7MX-4!mcw))otZ?Nl?>m5-g2YxW+(RZdu@bQBf2 zS7xYhgh={v{>5PM1SjgsiBTLLvwh#@ty$>ZkYRdgQ~mQ1JRktbo6L2!GaFc)N1f1t5KvL5TqcFsT;dZ7_HoGE=`t9`0=Fmp8~vI(67?Co)=e$3qG| zZjF(z24v&cOgIRIi)6WTsLXjzGZG;RF3Ph{?0uJi;ae86BPTR#wqwRY#fp9}z^B*K zx$3>cV#7@ly%t%;1V3%?lo@rCN~e+kHu(%qe(VKn8V%MV7FXq=9IfJQQ%TY z&z>~HBETc`{_pcP?g!y~nOgx!b>&(A01=%zcgm4~ekEh_eu{MYS>@=sn2sr#A3kHm zp=7iN1$u9q)8beO`Beb@hL7UjLd{BeP8?(~bD0TI43GG-s^YeE&4nnJ2ZiB3I}Q~P zCz4Kv)$`SAIphh`<#E+EZL$|zE?g2LBORLcO$~akHk4~orPG(v^i8bhzEcTmi<&FC znd8o_Mb+7rxs?|#bu(-cLXvC;RIx74Q0+3!Ta<31z(rD$PXZyG^&YAZiRURxtuv7x z(%E~tIZIHiDe;tI$Ad%iq)?b3Oq;zfG!NaI_N?!v#=h5CE8-7D#>TbUx|3{KL3pi0 zC@hcavCuo#R@i|0D!tPTznVHs*q;{ZRfmu7w26ihQn&D|P`N_H|sXwpxFP8I|sLuBH9~c0;Cjx!cwOQkEEy+0nJ~=WiNjSOWNeRDeu^i564g-pIJTh9=da$4wo%ER%v(86JB{uCFhpH=LlkORF;O9O(ILM?P;);i*4AQhu7}d({4*ctMWegV%yKKq5Io*A-lO9X zu3b`GhkS^jq3i=$fzzghJ9=nPO?F3_HcFPLCE70|{d~!M4x)Y_k4(4lQR9#ex-Tk! zSpfKV9-di$>T@3GnchILZ?vjo`mYU?Fz9j=L&C65e;ky7kB>kHy1pd_L z+129K!uMwpevgk|3X8fYxmBRtYwMBZ>`zG_D)&i6iv?;QB2>1UUf* z?1m|ksR{%H1u36&@pL(u-{eyttN3S|O*lyp$xRntGkaxh$+lf$d?$6SwQ+B6_lM#i zDhGcP1^*+h@J~=oXarEFjR*knp$Gs#`~MXbJDEB=*xNaq{@ur}biAB5B#?giRo~#8 zC9kmP2w+C!4x(OS*M1kwkkJVzPMRtw$AisjNmQHpJLG+Lnu{$+U>S0|CHgq3V-rui zygWW0u0HHBV$Sf0dE4Wx&xiKsC50;u4npd0BJz@CIY{Dg6Ck?sju6{-A0_|FUJKZS zC<=qeOY%7LOoHXp2BV9C$Wt7&WHBen4yP~sYCDQ%0=tp36d>LtN1trC;avNea<=HF zXu#Cm6J{%-!?YI}Ri~H`h!D~X5!gM^!&riN+UwctEkq0wH=#c%g;OZyd&&kc>vP>ZP$oKVZVOKvQc8ZDRV3o9vLeBaCN z{dIB`@A8g6_Azs8TE_o*3vV%HPS{;SO(p5^5OM=(ilJr#?hRZ>9P)5|d}n>O;IYnq z0n5J!p!XE|b!{M^*V93Q>onhi^BlXI>q<91yg3=g9#ktj=D(mZDU?ShO0Ja)Fzo>` z;X>KQn^&>#=PzkSP;`@+(NoB<4)>%+P#~M_(9p3h@^^bfH4f#gP!n9(2?imoLj*(W zOLy$$uwhxbXkmp-Rl|_Q?k(=e;@_WZYrQRl-aW{BlQ#m$pJg~Ov0?U{lk4Sbl^-xD zJQ|oXV~!{L;%mz}k{(OsH#|>+lkau1mrJ4td^sid8aGcxoYU%3Q2FC>LM+v^($Mc_^h#!m|mwb*^VF( z>FyLH^kQgBUb%B&?l3hBn!EAztb3lK{uJRjlzD#=aiFfDBMRKQ-r^P=&sKmpI1J=T z5crxi-_!5}v=chs9apTD1lzBRT9rL}Q!js<8XtwU6&IX{G|uBJSy!+V42-QIjc-(9 z6&_e?FNMN^1>C)@tiM4x_Au=99uso3Pa$kFy&bGct}v7VFB$x|W`PKD?Y$5JwyjKi zzt$Sg4D(w5+5>NILJ@Bej*A`m94V4nYIkUObD=Nn=yf3(VWZ&v9gqSs)CzuX4m2)F z2G9l#BfkO0IWRlS?bvdlKw4ZJ=L2X@0^+ZLQSl0|Sv-)IB$Qsn zG2TT;M4s793G+MXVoK@A`3l||b66(#{^rH-87;xxaFw+@RU?kzvf!G;JtEZ{JdoN8 zvINKs{JHSwUri5D@+QlkW><+Tb`SZzAI&>97lO948%>$Tbg;h5Bsohr1LsXwT9RFA z1-ctbBD5bt$y`}KA7$=NBPeNy$VrdDL z00V*N39ywoiI#>dHIaW>gLMuhrDO28KoD4&5|FR~2X7O=#pn>o?7VaE=Ae_A8Z9NM z-WaAsQG+V07~F{na?7p+IB2)Xo=t}#ITg#ASCF_L$VlbBjNxoF%5w(xjFxV4doiE6 zhOWy$@(kPj7I-mX4Kh9L--E92Hl;xt%FC3%y#$|Gibmy`ii>#C>%}ZcIOK_CjP~we zhB!YjXov|?T}um%)m&AT@xi*J^>AzxuEJURMB1}4ER`6KU-<^R{kLaE*F}W zllYlNK&focC}fi=+=z7hscGI&O*a~;xY7cn-QB>~daGEuP4u{Sy-YTB?}}SbybdTP ztUrrE!eQM@?gh$?)MJGWq2WyL?A2a%;ENJ zhQz)3?Cui&meazNPcS5~Oao`{)M`Z5Cl=dNCcXoi5BEY=EDn!+cLxrA|DIk@K@(YN$c;{2nBgvC)Hy!(*CeDIFR;tk}pQ4P)*(>;=HWIMss$ zxElN(QK-~!5!UJI_jK^6RcX?ZdqaLA%6jNI^GR6;ZGB+5_xvB-5n^Ti<-r4{!Uck! zHOl65Ml_(+KHnjRuLg`XNQZ++dJ0ta5C=tH-iK_=^eEhLfy2;bLagC2GBie0lYtgz zfl8pFg;|_@2vJ9pdUBaUHOx2?!3L4M2)9Hfy$KfWB~`ij`5G3&J#l$CPM&ViWwiJi z*ZfvDW*)_GRq^rn29w&pXv4{59@{4a*Ecih4r9*YlvZ^|!Hf(vZuEzF z^kWFuyY*^oWSweZ1U0Mz(GJsM;}2P}fHUOHW4iLv^J-e_h-ZFMJDz$K$S&Nlk7L1@qtyLm#t9!(-*!kHjj;~{C}QG=%VjaYKXU(QhgsZeiGAnDvwlEx0T9Pp?H{(4CU8f^kH7~a5cLvz4V5cWp!IRqFvh-dQA6!p2ybT z&KkMf1)?j}_f`A~2(1v9l?RNL^R)e#m!hyLQw_Qw++I63@t)o-I3fo&k{{TwO1%(7I6-xGi~WP{wZrIkysFmA#KkMocxuWN@mfqG zWvVw$(Q?EtJsSFSPamU1BoLucQg(*I>-=jYCR_$_(DVz55oJZy&7 zR9WkqUzGgB-nAIy0f2VSpDz5 zpL-_<7C`4e{7q&}Tz;)i2sSP(FupiJ(@=}udx@BaZZ!1YkmbXKvFIM0fR3?4uioFM zj2>_^(|uoop8rmI>t57vIm@d>OZi0V0}&IP65{5-KxhFEH#udiOE|fvqhN&~6buW1 z&e(;ptV$C$a<=3CrMi^mPv@)axd-1j zRP1(x%2Q_4<+@pl$yQ;Ju!c~|oTZu>97O>`PMltYU57x>bfE^y6l|Jyk!TdqCUHFPlT%@t&!A`#``PNVcZbZ@zY2U*FF%uHiXAI zPSN#iI8?BWaxBitVCd{D%h+=ul+Onc`5k>r-Wtzx&CqSwx{ZgY6mYg51NY4v`J zF1<0`&J|TeblIB@A%S#;yWNCD8k}!(Yc}mzECv9l!^ml{UvudX)%FZ3ndI^vNmUMc zCRc8J-eN4MZTe1Wu92tp8Uw9)y}4QZMs0{+J6jvIs;t!_EGF*nWWY$57y>a@Q|ks( zhyxYQs_wlKU5FgdS8Zap-ynZ>AQ4jf)C#UMF%&F2r0q1#l-r27%-nW;BJlsTZ6x0R ziYOZa#frzQ&F?%0O0yC@RjU8S5Ic*+A)EU4V}TNF&D~UYq6^N{mfg3B-lH!p&SBOf zmRG{BX}+C6DkrgqU&e_x9js|FI0!w|zqR5wU6FK;zxs51x&2dS)yw_;5^-ie-ygvS zt=E4&JX}#@lZ(f;xf>|oroauM)D8z+~_N%LI_%WcDQG6h@Raq7Pv zj2z34u$V9CGmdq>>V!pg%q{?}&ZEPk^WyRF_7K#AuQjVCPHo1!`BU(;)wq7}z)vn- z^Yw*43yzMyO#xL@t*#vVr1Zuz-;YYG%E5O;fy0&fI42RWz zpaBkFL(RIBf_2WZ*6CxqdZ>-#oECP!}ZJ!FY z(1Cm$M7D1owB2ZHhFZe^(2D`3b>izlF`|r*uFJ5jmaalN1S0A|Jq|AkIr4CMT3TI_ zjq-dV*!jUuGh;Y9k&Xt$yT3?+TL&M!sbl+XvgGE%;hU~w{(%3n>7}~k~Q)Z}1vvuC! zKp5S1FWogH_nCJiBix%~TkUci0f)Lnv6+FF%(#dV_XpVKWHTN|=>4jp;YJ9A?cqFy zogb3#^1G@nX5XW4_YaR#&a?yYn^77OAYtw(rTl=&A_;6Zgf+l`E$&@t_VN}y90-V7 zuM%T4P|C1#glwNosb>haMKV^FNPfr35c~CZPMr#66IkWc0`v<`66&U01+F-rX1V*t z;t7l>awX*ft4^PCq8CD2zpVc-yGtVVY!xWt>`$gRVl<{n;B@1e4xt0XmiBiI@~goH zaXY*2YV+589ft-T(xoYNsp6+0rXxv_Hf78)n5=p*pd)u1$MEO&x%RgNr-Shu+Z|84 zqYi_iMQ86a=Y#~C%%=A}%*>@jBqi#vO0%CtOs`qc|pV?6U1k{o@p zOai(-s#R-okq6VI__%xP>;Coi^$T_X-8|r%!E5+Xzk!K%JC*^9Rz5uze%iZxCSg~z>;jbbj<@SgUq1kN&qN9}W!nPtC!0lh9Uy&! zPc>GLom=sTs~?L+)eeR+*pa+gY!qBo(vbIeeg*mj2C*33ZSQ z#C@V2i|dB7`JlVlDEX3s1YCs-r+YecUKxA38%q>$)fI4>WOoL8HRlY}ChQj0@{`1b zzh@cc;><41S*nhg$TCzMU9upIF3P2uT)`z>NTFF(zEi)7~(Qb~+<>mKf{tn^c{%Jf29KE=k2M4tike?STh4_rsL{oWZ!w62bSi zy>Iwq(`S20A9WuaGvvtYv^8^%PsjpuRosRF4oT+#@dXZe&UTrz!1x1VfJ4ecZxy*V z7J1`|YYTC8=yx?S#uHm}+~!&k;t-a83$hrIC2{E+hdLbe7ep%2o6 zH9$WW62loMYe+HPf(w}X!Br$JSFZFgFXy9Ua6eW;^g^jH`LeTkXhqW?VX*z4L*EB) z9|w;Chqbnep$ZZVaR{x5p7B|T8g!6FH?ik_$ZjqCRuEE=6gXE_yRf<1XCi*ISmbCc zY+uglP_-7=U(lWji{KCxBB%w{?`E^C)I94*8z~@h>0ij*0)$kMVMA}A1*$#=Eb>Z7 zAsjm7uCciy7ONspmTVZR!TqgVa%ni^%}cbh`V2hYEWe_~aJy5by{E2r8E-YkPhWwC zzPq*is7!#I$)0LJ0nc+w=@ftj&tLwY58_`QD^hXKq~yC7`JQ-M1EKeKDq6>#(sAwF zd)9Q5=M|a}VN^hLK=euLj2{aTA z%MxM>uYmg%gUnjHAw=Mj%8dWRWGyLyYBT{ zz*6d3!vSKDcYJ130lIuQ?w&WGpx@QS2fG>jO8q^Fn<#h+J%yD66Y1@{78V)hoOH!n zh4gbQMx=fFTW6sR^P$6?j^2-ewI3(k_A-X}N*VpxkO~-1wkUa|p-7DVB5UyzTx(U|Py_iJ7FlK6-kmBcj9SW}Jk-iw?ugGvHbB;|G$TH^jZa#X9evKBRLNV_2u8VH`P@ctq5|!Fqy|nk541hUWuR(`X`An1#ZWiYex?FRAtfAF=7uKg^H=WJ9zOO&lWeo4DL#`fHtgE%HjjSma|zq zq!o9At{?}v`D#uMb;Hr3EZ7ZxE>?I`)nc_^8)<`EpbO4cwSYJ5S?Vl9_{EAy9=dUf z@FTRa;R@aa1MIOYGHb~QHA%U1aap3zN$H-lE)9Gnv-*Y1{K@_1GTIkMN8mxhqEXZH zgl^pxbszI}ldefd9-eH;NmKH2LeutSHw`q?6?e|R30~(KyHpUJQk!n zg~*}t=Dy1D7EL+y%hS)+|H%iKnW>|f|M21X*a>+Nl`UDAZM@&c!h_Im~~IlFmNbzZ zifpC{a&89$ti3~veH+dK@Uy)?HXXxA7E~;B=R+MyUG&#*R6Bmca`-TUTRU=R*v&2= zAAiUpLEkp6|5W{@s8gCzE5&^tO5TvU(^+uaRe*K^$0uZL;Ri4}pHE=W@mB1?yVvBp z?(p@cmD|h_jeG#IT1cw9P*|FUH3DQ)Xx)6M#g|(?e_P<6;)VU&IHKt1#r2Gf zPH7T_qceyi4P^viEoCHQZL$ht*eZ!W7{h6jJEsbJrI!Py`_uy7sG z4S&m6UxSCj)faYNVj~sywzfDnUQ#Y$-ZJpMp!TaQ*JO!Bk~JVd1w~wOBqxww(ANaC zv;Mtafp1VNPPGU_*ex``Nvb8g%TC}|Wy+Menk81LnBRTXZv!jM>IbIFKHAHAnQ5w< zTCUGnC9#U0uJK*1Cl`TRO{(aDF6dRK^_sjbSgtISv{8*z8&!)tZTm0Os*N0TWXEcv zP&S80_XfdIwL1mx%XG%7j(~>4On>2{)k5>X+*-YRo#LD50r9rc7|LM>I;w?U;NRg zN>*{BNCs2V#iKAUTLMs~%((|>Sx@pNY?xH;@^58n^X1b|>Xh> z-wNtJOJy!m1}cw=n6P#gq7v9?Z3*fwUK8#-JF{cmneJM-g8&%MKs&QQa=X)&pAB-W z_LXT{NVlbx6{7X4QyC&3DYJ2!<-EYCsr6lPa#MJVG=6VOrQfyinTyjVE4DcCa71(c z^O>RCbp39ZV#HIMqN8`XkSJjsK7mOMoOYe}RK}-9i6SaF0qfIl0>0PZYYf-=Nk?YY zwtnRFK@lEX#auX}8u(SB3v1R^E7w0RqA69PJ9L{By$q+CIc{iPGUS~iyyG&~Zcz0w zuiE7JK?}M5?MH6%VJ`{68#O$nYPf)?fKIkz(PQ%vnU%KHW|um6y4%ONy8^Pa=9t>b zUQ&k58!N_FPic02?5dHwtl5L=XMM_JTEm!99nmpkLX=a_w+)X*zTBi_pQH1HrUtO^ zW?_tXb|4^MI<$Sy)?er71`jUl|qY-vdiE(>eBFZ-EP&2!r!K6k zG}bCj+c>6{vmQoBduHhWbe%6bi|gAg^_DX~54CCf0CiU&XTnlgD%Ko2Vr4>&&2(QB zno7pI8n1s-CDjzvcw8gcRkKlNU3+h_w6uP-PJ6}*mH-{vJ1F4GdYN6H9GwD9+o3%o z3$2$CwX6(en~gaa;HuHDoL1Cly-OB!!bn781QYd<0Hmg|<#g2%b64YpsOmIdsB=iN z$Z(^5@{-5+ms>kgCmCQzsF_FL8TO9u#!XmPJM4==elH4?u})p(LXCAsSh+uCqDT8o z8l3T2Hz+rqxzi>!*en*dJ$m+31l?D>zb#0J_IPB34kfnOA=wDCC46m!;6)vCE zg01~;KTuS-;h3c`000u2005-_WlUmX=wkRcENRg(wBHm%`obglF%0mw00McQaY&-^ zvUTWgwgfJYFyy8P%vKy@v%Qc@g-MhTlGW>?l>M~||4KP}FnJ29)%^6p^-H+|};?qx=ob$K*1dwp5EC$>dfug^v97EQdz51RWsAmam71B z<@n{q%+Xek%vm|5Y_YSVbaYjgqL?x1?ay_g6(AjY*Sg7KmGw2RA(aZ;|$@ zrzM$F-0R^3swG!M1mP0>(xwbfx@lM4T;18+Rs_TPx3B5_x*L9+%!6(52d{=c{ci5h z*Ej|a7tYU?PaV2~(lqrZO941j)g%vRHl-t~|AzL)R4Q(WXvrCOEi$7o2ODyLh;Gj)WAW*f3a&F!=w zMwSjZ9P_dhqx%k+X+FxbJm8@SPRNyw+JvUz&+aPDsSagU1|Mg$lc zd(%^I-yY=89&T--r7rr-g=NI1hpKhChZc`@R0lO$I@vC~@AP2MmIuN^wF6NN%l%Q) z5Le`EXCxdg`PtKg`q(2&%^%15)nL4(ywCZv)9bU*zKwlr$A_Y~mmzSnZa&%{OZ~Vh zZ%=O=wC0|uny(I@kl%4v>ejrQ^(1*bJ+RGvwV>TkXuw~|AOvu2Loj?fgkTgW;uKyW zI%)|(k7%dxl$+nE1vvDYC?<#s#m$kSzEM!3p~0aEP=~=QoED_oICMZX%IE%$X(cQ; z))VawZA%PlbLpX*7}_q9G`v-8q(quFf5Kt3YmQam*{+!2(z2o~B0H6gS{1vFh^24N zEW0XdeY>`KEKMFrtaSyP{=^K?iEn{!P+Iy}aQZ-Sj0yAvC%{ygqE6CNj53h`;KIqP zQZP~YqdjovG|nhUq~4ZOP%WceHjWXnC`iR3CMFIuongfyM6Q!fD`04w#LMBbwkjD; zflDbHjl|ON8rt-j3@9|j>>RHRCKlSYafZ7x*kPNN{Enuj92MC%c{oa#UPNSzwn>9O zs|HO~)+x;HPeyP^-?#hL1(O2acy$o;;0@}8!cjXD2{~hQ&oV5kDoqEYR7A#t8Xxu+ z3N0dyD&;7?G%6&MibXAM^{JjTZbind9${EnV%#hriB-k0jhd=T^ZwA1t6`ZRjcKL-WBe#MwH7hWjNM~<<8+7X_Oe2-TeBiwU21dE&?_)i57u5y z2HGwI{y?kLD#1CeFolk_hH+eM`2hu*Pk@4~Y8gqEf$+p8+(RC6f_n{(+j zMJlue%NpH9auQ_Ag2UW8=%6E zu{5lat{b*(uAR-pQ8;jRJxC4s#)U~EpCX+5!h1N#_>unGlPrMMz0tT+iW^o<&@X-;Hmc%n~m(ug~>X-Rl#DLcAp2?^V*IdK;G%h5`c z7Yq#Osavr6W5m?U&>JCvQl+}=#ZcOtWA9iz$Poo$6lVXh&xFgkR!BA)t8ODh&m2IO zkupq(N#P*(c<`m=q7`p_Lb6&*OuWpRTzDaiC`EHZ18OK_NFndq(i-2w5~AW2nrGe_!8@Q?A*6dmXOv7?5izot8mUMNf;dsRK!`qqd$Gs9(;@gvd6evx}qvI7eC@eq) zHXp?6G^o49Ml1rMDONN=Pmr(>9Arm1h17Upe7bx>vZO$RToNxrVQCgoSQS>aiqxi< z6kR3}1+{DhU}WjD4>!+-j2)F4|@M34Fw`iy0OfX(sB_=IFL2rY^k`s;sp@BSV zXQEOoQmqMzf=mSiR#KIe#KA{ghNuioIGzM78j5n379~f86-E#5X#En(E}J4ODmRAW zEYZ&l8!Ge9E@?$jUwt;jT{xCqJIM(>1a{b8UqZXKBCy6?vc*Cx-XGBW~R0c<}oW38N5alquOpjx8#6t<(W`=bzq{c8Nm7&pCW)zsl z0)UrtrvagV2ZihYr6U{%!zvKhdiM@n`K?0|J%z|1-j4(5jOy^oC~-6%W0v*z2IQ|4 z-%De-+%Pne5iGg%2qK->AlAPF>TI43&-QShO|L~Z)}IsTe4t zZSIv5V9UaIb`ev&cs6+a#Sl%MJKDb*$c;V>CWX0{cj%~tOH2TU29wLA9CyjNoY2>I zk|QuB?g|r-agOOXB9?*p7@=?&3@+0Wi%WTdFs!2pR{UI8Fkd%!WIG#?Ew&Io()(XQ z@jon>4`q~4@`wVR+de z2NmpoeP$^o#&+OjhY&I!Hz)>4bzM{-ys@l>Cxlf&JIWm9|d**iyV-2lVk@0t@WA4YGe3 z9ArxMpJn*3)kybxTD8cAG7QaMJND5-zn-;iFSkhc!yh?Qk0*%@E*%yS6gYzf#}xQp z#X^gjNK7Qg;^PTRFva9i;eg8vlv)2}M_j8j71+N_K{yPHOZ6YNG*=KRx2)i+o4_zf zXNXhanlT@SaR$H(LKNxJ9oVz_c4(Q z!b+?pO9()``NI9hp#l^`0K`KwrehNSy|dQ$0P7R3jj<20AfJu!&$@FI!WY{Jqj^i9 zd506DghmH5!7wmQse~S!2OS+l6oeLANt6>7ga%_JR{pC&vMOgZAxSp$PcTF?{8cBr zlJ)rvSW_@xhaK*tx-~$nk0)*c?vD#3*6VQK_|yR z&xeKlwc#czhQXs@!F&9?8z>ltk48D4NwaPMpcp<{B|N6B`u|N$0)OYm%I(c%g&uzn z3-1G7^GI!z)g0rNW00C1d)~a61?Cq{0pN4A|Nhtu<)@QKCLy7)P$-53aHKo{?SF?T z5Yk^tglcDD`HPEiKv7{3l79$wZez^(8pd|?FSPL^Pq#2PVj1JXE-?z>nVWHq36y=t z&W8ROl>mOm2Zry;F1W$~jtqs6_=l(rMiG3{|5pjpt)4dR!#UJn#El72o5T zaNIwv?j7OpviwH$5dai{o&P%_V1M4K43_^B{@;_Y!?W(HC4VbLX0QMNjQ`Ic9dl=A zePatlJ3CVweIrXd6H7bue@aI=YPx?*M<_mZOFs_Fd~;TBXRVnYXWkN+QraX^h{af{ zO;uwg=m(bd#G3(vRbMw=w&b+54A7!HM?){KTh6gpIKt^pu$cJNrKtjG$RQ9~a#Mkn z-N7X^1ZF@eWIEWxqalKOVCfQCO1OA9Lo#IEjm@)A3Hd-tL>MZ}uucbdcJJ_W!Zm-k zVWCuLf&>|7e%Vxc@rV^5riX6vEm4v&=yeWSOPi`F1z1bIPC5Ly_RcvvlWtr0LC3b8 zj&0kvZCjlVI_}tJ$F^nXtbyz z4!&pxWP$;m2pN-9Sfv4;3BBF5XXQBv-uI2j11_*93y;SuyNe|LBOX5d@jx~4s}(r} zqK5bwb*r4wYC}Q%vTWrfFtXm~#Afj#OvKKU*B=11i|+KJZrTM83fI&1S~&9woj`?x zlbaRdwe;Gb&NQZ1YLYJFsQOiuK^BACEWZGYr7Y&18iIiqM_SlM7X z{aaK%Yzn%!O!yG3W?7%XR9Z+j`CM)MmrrX?7Mky8->p(irEf+&oMECe6fp2dLKYXn zL`6k|!1#C%C|}KW762K>|oXHq^Op&9kj+SOJ5w_wX;iT-P?YaZt zPH-aQYc2C3&f*|^Fg$h$w}^$vGQU^*Relm_=z0u_%&nH8R2Cm^8mkTnm&f4QqNlGM zJ+(|wR5M6?{=Pk-*B$LaSbtZiW{gdl3w1VpUe42~&PAhdk6Ifs#C#cxa|B^gI|O=>tXRs49)9Tq}tdA8zB>*HM%w z&5tab$(0+PkZ%>v$UZlgEFk2=o^FB4++es7*Io~N&It|5>`k>{RIA7_YE^`lY+1aTy}Zc-3L*odR#9_42tWV2)uq zDQS%a&@&fPIc1fbO1A!13iafJxy^-{j}Mu~bcfC>{EKZDqN@DprKs&guP5Dg<1F>H z0qZ0>n&8$33MDb(oB%@6>C7QAOeV3z#LqSN(hVxiJ});H{j9vJwi}VI31t8vC~Kn7Rp@ z=u6ZTnP`|SAKCI_S27`Z7SA0aFsw72bZxF{RR^S6U|f%6O9a zyR72r{(2FyQTt2l*oMUm@-$eq-H*q=ta)eBIO0jzUe2}f004ke|1P;>ZS3f%Z~BiC z`5E@B?F!4?JL_{i^4(dY+pv^XMKO(6q=UGTOyiss{-Ea))kUjS*p7%v` zoKSS!*-t}GXe7wln8AVjv3uOiYu_*voe#y5kIu4`&IxfL^57ovk9MGCl9T`HENf#6 zZoOjo(JT2Kr;)bj@UaHX2)B9ND10KpN0KOJluX==DN>wGpH=l0%t3GmeO-I%n@GLv zd7|NlqupKj!6bfuZ^RG~UO(e;%vFkXtB_J45Q+l^kO${gca}^c*u~OuBvZ&10=tYV z62J*@m{^}o)VJ^cP-&_lr3<|cfGtisJCBV1*$e~)bDwoOH^;j{CYgc1^BoP}crxT0 zVayCoR}g`tORe9DEV#lEO&@g-*>d{v7x22@+oGq93b;w)k%R4xp|yiW`IHXA#xQ3^ zz}vL=-B>0~e_3le3STDxOl*_y;KYs@X#qTndLGxC<@9bmf*ySB*?hBEw1#KMW!hud zDF~jzNF)Vt#06s1PFc*rgSy`Ei8Ab*avd7=%Eh+|a*zD>kIpi$6#Q4ZB!(1ynQ`UL zT2=!7q*-xj^p2FzL)ov_dlq#TQhvrnVfnP4umoO@L^195{=C``;k%00L_`1&7$OkK zW7ecC5Id)&-yM#KCo-k8?PPp=Gd1rRl9|)&+5rGH5yH_33}^x~Zw`R37U^ieBf)E? z$sEp@C%I)QC$@8kpX{Ql8Oa`*wPo2Y;H|A{^sFm)FuJ2Vo#fsO2Ab;;6~qIbLXT@M zKleuDGgYzsRiZ2!u0tfN+OL9?#T zy7o4An35JfPax0<`1R}87ciX*+aR#l)Rkwr-KsCkY{X+dIkA2{c(4%~M|Q0#;U+tU z_Cil-cSvBb;Hate3mUG%bKc~3?hIdh5Bs#1Pr4iAdQiH}rAaiJ$v4wpphZE^5s}H1w7mXN`@F7x7*AhqyeUxS<_jJh9Q)w zswW{^WI?wODV}UICKdx+18f1lWC4(xEbrfxUgYXc%?{p%sUotO!{A_l1KLs(?1ec1 zSb;ocf3V(V^X9wcx9FB+(%A$kMh3XS-etkG#L3gA_3S_QLYISip$Oyg-6rC}=K9)s zu6PI}SlNRCJ`cbEwk+=N7ryc+*lJ*lxj0C#XT&E1*KgT5nG6UC`(*8uY&kx<60}9O zN2b}%$aQfWwTJ7L<%xV?=k`9bOt>n*mNFk&_a zkP1^lEw2(3f`Y|d;$XO{_kbM5_!2R9BRjNxk%oXtn;c_(kYX#(wZYT?p>*TW=w@mM zh#uwlvqyls1E#Gim5_QB*Pg3r9_?)ob5~~INLwB(g=O*Ej>vq&2Vo^J=B z8zKNgI0Bnrz@sk(J6ye7r-W^?82zXM=$RHL(kL62xwZ!r<)?TT0X?g9*rRa1WT{!p ztImnSoPVQub~$xh_fk&Qic5GB%Pf_WWsPI>y((!eA#*yKQR-IKomp9U(FXmbO+*8F zls%@Eb9#Y#w+v^!07;63T$DA4jE?5K?@M0__tMA)e!W1Jmucp2$Q5UCO$9U5%tkX7jo0FygKFa+P{ek&isY>kVb+wnz?zxGK^n1~gQOuJGk zQQ`q#E1QZKE0jvS$&}Dks|H@CPUbFG)%rSJ^3A?Kp>yNwE~f%Hh|)wCnZ}a+nv%4_ zn1E|YYHl3l5pi(WW9WC^luxIgI{9pw{06WRItuv@rxZf5X}Yd9QS~tt{&yNB0&L_K zn#J&~gjpz%(^^BVYAHOykfxx58g**LYC`aVV)7UX=~_}&G0y2)fe0qpfOfFRhxlQ3 zsC*9dG_*i`+}G^<(zU+VYdBvXYux(g@uo-RUA@s%#p=X3N=6fveSwMT!- zcL8!*qq^h<&P3@bTxPX>iOQ5OCt;!7!f zb2p(;o|SwYBd>CQ9cft`$I}3X@R+BOv6&G+7zvx(r>wkueJTE|NOH@CO*r!b9=W z{zmZj^#?}>Q`ZbX6Wq#J0>nqZo`O?q*`2*2PTI0P$6@1=4MDHKSkL!m-iCwKBK_Gd7F@@^U` z6+>M`#xJCfrH6#ec^P?0L&k@?1&4UdE26~`h4{7plK}a1JPJ)&zT`t-&dl5#=B#iq zo#;Wt-;00}Xr^g&+w&RB!LCpe-wY5i+j7)n4tMK=vz!-gieLpms{DvG^~SJ}eSMbH zW6D%ooGHG=`vJ=qe^=1W({A^Y-kS!k(=VVmoes7Y=Fe@e!338p#%#s6HS2{H*1x#2 z$_z@6PBa>L@7`LV_fK63X7tlG4oJ;3!$GfE6)p!KG%u~qi^HQIL<)HxN#4>UkR)>{ zeh%hhTH(GinuUircd>dCta+&m7{i~pzQFEJ&+xjsdZIt#3M+4UmA`2H>A%J#AZZIl z+JVKmitUyWVZoll-t|c?s*z)nGG?!NkDL%!LULgKG)#lDR!81z8lz0z!;r0eev^i; zv4qZneevhH5mjF8O`yB;*5+3 zR;KT^A!1SW@~x2;mwdU|_(m6Rx+d%(ZTaMF&pP|V?zOz6Z4QZUPg=czcAJq~Mlb2& z*?&ki)vN~M9b9_l@Rar=ety8qwkbo95Tp&K>caVg)URM^GQb$IbJ;xe^7hFRu7;_F z)`WJNNulWwcA99NLKI06oV-JS8|mn)2EM?TW}B%{+jf6vnH}_5nWvXc64`Ax@+-Rfg&MZ zBY`|EDqYX{CQ6Qx(b7eS{M5V*2-ffS|^Z@nIpC@8poZLp?K(^lsJJI zmQ&Du(lR0Eq{B6sF^pW8`6``OQg(b^O&v0d#BilvmtlmcMUQN6F7Gl*Z1r~^U7R^xZixTWRe$o+nuu{r!BqN)A|jX{(R9mV z*bn%W4qtEJvSqf$>_|x>GE6>MSZdPh?!LOhx%eYmUGrWIup3Y%{|q zJD+w5@_x=ZS4nW?D-Vv89nUrI)9G~eYW6d^VrgZ-2AZ4xPS(1s_LwRlxI#bwFhN)A zE1KppoD8hS;RP{-$LfG;i^@^)GNidrw-+Qz>547PKX|^mE{_&jg)YkIvMA-#WOg7$ z)^|RzybPf+HypmL{b*?uyf?|1>z%pGPBZT>bKqR+H)jAIwR1H%GVOk2v0@=oG;-tp z0@M@EKkAZ?UN9s@-?J9Hl?m~@Lbn)e%szQ-qX2Vg{m8%;F&}wvYjSNs@s)B!`Bh`Tj~)}qx(w?T}y1V_W8*tBRl`J(xr0C zuIlB)esyh?kNPJ=bGL5Q=AMI~iz)BEc^<=w=Q_|_BTjo2hi&Od>iC?T<*Y9XBi*#b ziVw~vc;XxC~Bd6?skA_J*T?LnQ1q2 zOg9!%);iy+`$VMRacfWZQfaTUhPsVg299+}OLvR&21Pb)@t3a^p?cgLMu5EZ{-3E{J#2!Z6bJx-MtlGOg1=4m{?eWNNbQcPdw-;M zk={BKI{fD5+Q1O~-?A@o8?=M-%tK+#gr`?Z%1Mn7!5m=hkva29&wDx;U4RJu1J+K` z*UeN3Be=axxNb(no+B0&b)!1*2AFiSa$o$a>tH^`G4WCnXwdg3ZY*za+zdxi=HfsU@RYEaS(zf4jp6aq2m zCel&`nT0}><4Y`KgoTrnm;$HN*4_@1IFA#}T0kcD&3EJlA54lCqN9bdAOj+aozQ;1 zJMSVn>mqtw#f4n~e!enIqAI{{uSUxkeykz8EnUSLb;E*^>?HQ-0GWR~dYrZ3* zuv@DG%QucbX(2F=eZHGKcfoZ(BWUtQU*AyA=l|ZPW@2nS!5~OmcIq>V0cO}NrN9ec z^b~0~2t)@;lRS+E8gxeY4g#;ReQ9=O4Tf=Pm+chDOj!anT`np>V<`l%4W~$+qmo0P zIT0?NgwB=01Vqix^dS?bn~orr-5FJJoudG7I%Fu`uT&X&vsbb?&KO&wia`q7>Q0{- zEeBeIAiXoZIjnic)ry&H8r)xPxuNz>MnkmO9ETyYkIE^@3@Dn(AuuvF~pAAjuI70@x`(p!2JA4S;hUbG{u0@(4jqatXmJgfIa0 zW*Jq)h(-8I?CS~P2T$Jmh~ZDj6rcW1?4jgBx_!j^b-aA%V;Ee>9nzCrolqS4E6EC0~;2 z=ZENJdGtqO(MK|pgs39`9l3InTYs)3!bHz&AjF)B9hI4yZ$zP!mA#cV11X#Ar7tenR64L9*&A6b2?L&n?KXNh8ZN@i}xHjH5v_* zcvA!x>=7N6W*MZ*oeTT{JL2$Q&G(X>gxZ%23Na2Z{j}j!h`J=t(qW{|G^qmd1uvT& zY8~bMg6K7__Kjf3^wxyrIc_ze3wH!mO91DwgyjKaxkNwBmi=(OQN_|rZp>`L+mK+`fiE=yC z-Wa;Cb{XR&ccnr%S^yIL;Zqehkp}t!fwKus2N2`P^(*4ReV?`T3PD{go`{^>Q-**~ zol!E*bXojoNM(tB|K0$3|7?;?Ot?s3 z?v1t_BKd8k6`qlf9}^%(fZVtIoc|6gYj_+Rp_||$7<0v44XE-KXoZias`Pn^K~2=< ztDE6+&iUq3#EWo-3&W_44{5>0hKStFw)HL-baQ$O<&Cxfs|9S?`P$~k2Lqmn(G89U zTcWbH=T)y-5taM>@XfX##5HS_aNtf?qi4#?>ZY+VdQeeWP+o9pgrcdA&d5sj{?^Qq zh44HW#Nhb2)!nr)5j2@9{ndMntP(R;DuM7#5;M^-qXGQcNWgW09 znsZK!nd|Eao+%+fFBz|~9hpcVsCp&?yHXqKC$@m6^vJD^*obB zB~mCDL@99E-2V{Zmm?=SsUy`MET4UNam6; z)_dv4c#&SS4B3B&H7Ms;fq zg~dO|`kG&8!@Jn9-+Auh;MF=_XIbDI6zC^Es^gLI-Jq_nm8=ufXy-5?<@lSjR3$%* z`Jq5XGqnrru8GNvK}|yk}QMAl68Qrqp4nPzpW^WsMmT@TUr&NNYoad8bmV#6`fT$ zU6B`bFV~YC+MX#L*9dFS)IhBo!xOXR8*E}(;E}N%f+Co|L#}Y@EKWK9J`Qxk7^DqQ*rLs5g z+YYCv{xj~WazjfF^edz0sV+)<$f^SR**WoWImER%`gp6tbiGF_@qqFkv#~C(R*XrV zofdxKX*u9-Ez6naF^Tut)H|iYM!}FK52x_m)8bM&lu?(8v&`GX9KCnVSXcZP5CU`k z3)|%MApM1PIl0OPC8PWD&z$|ULCdQi&PmMzW!T*Q69kz-n$Knmr0|-f@tRTKb|0tNt>0Q+~{o(_ggA8}p0(v-~#8@vZxl(!l_8UBw5 zPuH_sf(2ALKVs$-j=)oVaG-^(ym(= z92`xt=0Kq5BZoOEG3AK-DX?Jc=S|NJa`qG>m#{r{c>csY{NjFyi@hHwMLW$WQWFYE zMsrGuHF}S>;0j(vv7hE{ylFfwKsG@$Q)5Oz4RG{AbP?M}mrqwbA^I=qk$5Dmp5Gw0 zb&M+x$bWbjrXd_?L?@AJ^am7;c;}N~4a?_7)xap!AnjreNAYKe9N%M-$7wyKkmt+C zGvJuu$DjH92-`TAM^*Lfa%nlEHC|G6XNTtmWqdf4c>gRw1vS;MaVDzEN0>wp-?v~3 zT&JdQ&{J~5n59p3i^w>^W%O@U)oqQt8eAQZ#qBFjxh2JiDhZ%A5Jb@^(hmT ziPErOM_V@iq_p`eeHY3cbsoa@<1V3sRPp6FzI3aLArT%1x@Nnd9a)HsrhlmjwYjgQ zIvnb3&cPy)usTTImBLc>ERmxiQ$Bf&Ik)f}ZB-|n(9H9zr1a0R*Km6S#%OlA{2m)< zXDI)u7BjS8#*5`QGl+d%3>K=`o zoOfFwulIS`9NealxNFz@$uQ6Eg-5Q!NebKm^s1$4wY|+OSnG{p6V83VL zugWrd(fK0NN6$4B<-gM|b^NF-o7>vxIvN`~JD59t`Iwe-8rHTeY>00k?E^k1!WUMv z@`j{``yOKkZACGdscb%HTC8M{J_%-;s_NIlN(%4KsRY7pa@A`_u{smf@S&KnK{wZS zCWo0rMq7@E4>L*qmO#3u^oIVTj8}Yy^F$|P1T-+>qg}b&jS|rpxod49%EbjBwr&}`7kqq05yWv5@ktR>J}Dkp61;L-(p=tF zBE07ud2hC+XHxi3;ZL?p+=`_ydlZ*Gj8>HSKh*pV2e*cC(>=eDzixmf`VHaOYci=|zG#y2f_|>e8ynSC?jj$;ns23hgqAxQpn&1#N)yM#xF#a_BGbzifbLMQr zCz^c_-OY&q0t0=;_>EgkEEub7K9bQ0KEScbG%3~+g&1d43_X}-3;(Jm0KQ~Bl@$&S zZk|i3lq{nI0vYUWUv>3KB}A_slIlwNg@P5}Da?RB-%G6Nal%}JTphy43^Vb?SjRbH(nogaxT&_SXTnN0?Bd#pRbrM5w+z1Sq zaVGr$;Zxj`q1UM;ddQBB1JF3fZD^lk$Xdw*Xbk!2-qM+{{CAUbv)j9SaF0`7+tZrh z*Y(HOr`L2xb2wTOyg~A#R$(5oNi(Kdv=@(NOgw1X3LBo-=ks7^vF4!k2C$$GY^Mlj zcCTjCx96Zaf}WwhIX90TEuWEFS}RkoM)W(<1|m+<1fOg}8t2gP8HMy7p24{@w-`|9 zhgSg*fpL`@^kuY#SblE<&bv&cuMfB`9H8ZXCtHg=Ejap0qkIeK*_#r?v!Iuy+Y#=R zm@}V!7O%7OYO;0Ud=DPv`==~{GQj57MXWq`FTObi3i3fzC4w3A8Ie@Vi zMADuyBi_|w7+VD1Q@4Fe8c2-`zv-FOLw$nGR|2o7)#(Vk6pdvK`FqKlE1OBPSeX(0 zadlwNH$6FHOwO@+Rx$;BJNaAbRNMwe({3L@-{G^k-8q8K2Yb~E@~u3~pVvi{iA)0e zqmX%#?Uf1_ZuLDSfKXW&P0Cozk=O4BDI;H;QfLE#VXi}%U_9sOZLvx5s`vhuivzBsV%AcnrXgY936_GgH88qSKTQTo^`IDJ^@Ts)Ep&w~*B-m!CX~K`hh$ z71hC3stA@YkB~4%L7yLJ)hsJPQaic_J`5Pfoq-JfG>Cm27#LS+8(^M>4UG`c-CP70s8}jAgZ5qz3RJ9d7GCh)BJ6avF8J&o)%AlP0=BAqvgl}8e zrrL-A84YSfyOT)qYTyWw!DG0?h+PJA48x1p>g}$LtAgLWM2TQM5n8RC zkq|db*M>da`UG3|wx{PN4`eX=;u@uA75Qcy35mGN@W6N`@-1PRs|^!il(~GhRz=J0 zbDw9a1^!pElKlRViN@0TfqmneH5zLr@4?P<-_X;4Up!(iOyHuvT%x>Rg87-pBnqFap`barcy8I z8M-ADx6Vo-TnnzN28Cnw*|kF%=rOwBup{NIciSFsO0XBkQhMSi2^2f3+=IzuQL2#P zc}pS{EkEuNVSesYw9W6Go>uyT!oc$-!elA`OB`%YRQ#hpQeJP35q{WK^UkTQ$iYZ4 zDlhnW;0pgEe1$5yuzQC&L+N;cQ)N+G|D`u0f~(WF;VGD!>i~*SH0$EY<08%gJy!d( zsqT3p^JoanauTcwXibTcXaFL5h>|Kbe9yqj7vcWZGA&b4J&Nq*NhT!QuxTb*G+|d7 z6HEXhNs6rLZtO~QCUeFGB7T48?qxzedgMOB2;6Uu5$+s6Ef)>4P=QZ&_G%E1hyj7Qc->fm?|o9iiunAKYc3EY zgsIKixB03itf!F|0cn zqCE1&lF*XU{Df9me)*{coUY*qt~0(B&ufS|su8pe_2oi6C5uW$ylSzbAuQzt3+Gb2 z%H)aS^wNBAUG=_m5o}3@VWiBbydINebd7a+qH3W9H@*+chiMYlQ9-|>mXo0g(ff1rPc@Tg%Tcd zj);mI>8K`v02>V(_e@c_&ro8l!A)BYU(es~Fw0zA5WLtpG!|FHw^7~}%=%4BtA^=9 z2hEO$ASyjFL}g2#ZrT>}!M_0e+)S3nX10>d37wf|zv^%JxS8TX-=J+5rr{^-)^d4| zH-1QC-OBLTUewQO;j600rDc7i!SX_tZ`+xNh6YqHX156|p5ryF*}N)D&1-dwT_Lzw zkIu0vu}IX|AiJbC8SUHHimOvKwqGpPE!8>6GZJ|&tr8m2rM#XMza*=3OAFpdz<&okBi1$RWR0KtHg)4agb89+yH-r6B!1~zZR6ace#J=nf8$?65vo(C0AB& z$`pRF6NU&4yHF0&nFdc50$cSJ!srfKdTBHT%%qHiEp1flM3TdZhrdE6AVR$RE>!^; zLQm|ASBtUrO(6z(uhb1>xVVgi7@X>1^ceIdOMbZV8yS(*4gLrjaGAyzc7 z0wpngDo_u3-@~LJV201msJv78{M+b;)LtgTuI>VGAZU=eh{m}xvT<(CR+|(P-w&E- zaQ37Gq|1fFfOa%3>^y=i?VpSURJhW@@qC+li zWOsWJ8I!hM_ZgZ0*i#ZlJQck^QPz9c?$1rcR*8RGq+&%Hv?mYIxP zE(;$0Op;{#RkM&~M@dpx-$~*b4=MW^fpVr|%#41H2DnF&OOgg=y2M5o7Iyb&^6*~X zB6`KNz9QB&Cd?k4;5ZIwZm$7@E9L3=ZNex5?;ox$((iYK zmW>e=hx4_VNT)7C3Vj&KDWMlH0F|(iiW_>3n?-mQ+9)|zn2t%GJD+QHs0(C!c1BQK zniWF_c#WmpPxHve#fDbgqut5L%2)@B;fg=es?;CZJTYxJe=gB) zsh7#&k(uC!6DzKMC%t2Dw1@tL&LcQyB-dJ;=qW)k)q!oIu4L?0l7O>YrD+6~r#ZjF zJXyenJ6P^Aqg!ALQNU>Hjw@hT8d&BkE;6v!uwX*Bo`Yx$QH!{$tHty+U#J$%EZ;UH zP3rk7?7pRe2d~9yS&EkOp0s&}8>b}1zQpG~J#HNE7VfU*4Jv!(&^ECIe{r_x{u(!u z%l%L?NfvA(2;r}rj(^QfDb<6`PalmIi?IJLNu$ij@G&RLROCO3Z}48C$KFXZ$1eJb zf%VVxmQ(gxOTx$XC?I7|)zN|^y`%%1k=*nGg-`usCp_$K?77(p!YP5YL{03gQ#F zJ_R)_fH*9&vX^{}zKv4Mgy<+sqWM?Y`xJikv03!H{T8@J36NEtMvDr|2*eb-Q>$$w zM&B{5!t~@x`{$0{Jen}Nm@x${b${iA&a3$@s|0m#=q3C*2eIy_d(j2xCVaRPhdrYq zeJ+2+OUq#%k2V7_70zy9#@%9n$~jG7yC|$5^H(k-uuHz_ zr^stIFvyj_Yl4TzHv-L(V!{Cd>A8QqJUKH1PfrDVSjT|oVC@OoAWLeNDq-sbL6KGH z3QiuLmRe@dJ4bKVhH2J?n10OhUc=*Q1ag1f8k>9N{`p~r;L|d$w|Egz&I#Oz1#@n5 zQNi^g$dxzJl(`b-n>9oz&>4%C>3fmy;uKt*HD|5g#7aJS@D5w$ zPu-_?gw(4K7OdVr6sok+dF*$$*g=ri%*5{PtmDiHI2|43(qJ8kGG~brU5Q6sW^{k; zs{zM_GJy``$wc{~D0+mtiZ`(PtmSa>?CeKq(H$2IO)Hx)dcM_!#bl+0IkJm>@Ew0?pB$_z=jisgE&4=Nr}t^6E|;ccK~^4>g6MPf>*dR`{(y%<@`O zd&KZPbAEH7XL>#zQ@=Vlsrsai@7l{LDCZQno`x5r3-*P03hKSSIyw(4Ct24Jb4skc z;hFN%aQCV#Jp7q#b91R-byhWOWI}k0-71!1ZFJvq;5WlUMXuLU3+-$<^i^3UF+fhEI?wjk#pkYs?jXc*b}X-?iarSJIK8HA z2o__I}uaMrMt@8hX1^KtyWCWY?DgWcRoSNCHXk)#}+ zP@YsA9HkzlrH~(_92%OFCzGM386TYprInGUp&q6x+TGjU3yG8+9SV+AtyG?r11nNk zke3rxEhvWo_#I&Uviyw&U10c#F8}~P4%Uz3*G7TATK@j}{tv@S8e>ya>R-_Xt&y>v zv5k?jjo}wvD{~u5M;a$LryZa_xPP@0{z#quC*1$LM>$@)IZP`dPAwrVJ|so6_2(c=fXg5l_`o8582{4zXLvkCfg?TJ6O%#Q!(-o;uBI>LlF-TAe3BoWZ218q@QEkHG zh2}+xeD+43?V>oaH6$h_XGrHO{uo$PEF1hFrg!c|0yv$P48#gHo!deIioqwq;{hIGr z6s7kcDmVZiDQy6{|Lm4H+1lw^8M_!;{kkb5AL~uHEEV<8=C7L#2!ssqzuSj@;Q#Sc z@AK==pDWA%o$h~9{&bxFCj$VW-UsR9-}ooxzx}8GiuqTD&%ZG%|0~As%U>zKV!S{7 ze1B5}KBTh$yqN!9EdO-({S*7AtLJZQ?8l4VzsFks)8q3`?4L$!zp<(xGwk1E|6;rL zC;Cry@ZadykDX_KhyJY<{wMQKP21nhRMNj={!`)hPuicNlfP+VRR4zd4++XYd4CE< z{pPJQ{X5=&$w&Q({IfOtH?oia?~wmXqxN6%|Ede}H@->a@9=-=iTo?_*ZBW)hv9Ez zrRv`ye+`I_SmjULpLOluxM2Oi!~L_${a4z*s?GhTAsPQ2?O#;t{)+xrd6(bl7~8)? z|IaMUpVU9!7=Ke~9RH5`&-ceaX@5qKziD=^e@FXEEcsXDzlsKbBX9l=`S-EmpC|b< zH2i%MNw>eb?%yZ*-<}+QMialm_U``?_^+|WpI7~7Eb$vY`Jci65?TDo{_~;yo4xb( fKf3V$@rag_1o<$G1^__&_)YxSK*H_u>)ZbU>&@0= literal 0 HcmV?d00001 diff --git a/docs/licenses/ntlm-auth.txt b/docs/licenses/ntlm-auth.txt new file mode 100644 index 0000000000..21429cb1fa --- /dev/null +++ b/docs/licenses/ntlm-auth.txt @@ -0,0 +1,163 @@ +GNU Lesser General Public License +================================= + +_Version 3, 29 June 2007_ +_Copyright © 2007 Free Software Foundation, Inc. <>_ + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + +This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + +### 0. Additional Definitions + +As used herein, “this License” refers to version 3 of the GNU Lesser +General Public License, and the “GNU GPL” refers to version 3 of the GNU +General Public License. + +“The Library” refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the “Linked +Version”. + +The “Minimal Corresponding Source” for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +### 1. Exception to Section 3 of the GNU GPL + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +### 2. Conveying Modified Versions + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +* **a)** under this License, provided that you make a good faith effort to +ensure that, in the event an Application does not supply the +function or data, the facility still operates, and performs +whatever part of its purpose remains meaningful, or + +* **b)** under the GNU GPL, with none of the additional permissions of +this License applicable to that copy. + +### 3. Object Code Incorporating Material from Library Header Files + +The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +* **a)** Give prominent notice with each copy of the object code that the +Library is used in it and that the Library and its use are +covered by this License. +* **b)** Accompany the object code with a copy of the GNU GPL and this license +document. + +### 4. Combined Works + +You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + +* **a)** Give prominent notice with each copy of the Combined Work that +the Library is used in it and that the Library and its use are +covered by this License. + +* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +* **c)** For a Combined Work that displays copyright notices during +execution, include the copyright notice for the Library among +these notices, as well as a reference directing the user to the +copies of the GNU GPL and this license document. + +* **d)** Do one of the following: + - **0)** Convey the Minimal Corresponding Source under the terms of this +License, and the Corresponding Application Code in a form +suitable for, and under terms that permit, the user to +recombine or relink the Application with a modified version of +the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying +Corresponding Source. + - **1)** Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that **(a)** uses at run time +a copy of the Library already present on the user's computer +system, and **(b)** will operate properly with a modified version +of the Library that is interface-compatible with the Linked +Version. + +* **e)** Provide Installation Information, but only if you would otherwise +be required to provide such information under section 6 of the +GNU GPL, and only to the extent that such information is +necessary to install and execute a modified version of the +Combined Work produced by recombining or relinking the +Application with a modified version of the Linked Version. (If +you use option **4d0**, the Installation Information must accompany +the Minimal Corresponding Source and Corresponding Application +Code. If you use option **4d1**, you must provide the Installation +Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + +### 5. Combined Libraries + +You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +* **a)** Accompany the combined library with a copy of the same work based +on the Library, uncombined with any other library facilities, +conveyed under the terms of this License. +* **b)** Give prominent notice with the combined library that part of it +is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. + +### 6. Revised Versions of the GNU Lesser General Public License + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License “or any later version” +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/docs/licenses/pykerberos.txt b/docs/licenses/pykerberos.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/docs/licenses/pykerberos.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/licenses/pywinrm.txt b/docs/licenses/pywinrm.txt index 3f28a5f534..3e21facc07 100644 --- a/docs/licenses/pywinrm.txt +++ b/docs/licenses/pywinrm.txt @@ -1,9 +1,19 @@ -MIT License +Copyright (c) 2013 Alexey Diyan -Copyright (c) +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/docs/licenses/requests-kerberos.txt b/docs/licenses/requests-kerberos.txt new file mode 100644 index 0000000000..581f115e78 --- /dev/null +++ b/docs/licenses/requests-kerberos.txt @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2012 Kenneth Reitz + +Permission to use, copy, modify and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS-IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/docs/licenses/requests-ntlm.txt b/docs/licenses/requests-ntlm.txt new file mode 100644 index 0000000000..5f3e18de12 --- /dev/null +++ b/docs/licenses/requests-ntlm.txt @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2013 Ben Toews + +Permission to use, copy, modify and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS-IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. From a41fd5bdf89e31c16cf98a9158eede2b71010d21 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 16:18:30 -0500 Subject: [PATCH 25/55] display workflow template instead of wfjt related to #3404 --- .../templates/list/templates-list.controller.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/templates/list/templates-list.controller.js b/awx/ui/client/src/templates/list/templates-list.controller.js index 5bcd659a38..2734232ae2 100644 --- a/awx/ui/client/src/templates/list/templates-list.controller.js +++ b/awx/ui/client/src/templates/list/templates-list.controller.js @@ -45,12 +45,14 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', $scope.$on(`${list.iterator}_options`, function(event, data){ $scope.options = data.data.actions.GET; optionsRequestDataProcessing(); + renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate(); }); $scope.$watchCollection('templates', function() { - optionsRequestDataProcessing(); - } - ); + optionsRequestDataProcessing(); + renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate(); + }); + // iterate over the list and add fields like type label, after the // OPTIONS request returns, or the list is sorted/paginated/searched function optionsRequestDataProcessing(){ @@ -70,6 +72,13 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', }); } + function renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate() { + $scope[list.name].forEach(function(item) { + if (item.type_label === "Workflow Job Template") { + item.type_label = "Workflow Template"; + } + }); + } $scope.$on(`ws-jobs`, function () { // @issue - this is no longer quite as ham-fisted but I'd like for someone else to take a peek From 36acc5c6bc9ce6dd86fe0f14d2614324796d271f Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 17:19:24 -0500 Subject: [PATCH 26/55] better empty list error message related to #4047 --- awx/ui/client/src/forms/Users.js | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/ui/client/src/forms/Users.js b/awx/ui/client/src/forms/Users.js index 0ef16a4aff..672dd2beea 100644 --- a/awx/ui/client/src/forms/Users.js +++ b/awx/ui/client/src/forms/Users.js @@ -121,6 +121,7 @@ export default organizations: { awToolTip: i18n._('Please save before assigning to organizations'), basePath: 'api/v1/users/{{$stateParams.user_id}}/organizations', + emptyListText: i18n._('Please add user to an Organization.'), search: { page_size: '10' }, From 5a5fcb161486c2fec1f6479fb6678165edb9c002 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 17:44:37 -0500 Subject: [PATCH 27/55] remove activity stream link on scheduled jobs list related to #3833 --- awx/ui/client/src/scheduler/main.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/awx/ui/client/src/scheduler/main.js b/awx/ui/client/src/scheduler/main.js index f8620c880e..9e04feae66 100644 --- a/awx/ui/client/src/scheduler/main.js +++ b/awx/ui/client/src/scheduler/main.js @@ -285,9 +285,7 @@ export default } }, data: { - activityStream: true, - activityStreamTarget: 'job', - activityStreamId: 'id' + activityStream: false, }, ncyBreadcrumb: { parent: 'jobs', From 3a118f911d2c38dc7ad3565001faf337a53d40ad Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 18:02:44 -0500 Subject: [PATCH 28/55] change projects list field ordering related to #4372 --- awx/ui/client/src/lists/Projects.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/awx/ui/client/src/lists/Projects.js b/awx/ui/client/src/lists/Projects.js index 34cf545035..26eb532f0e 100644 --- a/awx/ui/client/src/lists/Projects.js +++ b/awx/ui/client/src/lists/Projects.js @@ -39,18 +39,18 @@ export default columnClass: "col-lg-4 col-md-4 col-sm-5 col-xs-7 List-staticColumnAdjacent", modalColumnClass: 'col-md-8' }, - scm_revision: { - label: i18n._('Revision'), - excludeModal: true, - columnClass: 'col-lg-4 col-md-2 col-sm-3 hidden-xs', - class: 'List-staticColumnAdjacent--monospace' - }, scm_type: { label: i18n._('Type'), ngBind: 'project.type_label', excludeModal: true, columnClass: 'col-lg-2 col-md-2 col-sm-3 hidden-xs' }, + scm_revision: { + label: i18n._('Revision'), + excludeModal: true, + columnClass: 'col-lg-4 col-md-2 col-sm-3 hidden-xs', + class: 'List-staticColumnAdjacent--monospace' + }, last_updated: { label: i18n._('Last Updated'), filter: "longDate", From b903ad069e5d152a2eae25d3a99aac43e1601a8b Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 18:23:26 -0500 Subject: [PATCH 29/55] Revert "display workflow template instead of wfjt" This reverts commit 459b03e2e90b2aeaaf071a7438323890f238bf3f. --- .../templates/list/templates-list.controller.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/awx/ui/client/src/templates/list/templates-list.controller.js b/awx/ui/client/src/templates/list/templates-list.controller.js index 2734232ae2..5bcd659a38 100644 --- a/awx/ui/client/src/templates/list/templates-list.controller.js +++ b/awx/ui/client/src/templates/list/templates-list.controller.js @@ -45,14 +45,12 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', $scope.$on(`${list.iterator}_options`, function(event, data){ $scope.options = data.data.actions.GET; optionsRequestDataProcessing(); - renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate(); }); $scope.$watchCollection('templates', function() { - optionsRequestDataProcessing(); - renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate(); - }); - + optionsRequestDataProcessing(); + } + ); // iterate over the list and add fields like type label, after the // OPTIONS request returns, or the list is sorted/paginated/searched function optionsRequestDataProcessing(){ @@ -72,13 +70,6 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', }); } - function renameTypeLabelFromWorkflowJobTemplateToWorkflowTemplate() { - $scope[list.name].forEach(function(item) { - if (item.type_label === "Workflow Job Template") { - item.type_label = "Workflow Template"; - } - }); - } $scope.$on(`ws-jobs`, function () { // @issue - this is no longer quite as ham-fisted but I'd like for someone else to take a peek From e5a2671d21eb43e86e47bd23fe1f73c230405eca Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Tue, 10 Jan 2017 18:23:52 -0500 Subject: [PATCH 30/55] rename wfjt to Workflow Template in OPTIONS --- awx/api/serializers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 05dca74cb6..66ca32764a 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -251,6 +251,7 @@ class BaseSerializer(serializers.ModelSerializer): 'inventory_update': _('Inventory Sync'), 'system_job': _('Management Job'), 'workflow_job': _('Workflow Job'), + 'workflow_job_template': _('Workflow Template'), } choices = [] for t in self.get_types(): From 8f259f2bb797d2a3fb9c440bee027bd00e6aa4bb Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 18:50:52 -0500 Subject: [PATCH 31/55] handle case of node with null UJT --- awx/main/scheduler/__init__.py | 2 ++ awx/main/scheduler/dag_workflow.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/awx/main/scheduler/__init__.py b/awx/main/scheduler/__init__.py index e92eb429e1..acff2cf8a3 100644 --- a/awx/main/scheduler/__init__.py +++ b/awx/main/scheduler/__init__.py @@ -114,6 +114,8 @@ class TaskManager(): dag = WorkflowDAG(workflow_job) spawn_nodes = dag.bfs_nodes_to_run() for spawn_node in spawn_nodes: + if spawn_node.unified_job_template is None: + continue kv = spawn_node.get_job_kwargs() job = spawn_node.unified_job_template.create_unified_job(**kv) spawn_node.job = job diff --git a/awx/main/scheduler/dag_workflow.py b/awx/main/scheduler/dag_workflow.py index c765b48678..5fc716584a 100644 --- a/awx/main/scheduler/dag_workflow.py +++ b/awx/main/scheduler/dag_workflow.py @@ -67,6 +67,8 @@ class WorkflowDAG(SimpleDAG): obj = n['node_object'] job = obj.job + if obj.unified_job_template is None: + continue if not job: return False # Job is about to run or is running. Hold our horses and wait for From 98260124992e50c1bbccf1b9e40d734d4e505fd3 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Wed, 11 Jan 2017 09:25:00 -0500 Subject: [PATCH 32/55] do not display tab tooltip in edit mode by default related to #4387 --- awx/ui/client/src/forms/Credentials.js | 1 + awx/ui/client/src/shared/form-generator.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/awx/ui/client/src/forms/Credentials.js b/awx/ui/client/src/forms/Credentials.js index 727172c94c..1ec2628cfd 100644 --- a/awx/ui/client/src/forms/Credentials.js +++ b/awx/ui/client/src/forms/Credentials.js @@ -425,6 +425,7 @@ export default ngClick: `(organization === undefined ? true : false)||$state.go('credentials.edit.permissions')`, awToolTip: '{{permissionsTooltip}}', dataTipWatch: 'permissionsTooltip', + awToolTipTabEnabledInEditMode: true, dataPlacement: 'top', basePath: 'api/v1/credentials/{{$stateParams.credential_id}}/access_list/', search: { diff --git a/awx/ui/client/src/shared/form-generator.js b/awx/ui/client/src/shared/form-generator.js index 63146ce890..02d94665cd 100644 --- a/awx/ui/client/src/shared/form-generator.js +++ b/awx/ui/client/src/shared/form-generator.js @@ -1479,7 +1479,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat html += `
Date: Wed, 11 Jan 2017 09:49:52 -0500 Subject: [PATCH 33/55] update workflow DAG tests so nodes not in sideways state --- awx/main/tests/unit/scheduler/test_dag.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/awx/main/tests/unit/scheduler/test_dag.py b/awx/main/tests/unit/scheduler/test_dag.py index 54e7de4fa8..932f4436ec 100644 --- a/awx/main/tests/unit/scheduler/test_dag.py +++ b/awx/main/tests/unit/scheduler/test_dag.py @@ -5,7 +5,7 @@ import pytest # AWX from awx.main.scheduler.dag_simple import SimpleDAG from awx.main.scheduler.dag_workflow import WorkflowDAG -from awx.main.models import Job +from awx.main.models import Job, JobTemplate from awx.main.models.workflow import WorkflowJobNode @@ -72,6 +72,7 @@ def factory_node(): if status: j = Job(status=status) wfn.job = j + wfn.unified_job_template = JobTemplate(name='JT{}'.format(id)) return wfn return fn From 974fe1d2445752b67b3ddd087abd481ba98e58f4 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 11 Jan 2017 10:23:47 -0500 Subject: [PATCH 34/55] Fix an issue with set_stats for unsupported Ansible versions --- awx/lib/tower_display_callback/module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/lib/tower_display_callback/module.py b/awx/lib/tower_display_callback/module.py index 480527a651..7336da2f08 100644 --- a/awx/lib/tower_display_callback/module.py +++ b/awx/lib/tower_display_callback/module.py @@ -328,7 +328,7 @@ class BaseCallbackModule(CallbackBase): ok=stats.ok, processed=stats.processed, skipped=stats.skipped, - artifact_data=stats.custom.get('_run', {}) + artifact_data=stats.custom.get('_run', {}) if hasattr(stats, 'custom') else {} ) with self.capture_event_data('playbook_on_stats', **event_data): From 8796af7e28e6cc5704de61bc3fc87be8b192c0f5 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 11 Jan 2017 10:39:24 -0500 Subject: [PATCH 35/55] Make session and csrf cookies secure by default --- awx/settings/defaults.py | 6 ++++++ awx/settings/development.py | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 8e67e9a025..6a47ba628f 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -163,6 +163,12 @@ MAX_EVENT_RES_DATA = 700000 # Note: This setting may be overridden by database settings. EVENT_STDOUT_MAX_BYTES_DISPLAY = 1024 +# Disallow sending session cookies over insecure connections +SESSION_COOKIE_SECURE = True + +# Disallow sending csrf cookies over insecure connections +CSRF_COOKIE_SECURE = True + TEMPLATE_CONTEXT_PROCESSORS = ( # NOQA 'django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug', diff --git a/awx/settings/development.py b/awx/settings/development.py index ebe81260d1..1326c12814 100644 --- a/awx/settings/development.py +++ b/awx/settings/development.py @@ -24,11 +24,11 @@ ALLOWED_HOSTS = ['*'] mimetypes.add_type("image/svg+xml", ".svg", True) mimetypes.add_type("image/svg+xml", ".svgz", True) -MONGO_HOST = '127.0.0.1' -MONGO_PORT = 27017 -MONGO_USERNAME = None -MONGO_PASSWORD = None -MONGO_DB = 'system_tracking_dev' +# Disallow sending session cookies over insecure connections +SESSION_COOKIE_SECURE = False + +# Disallow sending csrf cookies over insecure connections +CSRF_COOKIE_SECURE = False # Override django.template.loaders.cached.Loader in defaults.py TEMPLATE_LOADERS = ( From 644e4647981f3d0c7a56fa6b6fabadb296ac9ea3 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 10:47:06 -0500 Subject: [PATCH 36/55] Handle the injected __search and __icontains so that they don't show up in the search tags. --- .../client/src/shared/smart-search/queryset.service.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/queryset.service.js b/awx/ui/client/src/shared/smart-search/queryset.service.js index 89ad2f14d1..edb1301b9c 100644 --- a/awx/ui/client/src/shared/smart-search/queryset.service.js +++ b/awx/ui/client/src/shared/smart-search/queryset.service.js @@ -68,6 +68,9 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear function encodeTerm(value, key){ + key = key.replace(/__icontains_DEFAULT/g, "__icontains"); + key = key.replace(/__search_DEFAULT/g, "__search"); + if (Array.isArray(value)){ let concated = ''; angular.forEach(value, function(item){ @@ -99,10 +102,10 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear let valueString = paramParts[1]; if(keySplit.length === 1) { if(params.searchTerm && !lessThanGreaterThan) { - paramString += keySplit[0] + '__icontains'; + paramString += keySplit[0] + '__icontains_DEFAULT'; } else if(params.relatedSearchTerm) { - paramString += keySplit[0] + '__search'; + paramString += keySplit[0] + '__search_DEFAULT'; } else { paramString += keySplit[0]; @@ -142,7 +145,8 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear return decodeURIComponent(`${searchString}`); } else { - key = key.replace(/__icontains/g, ""); + key = key.replace(/__icontains_DEFAULT/g, ""); + key = key.replace(/__search_DEFAULT/g, ""); let split = key.split('__'); let decodedParam = searchString; let exclude = false; From e1ce3c3199c9b30a4181a869d39f907a4d4720bd Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Wed, 11 Jan 2017 10:58:40 -0500 Subject: [PATCH 37/55] add title parameter to rbac modal directives related to #4048 --- .../src/access/add-rbac-resource/rbac-resource.directive.js | 3 ++- .../src/access/add-rbac-resource/rbac-resource.partial.html | 2 +- .../access/add-rbac-user-team/rbac-user-team.directive.js | 3 ++- .../access/add-rbac-user-team/rbac-user-team.partial.html | 2 +- awx/ui/client/src/shared/stateDefinitions.factory.js | 6 +++--- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/awx/ui/client/src/access/add-rbac-resource/rbac-resource.directive.js b/awx/ui/client/src/access/add-rbac-resource/rbac-resource.directive.js index 3bcdece9f6..e84b78face 100644 --- a/awx/ui/client/src/access/add-rbac-resource/rbac-resource.directive.js +++ b/awx/ui/client/src/access/add-rbac-resource/rbac-resource.directive.js @@ -15,7 +15,8 @@ export default ['templateUrl', '$state', usersDataset: '=', teamsDataset: '=', resourceData: '=', - withoutTeamPermissions: '@' + withoutTeamPermissions: '@', + title: '@' }, controller: controller, templateUrl: templateUrl('access/add-rbac-resource/rbac-resource'), diff --git a/awx/ui/client/src/access/add-rbac-resource/rbac-resource.partial.html b/awx/ui/client/src/access/add-rbac-resource/rbac-resource.partial.html index f138e108d0..5cd8e19b1e 100644 --- a/awx/ui/client/src/access/add-rbac-resource/rbac-resource.partial.html +++ b/awx/ui/client/src/access/add-rbac-resource/rbac-resource.partial.html @@ -8,7 +8,7 @@
{{ object.name || object.username }}
- Add Permissions + {{ title }}
diff --git a/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.directive.js b/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.directive.js index ced1ceb744..ea4aafd2f3 100644 --- a/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.directive.js +++ b/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.directive.js @@ -11,7 +11,8 @@ export default ['templateUrl', return { restrict: 'E', scope: { - resolve: "=" + resolve: "=", + title: "@", }, controller: controller, templateUrl: templateUrl('access/add-rbac-user-team/rbac-user-team'), diff --git a/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.partial.html b/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.partial.html index a89621eda8..bc30eff1b7 100644 --- a/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.partial.html +++ b/awx/ui/client/src/access/add-rbac-user-team/rbac-user-team.partial.html @@ -9,7 +9,7 @@
{{ owner.name || owner.username }}
- Add Permissions + {{ title }}
diff --git a/awx/ui/client/src/shared/stateDefinitions.factory.js b/awx/ui/client/src/shared/stateDefinitions.factory.js index 65cd07d475..96e7493598 100644 --- a/awx/ui/client/src/shared/stateDefinitions.factory.js +++ b/awx/ui/client/src/shared/stateDefinitions.factory.js @@ -267,7 +267,7 @@ export default ['$injector', '$stateExtender', '$log', function($injector, $stat }, views: { [`modal@${formStateDefinition.name}`]: { - template: `` + template: `` } }, resolve: { @@ -332,7 +332,7 @@ export default ['$injector', '$stateExtender', '$log', function($injector, $stat }, views: { [`modal@${formStateDefinition.name}`]: { - template: `` + template: `` } }, resolve: { @@ -501,7 +501,7 @@ export default ['$injector', '$stateExtender', '$log', function($injector, $stat }, views: { [`modal@${formStateDefinition.name}`]: { - template: `` + template: `` } }, resolve: { From e69dc0f36eb2f87da911ee7c140b3ae841a9df99 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Tue, 10 Jan 2017 18:17:12 -0500 Subject: [PATCH 38/55] Clarification of copy RBAC messages --- awx/api/views.py | 2 ++ awx/main/access.py | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/awx/api/views.py b/awx/api/views.py index 7d0586b296..b3d877b67a 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2910,6 +2910,8 @@ class WorkflowJobTemplateCopy(WorkflowsEnforcementMixin, GenericAPIView): copy_TF, messages = request.user.can_access_with_errors(self.model, 'copy', obj) data['can_copy'] = copy_TF data['warnings'] = messages + if not copy_TF: + data['warnings'] = _('You do not have permission to make a copy.') return Response(data) def post(self, request, *args, **kwargs): diff --git a/awx/main/access.py b/awx/main/access.py index f2f1f72367..0696d10970 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -1043,7 +1043,7 @@ class JobTemplateAccess(BaseAccess): Project.accessible_objects(self.user, 'use_role').exists() or Inventory.accessible_objects(self.user, 'use_role').exists()) - # if reference_obj is provided, determine if it can be coppied + # if reference_obj is provided, determine if it can be copied reference_obj = data.get('reference_obj', None) if 'job_type' in data and data['job_type'] == PERM_INVENTORY_SCAN: @@ -1543,13 +1543,13 @@ class WorkflowJobTemplateAccess(BaseAccess): for node in qs.all(): node_errors = {} if node.inventory and self.user not in node.inventory.use_role: - node_errors['inventory'] = 'Prompted inventory %s can not be coppied.' % node.inventory.name + node_errors['inventory'] = 'Prompted inventory %s can not be copied.' % node.inventory.name if node.credential and self.user not in node.credential.use_role: - node_errors['credential'] = 'Prompted credential %s can not be coppied.' % node.credential.name + node_errors['credential'] = 'Prompted credential %s can not be copied.' % node.credential.name ujt = node.unified_job_template if ujt and not self.user.can_access(UnifiedJobTemplate, 'start', ujt, validate_license=False): node_errors['unified_job_template'] = ( - 'Prompted %s %s can not be coppied.' % (ujt._meta.verbose_name_raw, ujt.name)) + 'Prompted %s %s can not be copied.' % (ujt._meta.verbose_name_raw, ujt.name)) if node_errors: wfjt_errors[node.id] = node_errors self.messages.update(wfjt_errors) From 23f4898eea9eadf817346d2b1cbf1da1fc840962 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 11 Jan 2017 11:25:08 -0500 Subject: [PATCH 39/55] Re-wirte ad-hoc notification templates to organization to match docs --- awx/main/models/ad_hoc_commands.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/awx/main/models/ad_hoc_commands.py b/awx/main/models/ad_hoc_commands.py index 27d8754aa6..057924eda7 100644 --- a/awx/main/models/ad_hoc_commands.py +++ b/awx/main/models/ad_hoc_commands.py @@ -20,7 +20,7 @@ from django.core.urlresolvers import reverse # AWX from awx.main.models.base import * # noqa from awx.main.models.unified_jobs import * # noqa -from awx.main.models.notifications import JobNotificationMixin +from awx.main.models.notifications import JobNotificationMixin, NotificationTemplate from awx.main.fields import JSONField logger = logging.getLogger('awx.main.models.ad_hoc_commands') @@ -157,18 +157,20 @@ class AdHocCommand(UnifiedJob, JobNotificationMixin): @property def notification_templates(self): - all_inventory_sources = set() + all_orgs = set() for h in self.hosts.all(): - for invsrc in h.inventory_sources.all(): - all_inventory_sources.add(invsrc) + all_orgs.add(h.inventory.organization) active_templates = dict(error=set(), success=set(), any=set()) - for invsrc in all_inventory_sources: - notifications_dict = invsrc.notification_templates - for notification_type in active_templates.keys(): - for templ in notifications_dict[notification_type]: - active_templates[notification_type].add(templ) + base_notification_templates = NotificationTemplate.objects + for org in all_orgs: + for templ in base_notification_templates.filter(organization_notification_templates_for_errors=org): + active_templates['error'].add(templ) + for templ in base_notification_templates.filter(organization_notification_templates_for_success=org): + active_templates['success'].add(templ) + for templ in base_notification_templates.filter(organization_notification_templates_for_any=org): + active_templates['any'].add(templ) active_templates['error'] = list(active_templates['error']) active_templates['any'] = list(active_templates['any']) active_templates['success'] = list(active_templates['success']) From 2c97425291f32c355f48339dbb053c1b3ef3ef94 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Wed, 11 Jan 2017 12:23:57 -0500 Subject: [PATCH 40/55] prototype for new copy GET details --- awx/api/views.py | 16 ++++++++++------ awx/main/access.py | 18 ++++++++++++------ .../list/templates-list.controller.js | 14 +++++++------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/awx/api/views.py b/awx/api/views.py index b3d877b67a..7e8ea65540 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2906,12 +2906,16 @@ class WorkflowJobTemplateCopy(WorkflowsEnforcementMixin, GenericAPIView): def get(self, request, *args, **kwargs): obj = self.get_object() - data = {} - copy_TF, messages = request.user.can_access_with_errors(self.model, 'copy', obj) - data['can_copy'] = copy_TF - data['warnings'] = messages - if not copy_TF: - data['warnings'] = _('You do not have permission to make a copy.') + can_copy, messages = request.user.can_access_with_errors(self.model, 'copy', obj) + data = { + 'can_copy': can_copy, 'can_copy_without_user_input': can_copy, + 'templates_unable_to_copy': [] if can_copy else ['all'], + 'credentials_unable_to_copy': [] if can_copy else ['all'], + 'inventories_unable_to_copy': [] if can_copy else ['all'] + } + if messages and can_copy: + data['can_copy_without_user_input'] = False + data.update(messages) return Response(data) def post(self, request, *args, **kwargs): diff --git a/awx/main/access.py b/awx/main/access.py index 0696d10970..75b53d2527 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -1537,22 +1537,28 @@ class WorkflowJobTemplateAccess(BaseAccess): def can_copy(self, obj): if self.save_messages: - wfjt_errors = {} + missing_ujt = [] + missing_credentials = [] + missing_inventories = [] qs = obj.workflow_job_template_nodes qs.select_related('unified_job_template', 'inventory', 'credential') for node in qs.all(): node_errors = {} if node.inventory and self.user not in node.inventory.use_role: - node_errors['inventory'] = 'Prompted inventory %s can not be copied.' % node.inventory.name + missing_inventories.append(node.inventory.name) if node.credential and self.user not in node.credential.use_role: - node_errors['credential'] = 'Prompted credential %s can not be copied.' % node.credential.name + missing_credentials.append(node.credential.name) ujt = node.unified_job_template if ujt and not self.user.can_access(UnifiedJobTemplate, 'start', ujt, validate_license=False): - node_errors['unified_job_template'] = ( - 'Prompted %s %s can not be copied.' % (ujt._meta.verbose_name_raw, ujt.name)) + missing_ujt.append(ujt.name) if node_errors: wfjt_errors[node.id] = node_errors - self.messages.update(wfjt_errors) + if missing_ujt: + self.messages['templates_unable_to_copy'] = missing_ujt + if missing_credentials: + self.messages['credentials_unable_to_copy'] = missing_credentials + if missing_inventories: + self.messages['inventories_unable_to_copy'] = missing_inventories return self.check_related('organization', Organization, {'reference_obj': obj}, mandatory=True) diff --git a/awx/ui/client/src/templates/list/templates-list.controller.js b/awx/ui/client/src/templates/list/templates-list.controller.js index 820f843852..a71f9573c3 100644 --- a/awx/ui/client/src/templates/list/templates-list.controller.js +++ b/awx/ui/client/src/templates/list/templates-list.controller.js @@ -220,7 +220,7 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', .then(function(result) { if(result.data.can_copy) { - if(!result.data.warnings || _.isEmpty(result.data.warnings)) { + if(result.data.can_copy_without_user_input) { // Go ahead and copy the workflow - the user has full priveleges on all the resources TemplateCopyService.copyWorkflow(template.id) .then(function(result) { @@ -235,16 +235,16 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest', let bodyHtml = `
- You may not have access to all resources used by this workflow. Resources that you don\'t have access to will not be copied and may result in an incomplete workflow. + You do not have access to all resources used by this workflow. Resources that you don\'t have access to will not be copied and will result in an incomplete workflow.
`; // Go and grab all of the warning strings - _.forOwn(result.data.warnings, function(warning) { - if(warning) { - _.forOwn(warning, function(warningString) { - bodyHtml += '
' + warningString + '
'; - }); + _.forOwn(result.data.templates_unable_to_copy, function(ujt) { + if(ujt) { + // _.forOwn(ujts, function(warningString) { + bodyHtml += '
' + ujt + '
'; + // }); } } ); From c452f5fd804db4b2105a33f3234d6c54ec7fe9a9 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 13:21:19 -0500 Subject: [PATCH 41/55] Added more testing --- .../smart-search/queryset.service-test.js | 43 +++++++++++-------- .../smart-search/smart-search.service-test.js | 1 + 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/awx/ui/tests/spec/smart-search/queryset.service-test.js b/awx/ui/tests/spec/smart-search/queryset.service-test.js index b932925171..3d49440920 100644 --- a/awx/ui/tests/spec/smart-search/queryset.service-test.js +++ b/awx/ui/tests/spec/smart-search/queryset.service-test.js @@ -3,7 +3,8 @@ describe('Service: QuerySet', () => { let $httpBackend, QuerySet, - Authorization; + Authorization, + SmartSearchService; beforeEach(angular.mock.module('Tower', ($provide) =>{ // @todo: improve app source / write testing utilities for interim @@ -17,9 +18,10 @@ describe('Service: QuerySet', () => { })); beforeEach(angular.mock.module('RestServices')); - beforeEach(angular.mock.inject((_$httpBackend_, _QuerySet_) => { + beforeEach(angular.mock.inject((_$httpBackend_, _QuerySet_, _SmartSearchService_) => { $httpBackend = _$httpBackend_; QuerySet = _QuerySet_; + SmartSearchService = _SmartSearchService_; // @todo: improve app source // config.js / local_settings emit $http requests in the app's run block @@ -33,24 +35,27 @@ describe('Service: QuerySet', () => { .respond(200, ''); })); - describe('fn encodeQuery', () => { - xit('null/undefined params should return an empty string', () => { - expect(QuerySet.encodeQuery(null)).toEqual(''); - expect(QuerySet.encodeQuery(undefined)).toEqual(''); + describe('fn encodeParam', () => { + it('should encode parameters properly', () =>{ + expect(QuerySet.encodeParam({term: "name:foo", searchTerm: true})).toEqual({"name__icontains_DEFAULT" : "foo"}); + expect(QuerySet.encodeParam({term: "-name:foo", searchTerm: true})).toEqual({"not__name__icontains_DEFAULT" : "foo"}); + expect(QuerySet.encodeParam({term: "name:'foo bar'", searchTerm: true})).toEqual({"name__icontains_DEFAULT" : "'foo bar'"}); + expect(QuerySet.encodeParam({term: "-name:'foo bar'", searchTerm: true})).toEqual({"not__name__icontains_DEFAULT" : "'foo bar'"}); + expect(QuerySet.encodeParam({term: "organization:foo", relatedSearchTerm: true})).toEqual({"organization__search_DEFAULT" : "foo"}); + expect(QuerySet.encodeParam({term: "-organization:foo", relatedSearchTerm: true})).toEqual({"not__organization__search_DEFAULT" : "foo"}); + expect(QuerySet.encodeParam({term: "organization.name:foo", relatedSearchTerm: true})).toEqual({"organization__name" : "foo"}); + expect(QuerySet.encodeParam({term: "-organization.name:foo", relatedSearchTerm: true})).toEqual({"not__organization__name" : "foo"}); + expect(QuerySet.encodeParam({term: "id:11", searchTerm: true})).toEqual({"id__icontains_DEFAULT" : "11"}); + expect(QuerySet.encodeParam({term: "-id:11", searchTerm: true})).toEqual({"not__id__icontains_DEFAULT" : "11"}); + expect(QuerySet.encodeParam({term: "id:>11", searchTerm: true})).toEqual({"id__gt" : "11"}); + expect(QuerySet.encodeParam({term: "-id:>11", searchTerm: true})).toEqual({"not__id__gt" : "11"}); + expect(QuerySet.encodeParam({term: "id:>=11", searchTerm: true})).toEqual({"id__gte" : "11"}); + expect(QuerySet.encodeParam({term: "-id:>=11", searchTerm: true})).toEqual({"not__id__gte" : "11"}); + expect(QuerySet.encodeParam({term: "id:<11", searchTerm: true})).toEqual({"id__lt" : "11"}); + expect(QuerySet.encodeParam({term: "-id:<11", searchTerm: true})).toEqual({"not__id__lt" : "11"}); + expect(QuerySet.encodeParam({term: "id:<=11", searchTerm: true})).toEqual({"id__lte" : "11"}); + expect(QuerySet.encodeParam({term: "-id:<=11", searchTerm: true})).toEqual({"not__id__lte" : "11"}); }); - xit('should encode params to a string', () => { - let params = { - or__created_by: 'Jenkins', - or__modified_by: 'Jenkins', - and__not__status: 'success', - }, - result = '?or__created_by=Jenkins&or__modified_by=Jenkins&and__not__status=success'; - expect(QuerySet.encodeQuery(params)).toEqual(result); - }); - }); - - xdescribe('fn decodeQuery', () => { - }); diff --git a/awx/ui/tests/spec/smart-search/smart-search.service-test.js b/awx/ui/tests/spec/smart-search/smart-search.service-test.js index 679a5656b4..d5c35a08c2 100644 --- a/awx/ui/tests/spec/smart-search/smart-search.service-test.js +++ b/awx/ui/tests/spec/smart-search/smart-search.service-test.js @@ -24,6 +24,7 @@ describe('Service: SmartSearch', () => { expect(SmartSearchService.splitSearchIntoTerms('name:\'foo bar\' description:\'bar foo\'')).toEqual(["name:\'foo bar\'", "description:\'bar foo\'"]); expect(SmartSearchService.splitSearchIntoTerms('name:\'foo bar\' description:\'bar foo\'')).toEqual(["name:\'foo bar\'", "description:\'bar foo\'"]); expect(SmartSearchService.splitSearchIntoTerms('name:\"foo bar\" description:\'bar foo\'')).toEqual(["name:\"foo bar\"", "description:\'bar foo\'"]); + expect(SmartSearchService.splitSearchIntoTerms('name:\"foo bar\" foo')).toEqual(["name:\"foo bar\"", "foo"]); }); }); From eaf883f34992d20c10ab6fd13ed7ada6b51635b0 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Wed, 11 Jan 2017 14:02:17 -0500 Subject: [PATCH 42/55] dem controllers just needed to know who headers is related to #4663 --- awx/ui/client/src/notifications/notificationTemplates.form.js | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/ui/client/src/notifications/notificationTemplates.form.js b/awx/ui/client/src/notifications/notificationTemplates.form.js index 48fcbad9d7..51fd4125d0 100644 --- a/awx/ui/client/src/notifications/notificationTemplates.form.js +++ b/awx/ui/client/src/notifications/notificationTemplates.form.js @@ -323,6 +323,7 @@ export default ['i18n', function(i18n) { headers: { label: i18n._('HTTP Headers'), type: 'textarea', + name: 'headers', rows: 5, 'class': 'Form-formGroup--fullWidth', awRequiredWhen: { From cd61f58b11987e7f44d2ddeacc45ad57816bea4a Mon Sep 17 00:00:00 2001 From: jaredevantabor Date: Tue, 10 Jan 2017 21:12:29 -0800 Subject: [PATCH 43/55] hiding default search param as a search tag in scenario where the user types a search that conflicts w/ the default search params. Ex: searching for kind:gce when kind:ssh is a default search param shouldn't create a search tag for kind:ssh, as someone shouldn't be able to remove that tag...it's a default! --- .../smart-search/smart-search.controller.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index 95f3be3adb..fc9cca9e77 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -23,11 +23,24 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' // Removes state definition defaults and pagination terms function stripDefaultParams(params) { - let stripped =_.pick(params, (value, key) => { + let strippedCopy, stripped =_.pick(params, (value, key) => { // setting the default value of a term to null in a state definition is a very explicit way to ensure it will NEVER generate a search tag, even with a non-default value return defaults[key] !== value && key !== 'order_by' && key !== 'page' && key !== 'page_size' && defaults[key] !== null; }); - return _(stripped).map(qs.decodeParam).flatten().value(); + strippedCopy = _.cloneDeep(stripped); + if(_.keys(_.pick(defaults, _.keys(strippedCopy))).length > 0){ + for (var key in strippedCopy) { + if (strippedCopy.hasOwnProperty(key)) { + let value = strippedCopy[key]; + if(_.isArray(value)){ + let index = _.indexOf(value, defaults[key]); + value = value.splice(index, 1)[0]; + } + } + } + stripped = strippedCopy; + } + return _(strippedCopy).map(qs.decodeParam).flatten().value(); } // searchable relationships From a693aad95da401712efc519fd3b92979aaa46a21 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Wed, 11 Jan 2017 14:22:28 -0500 Subject: [PATCH 44/55] a workable version of the new copy GET schema implemented --- awx/api/views.py | 12 +++--- .../tests/functional/test_rbac_workflow.py | 6 +-- .../list/templates-list.controller.js | 38 +++++++++++++++---- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/awx/api/views.py b/awx/api/views.py index 7e8ea65540..7c22bdf57f 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2907,12 +2907,12 @@ class WorkflowJobTemplateCopy(WorkflowsEnforcementMixin, GenericAPIView): def get(self, request, *args, **kwargs): obj = self.get_object() can_copy, messages = request.user.can_access_with_errors(self.model, 'copy', obj) - data = { - 'can_copy': can_copy, 'can_copy_without_user_input': can_copy, - 'templates_unable_to_copy': [] if can_copy else ['all'], - 'credentials_unable_to_copy': [] if can_copy else ['all'], - 'inventories_unable_to_copy': [] if can_copy else ['all'] - } + data = OrderedDict([ + ('can_copy', can_copy), ('can_copy_without_user_input', can_copy), + ('templates_unable_to_copy', [] if can_copy else ['all']), + ('credentials_unable_to_copy', [] if can_copy else ['all']), + ('inventories_unable_to_copy', [] if can_copy else ['all']) + ]) if messages and can_copy: data['can_copy_without_user_input'] = False data.update(messages) diff --git a/awx/main/tests/functional/test_rbac_workflow.py b/awx/main/tests/functional/test_rbac_workflow.py index a0f0348e38..f2ce04404f 100644 --- a/awx/main/tests/functional/test_rbac_workflow.py +++ b/awx/main/tests/functional/test_rbac_workflow.py @@ -120,13 +120,11 @@ class TestWorkflowJobAccess: access = WorkflowJobTemplateAccess(rando, save_messages=True) assert not access.can_copy(wfjt) warnings = access.messages - assert 1 in warnings - assert 'inventory' in warnings[1] + assert 'inventories_unable_to_copy' in warnings def test_workflow_copy_warnings_jt(self, wfjt, rando, job_template): wfjt.workflow_job_template_nodes.create(unified_job_template=job_template) access = WorkflowJobTemplateAccess(rando, save_messages=True) assert not access.can_copy(wfjt) warnings = access.messages - assert 1 in warnings - assert 'unified_job_template' in warnings[1] + assert 'templates_unable_to_copy' in warnings diff --git a/awx/ui/client/src/templates/list/templates-list.controller.js b/awx/ui/client/src/templates/list/templates-list.controller.js index a71f9573c3..d0b910e6b9 100644 --- a/awx/ui/client/src/templates/list/templates-list.controller.js +++ b/awx/ui/client/src/templates/list/templates-list.controller.js @@ -239,14 +239,36 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'Rest',
`; - // Go and grab all of the warning strings - _.forOwn(result.data.templates_unable_to_copy, function(ujt) { - if(ujt) { - // _.forOwn(ujts, function(warningString) { - bodyHtml += '
' + ujt + '
'; - // }); - } - } ); + // List the unified job templates user can not access + if (result.data.templates_unable_to_copy.length > 0) { + bodyHtml += '
Unified Job Templates that can not be copied
    '; + _.forOwn(result.data.templates_unable_to_copy, function(ujt) { + if(ujt) { + bodyHtml += '
  • ' + ujt + '
  • '; + } + }); + bodyHtml += '
'; + } + // List the prompted inventories user can not access + if (result.data.inventories_unable_to_copy.length > 0) { + bodyHtml += '
Node prompted inventories that can not be copied
    '; + _.forOwn(result.data.inventories_unable_to_copy, function(inv) { + if(inv) { + bodyHtml += '
  • ' + inv + '
  • '; + } + }); + bodyHtml += '
'; + } + // List the prompted credentials user can not access + if (result.data.credentials_unable_to_copy.length > 0) { + bodyHtml += '
Node prompted credentials that can not be copied
    '; + _.forOwn(result.data.credentials_unable_to_copy, function(cred) { + if(cred) { + bodyHtml += '
  • ' + cred + '
  • '; + } + }); + bodyHtml += '
'; + } bodyHtml += '
'; From 33aabfeb4c7416048e52be9aa0688c966272313d Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 14:53:08 -0500 Subject: [PATCH 45/55] Fixed bug where clicking add permission when editing an org would do nothing --- awx/ui/client/src/forms/Inventories.js | 2 +- awx/ui/client/src/forms/Organizations.js | 2 +- awx/ui/client/src/forms/Workflows.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/forms/Inventories.js b/awx/ui/client/src/forms/Inventories.js index b78e16064d..5d96ebfaa5 100644 --- a/awx/ui/client/src/forms/Inventories.js +++ b/awx/ui/client/src/forms/Inventories.js @@ -103,7 +103,7 @@ angular.module('InventoryFormDefinition', ['ScanJobsListDefinition']) add: { label: i18n._('Add'), ngClick: "$state.go('.add')", - awToolTip: 'Add a permission', + awToolTip: i18n._('Add a permission'), actionClass: 'btn List-buttonSubmit', buttonContent: '+ ADD', ngShow: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' diff --git a/awx/ui/client/src/forms/Organizations.js b/awx/ui/client/src/forms/Organizations.js index 011ad90907..b50d7eeb3a 100644 --- a/awx/ui/client/src/forms/Organizations.js +++ b/awx/ui/client/src/forms/Organizations.js @@ -68,7 +68,7 @@ export default searchType: 'select', actions: { add: { - ngClick: "addPermission", + ngClick: "$state.go('.add')", label: i18n._('Add'), awToolTip: i18n._('Add a permission'), actionClass: 'btn List-buttonSubmit', diff --git a/awx/ui/client/src/forms/Workflows.js b/awx/ui/client/src/forms/Workflows.js index e938d42d55..a5a76d0bbd 100644 --- a/awx/ui/client/src/forms/Workflows.js +++ b/awx/ui/client/src/forms/Workflows.js @@ -122,7 +122,7 @@ export default add: { ngClick: "$state.go('.add')", label: i18n._('Add'), - awToolTip: 'Add a permission', + awToolTip: i18n._('Add a permission'), actionClass: 'btn List-buttonSubmit', buttonContent: '+ '+ i18n._('ADD'), ngShow: '(workflow_job_template_obj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate)' From 50fd3d38cb92dcf8b71de9700b3f0c1ad88e8ad8 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 13:57:13 -0500 Subject: [PATCH 46/55] Treat any search string that doesn't start with a matching attribute as a string --- .../client/src/shared/smart-search/smart-search.controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index 2da9648ca1..1ec198c18d 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -145,9 +145,9 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' params = _.merge(params, qs.encodeParam({term: term, searchTerm: true}), combineSameSearches); } } - // Its not a search term or a related search term + // Its not a search term or a related search term - treat it as a string else { - params = _.merge(params, qs.encodeParam({term: term}), combineSameSearches); + params = _.merge(params, setDefaults(term), combineSameSearches); } } From 46491a59e617c7fb9992a620da4e8b02c6d92cf8 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 15:46:52 -0500 Subject: [PATCH 47/55] Removed the use of startsWith from encodeParam. PhantomJS didn't recognize that when the unit tests ran in jenkins. Rather than try to figure out why that might be the case I just changed the line. --- awx/ui/client/src/shared/smart-search/queryset.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/shared/smart-search/queryset.service.js b/awx/ui/client/src/shared/smart-search/queryset.service.js index edb1301b9c..86a2bc2b20 100644 --- a/awx/ui/client/src/shared/smart-search/queryset.service.js +++ b/awx/ui/client/src/shared/smart-search/queryset.service.js @@ -94,7 +94,7 @@ export default ['$q', 'Rest', 'ProcessErrors', '$rootScope', 'Wait', 'DjangoSear let keySplit = paramParts[0].split('.'); let exclude = false; let lessThanGreaterThan = paramParts[1].match(/^(>|<).*$/) ? true : false; - if(keySplit[0].startsWith("-")) { + if(keySplit[0].match(/^-/g)) { exclude = true; keySplit[0] = keySplit[0].replace(/^-/, ''); } From a9f78af3d2491c1d376209331653689aaaa166c2 Mon Sep 17 00:00:00 2001 From: Chris Meyers Date: Wed, 11 Jan 2017 16:29:25 -0500 Subject: [PATCH 48/55] wire up teams into the rbac list directive related to #4675 --- .../rbac-multiselect/rbac-multiselect-list.directive.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/awx/ui/client/src/access/rbac-multiselect/rbac-multiselect-list.directive.js b/awx/ui/client/src/access/rbac-multiselect/rbac-multiselect-list.directive.js index 0e277c3f5f..2f0d790317 100644 --- a/awx/ui/client/src/access/rbac-multiselect/rbac-multiselect-list.directive.js +++ b/awx/ui/client/src/access/rbac-multiselect/rbac-multiselect-list.directive.js @@ -88,6 +88,14 @@ export default ['addPermissionsTeamsList', 'addPermissionsUsersList', 'TemplateL list.fields.first_name.columnClass = 'col-md-3 col-sm-3 hidden-xs'; list.fields.last_name.columnClass = 'col-md-3 col-sm-3 hidden-xs'; break; + case 'Teams': + list.fields = { + name: list.fields.name, + organization: list.fields.organization, + }; + list.fields.name.columnClass = 'col-md-6 col-sm-6 col-xs-11'; + list.fields.organization.columnClass = 'col-md-5 col-sm-5 hidden-xs'; + break; default: list.fields = { name: list.fields.name, From 82f16f0551ad70461d12c2f18fbef05bd4ee7747 Mon Sep 17 00:00:00 2001 From: jaredevantabor Date: Wed, 11 Jan 2017 14:25:08 -0800 Subject: [PATCH 49/55] small change based on PR feedback --- .../client/src/shared/smart-search/smart-search.controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index fc9cca9e77..580a56c6f3 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -23,11 +23,11 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' // Removes state definition defaults and pagination terms function stripDefaultParams(params) { - let strippedCopy, stripped =_.pick(params, (value, key) => { + let stripped =_.pick(params, (value, key) => { // setting the default value of a term to null in a state definition is a very explicit way to ensure it will NEVER generate a search tag, even with a non-default value return defaults[key] !== value && key !== 'order_by' && key !== 'page' && key !== 'page_size' && defaults[key] !== null; }); - strippedCopy = _.cloneDeep(stripped); + let strippedCopy = _.cloneDeep(stripped); if(_.keys(_.pick(defaults, _.keys(strippedCopy))).length > 0){ for (var key in strippedCopy) { if (strippedCopy.hasOwnProperty(key)) { From 83a6b8ba539509f4c03da6d512a5f470b2778558 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 20:43:43 -0500 Subject: [PATCH 50/55] Fixed bug where relaunching a workflow job from the details view was throwing a 404. Also fixed bug where relaunching a workflow from the details view was not redirecting the user to the new details view. --- .../job-submission-factories/launchjob.factory.js | 5 +++-- .../client/src/workflow-results/workflow-results.service.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/awx/ui/client/src/job-submission/job-submission-factories/launchjob.factory.js b/awx/ui/client/src/job-submission/job-submission-factories/launchjob.factory.js index 3c9dbb1c60..64c9344b19 100644 --- a/awx/ui/client/src/job-submission/job-submission-factories/launchjob.factory.js +++ b/awx/ui/client/src/job-submission/job-submission-factories/launchjob.factory.js @@ -120,7 +120,7 @@ export default Rest.post(job_launch_data) .success(function(data) { Wait('stop'); - var job = data.job || data.system_job || data.project_update || data.inventory_update || data.ad_hoc_command || data.workflow_job; + var job = data.job || data.system_job || data.project_update || data.inventory_update || data.ad_hoc_command; if($rootScope.portalMode===false && Empty(data.system_job) || (base === 'home')){ // use $state.go with reload: true option to re-instantiate sockets in @@ -131,7 +131,8 @@ export default if(_.has(data, 'job')) { goToJobDetails('jobDetail'); } - else if(_.has(data, 'workflow_job')) { + else if(data.type && data.type === 'workflow_job') { + job = data.id; goToJobDetails('workflowResults'); } else if(_.has(data, 'ad_hoc_command')) { diff --git a/awx/ui/client/src/workflow-results/workflow-results.service.js b/awx/ui/client/src/workflow-results/workflow-results.service.js index 2d3fddf2f4..601c845eaa 100644 --- a/awx/ui/client/src/workflow-results/workflow-results.service.js +++ b/awx/ui/client/src/workflow-results/workflow-results.service.js @@ -126,7 +126,7 @@ export default ['$q', 'Prompt', '$filter', 'Wait', 'Rest', '$state', 'ProcessErr }, relaunchJob: function(scope) { InitiatePlaybookRun({ scope: scope, id: scope.workflow.id, - relaunch: true, job_type: 'workflow_job_template' }); + relaunch: true, job_type: 'workflow_job' }); } }; return val; From 531bf153300a507bd0122929c8d372db79ad214f Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Wed, 11 Jan 2017 21:12:31 -0500 Subject: [PATCH 51/55] Workflow node border tweaks and a small change to the workflow root in the details view. --- .../workflow-chart.directive.js | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js b/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js index 01b935127a..5a2f0c80cc 100644 --- a/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js +++ b/awx/ui/client/src/templates/workflows/workflow-chart/workflow-chart.directive.js @@ -174,7 +174,20 @@ export default [ '$state','moment', nodeEnter.each(function(d) { let thisNode = d3.select(this); - if(d.isStartNode) { + if(d.isStartNode && scope.mode === 'details') { + // Overwrite the default root height and width and replace it with a small blue square + rootW = 25; + rootH = 25; + thisNode.append("rect") + .attr("width", rootW) + .attr("height", rootH) + .attr("y", 10) + .attr("rx", 5) + .attr("ry", 5) + .attr("fill", "#337ab7") + .attr("class", "WorkflowChart-rootNode"); + } + else if(d.isStartNode && scope.mode !== 'details') { thisNode.append("rect") .attr("width", rootW) .attr("height", rootH) @@ -190,7 +203,6 @@ export default [ '$state','moment', .attr("dy", ".35em") .attr("class", "WorkflowChart-startText") .text(function () { return "START"; }) - .attr("display", function() { return scope.mode === 'details' ? 'none' : null;}) .call(add_node); } else { @@ -200,15 +212,15 @@ export default [ '$state','moment', .attr("rx", 5) .attr("ry", 5) .attr('stroke', function(d) { - if(d.edgeType) { - if(d.edgeType === "failure") { - return "#d9534f"; - } - else if(d.edgeType === "success") { + if(d.job && d.job.status) { + if(d.job.status === "successful"){ return "#5cb85c"; } - else if(d.edgeType === "always"){ - return "#337ab7"; + else if (d.job.status === "failed" || d.job.status === "error" || d.job.status === "cancelled") { + return "#d9534f"; + } + else { + return "#D7D7D7"; } } else { @@ -593,15 +605,15 @@ export default [ '$state','moment', t.selectAll(".rect") .attr('stroke', function(d) { - if(d.edgeType) { - if(d.edgeType === "failure") { - return "#d9534f"; - } - else if(d.edgeType === "success") { + if(d.job && d.job.status) { + if(d.job.status === "successful"){ return "#5cb85c"; } - else if(d.edgeType === "always"){ - return "#337ab7"; + else if (d.job.status === "failed" || d.job.status === "error" || d.job.status === "cancelled") { + return "#d9534f"; + } + else { + return "#D7D7D7"; } } else { From 18fcfee96de8c9fa873a6f65ca2000e61013cbaf Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Thu, 12 Jan 2017 10:38:40 -0500 Subject: [PATCH 52/55] Fixed a few search related bugs based on PR review feedback --- awx/ui/client/src/shared/form-generator.js | 6 +++--- .../src/shared/smart-search/smart-search.controller.js | 9 ++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/awx/ui/client/src/shared/form-generator.js b/awx/ui/client/src/shared/form-generator.js index 63146ce890..e9d6597001 100644 --- a/awx/ui/client/src/shared/form-generator.js +++ b/awx/ui/client/src/shared/form-generator.js @@ -1830,7 +1830,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat // smart-search directive html += `
+ ng-hide="${itm}.length === 0 && (searchTags | isEmpty)"> + ng-show="${itm}.length === 0 && !(searchTags | isEmpty)">
No records matched your search.
@@ -1865,7 +1865,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat // Show the "no items" box when loading is done and the user isn't actively searching and there are no results var emptyListText = (collection.emptyListText) ? collection.emptyListText : i18n._("PLEASE ADD ITEMS TO THIS LIST"); html += `
`; - html += `
${emptyListText}
`; + html += `
${emptyListText}
`; html += '
'; html += ` diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index 1ec198c18d..b601813a72 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -85,12 +85,19 @@ export default ['$stateParams', '$scope', '$state', 'QuerySet', 'GetBasePath', ' else { encodeParams.searchTerm = true; } + removed = qs.encodeParam(encodeParams); + } + else { + removed = setDefaults(tagToRemove); } - removed = qs.encodeParam(encodeParams); } _.each(removed, (value, key) => { if (Array.isArray(queryset[key])){ _.remove(queryset[key], (item) => item === value); + // If the array is now empty, remove that key + if(queryset[key].length === 0) { + delete queryset[key]; + } } else { delete queryset[key]; From dfd0885ec3a29310300e296357c8a1c33f261823 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Thu, 12 Jan 2017 12:24:49 -0500 Subject: [PATCH 53/55] new WFJT launch schema and cleanup --- awx/api/serializers.py | 7 ++----- awx/api/views.py | 5 ++++- awx/main/models/workflow.py | 24 ++++++++++++++---------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 66ca32764a..31126da821 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2709,18 +2709,15 @@ class WorkflowJobLaunchSerializer(BaseSerializer): variables_needed_to_start = serializers.ReadOnlyField() survey_enabled = serializers.SerializerMethodField() extra_vars = VerbatimField(required=False, write_only=True) - warnings = serializers.SerializerMethodField() workflow_job_template_data = serializers.SerializerMethodField() class Meta: model = WorkflowJobTemplate - fields = ('can_start_without_user_input', 'extra_vars', 'warnings', + fields = ('can_start_without_user_input', 'extra_vars', 'survey_enabled', 'variables_needed_to_start', + 'node_templates_missing', 'node_prompts_rejected', 'workflow_job_template_data') - def get_warnings(self, obj): - return obj.get_warnings() - def get_survey_enabled(self, obj): if obj: return obj.survey_enabled and 'spec' in obj.survey_spec diff --git a/awx/api/views.py b/awx/api/views.py index 7c22bdf57f..965078727a 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2946,7 +2946,10 @@ class WorkflowJobTemplateLaunch(WorkflowsEnforcementMixin, RetrieveAPIView): always_allow_superuser = False def update_raw_data(self, data): - obj = self.get_object() + try: + obj = self.get_object() + except PermissionDenied: + return data extra_vars = data.pop('extra_vars', None) or {} if obj: for v in obj.variables_needed_to_start: diff --git a/awx/main/models/workflow.py b/awx/main/models/workflow.py index 09870cbc18..a92fbd5560 100644 --- a/awx/main/models/workflow.py +++ b/awx/main/models/workflow.py @@ -134,7 +134,7 @@ class WorkflowNodeBase(CreatedModifiedModel): scan_errors = ujt_obj._extra_job_type_errors(accepted_fields) ignored_dict.update(scan_errors) for fd in ['inventory', 'credential']: - if getattr(ujt_obj, fd) is None and not (ask_for_vars_dict.get(fd, False) and fd in prompts_dict): + if getattr(ujt_obj, "{}_id".format(fd)) is None and not (ask_for_vars_dict.get(fd, False) and fd in prompts_dict): missing_dict[fd] = 'Job Template does not have this field and workflow node does not provide it' data = {} @@ -421,18 +421,22 @@ class WorkflowJobTemplate(UnifiedJobTemplate, WorkflowJobOptions, SurveyJobTempl def can_start_without_user_input(self): '''Return whether WFJT can be launched without survey passwords.''' - return not bool(self.variables_needed_to_start) + return not bool( + self.variables_needed_to_start or + self.node_templates_missing() or + self.node_prompts_rejected()) - def get_warnings(self): - warning_data = {} - for node in self.workflow_job_template_nodes.all(): - if node.unified_job_template is None: - warning_data[node.pk] = 'Node is missing a linked unified_job_template' - continue + def node_templates_missing(self): + return [node.pk for node in self.workflow_job_template_nodes.filter( + unified_job_template__isnull=True).all()] + + def node_prompts_rejected(self): + node_list = [] + for node in self.workflow_job_template_nodes.select_related('unified_job_template').all(): node_prompts_warnings = node.get_prompts_warnings() if node_prompts_warnings: - warning_data[node.pk] = node_prompts_warnings - return warning_data + node_list.append(node.pk) + return node_list def user_copy(self, user): new_wfjt = self.copy_unified_jt() From 4b16d12d48822f3b63e3934fe158b5bbcd707ce3 Mon Sep 17 00:00:00 2001 From: Michael Abashian Date: Thu, 12 Jan 2017 14:41:29 -0500 Subject: [PATCH 54/55] Fixed bug where organization with a & in it was causing failed api requests --- awx/ui/client/src/shared/directives.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/shared/directives.js b/awx/ui/client/src/shared/directives.js index 55278c5ab9..f2e2b1d58d 100644 --- a/awx/ui/client/src/shared/directives.js +++ b/awx/ui/client/src/shared/directives.js @@ -484,7 +484,7 @@ angular.module('AWDirectives', ['RestServices', 'Utilities', 'JobsHelper']) function applyValidation(viewValue) { basePath = GetBasePath(elm.attr('data-basePath')) || elm.attr('data-basePath'); query = elm.attr('data-query'); - query = query.replace(/\:value/, encodeURI(viewValue)); + query = query.replace(/\:value/, encodeURIComponent(viewValue)); Rest.setUrl(`${basePath}${query}`); // https://github.com/ansible/ansible-tower/issues/3549 // capturing both success/failure conditions in .then() promise From 0d4d872a769b6b8732a35494f74696a13e394759 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Thu, 12 Jan 2017 15:14:55 -0500 Subject: [PATCH 55/55] Import translation files --- awx/locale/en-us/LC_MESSAGES/django.po | 3637 ++++++++++++++ awx/locale/fr/LC_MESSAGES/ansible-tower-ui.po | 2963 ++++++++++++ awx/locale/fr/LC_MESSAGES/django.po | 4303 +++++++++++++++++ awx/locale/ja/LC_MESSAGES/ansible-tower-ui.po | 2803 +++++++++++ awx/locale/ja/LC_MESSAGES/django.po | 3984 +++++++++++++++ 5 files changed, 17690 insertions(+) create mode 100644 awx/locale/en-us/LC_MESSAGES/django.po create mode 100644 awx/locale/fr/LC_MESSAGES/ansible-tower-ui.po create mode 100644 awx/locale/fr/LC_MESSAGES/django.po create mode 100644 awx/locale/ja/LC_MESSAGES/ansible-tower-ui.po create mode 100644 awx/locale/ja/LC_MESSAGES/django.po diff --git a/awx/locale/en-us/LC_MESSAGES/django.po b/awx/locale/en-us/LC_MESSAGES/django.po new file mode 100644 index 0000000000..99aef1ef20 --- /dev/null +++ b/awx/locale/en-us/LC_MESSAGES/django.po @@ -0,0 +1,3637 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-14 21:27+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api/authentication.py:67 +msgid "Invalid token header. No credentials provided." +msgstr "" + +#: api/authentication.py:70 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "" + +#: api/authentication.py:105 +msgid "User inactive or deleted" +msgstr "" + +#: api/authentication.py:161 +msgid "Invalid task token" +msgstr "" + +#: api/conf.py:12 +msgid "Idle Time Force Log Out" +msgstr "" + +#: api/conf.py:13 +msgid "" +"Number of seconds that a user is inactive before they will need to login " +"again." +msgstr "" + +#: api/conf.py:14 api/conf.py:24 api/conf.py:33 sso/conf.py:124 +#: sso/conf.py:135 sso/conf.py:147 sso/conf.py:162 +msgid "Authentication" +msgstr "" + +#: api/conf.py:22 +msgid "Maximum number of simultaneous logins" +msgstr "" + +#: api/conf.py:23 +msgid "" +"Maximum number of simultaneous logins a user may have. To disable enter -1." +msgstr "" + +#: api/conf.py:31 +msgid "Enable HTTP Basic Auth" +msgstr "" + +#: api/conf.py:32 +msgid "Enable HTTP Basic Auth for the API Browser." +msgstr "" + +#: api/generics.py:446 +msgid "\"id\" is required to disassociate" +msgstr "" + +#: api/metadata.py:50 +msgid "Database ID for this {}." +msgstr "" + +#: api/metadata.py:51 +msgid "Name of this {}." +msgstr "" + +#: api/metadata.py:52 +msgid "Optional description of this {}." +msgstr "" + +#: api/metadata.py:53 +msgid "Data type for this {}." +msgstr "" + +#: api/metadata.py:54 +msgid "URL for this {}." +msgstr "" + +#: api/metadata.py:55 +msgid "Data structure with URLs of related resources." +msgstr "" + +#: api/metadata.py:56 +msgid "Data structure with name/description for related resources." +msgstr "" + +#: api/metadata.py:57 +msgid "Timestamp when this {} was created." +msgstr "" + +#: api/metadata.py:58 +msgid "Timestamp when this {} was last modified." +msgstr "" + +#: api/parsers.py:31 +#, python-format +msgid "JSON parse error - %s" +msgstr "" + +#: api/serializers.py:248 +msgid "Playbook Run" +msgstr "" + +#: api/serializers.py:249 +msgid "Command" +msgstr "" + +#: api/serializers.py:250 +msgid "SCM Update" +msgstr "" + +#: api/serializers.py:251 +msgid "Inventory Sync" +msgstr "" + +#: api/serializers.py:252 +msgid "Management Job" +msgstr "" + +#: api/serializers.py:253 +msgid "Workflow Job" +msgstr "" + +#: api/serializers.py:655 api/serializers.py:713 api/views.py:3914 +#, python-format +msgid "" +"Standard Output too large to display (%(text_size)d bytes), only download " +"supported for sizes over %(supported_size)d bytes" +msgstr "" + +#: api/serializers.py:728 +msgid "Write-only field used to change the password." +msgstr "" + +#: api/serializers.py:730 +msgid "Set if the account is managed by an external service" +msgstr "" + +#: api/serializers.py:754 +msgid "Password required for new User." +msgstr "" + +#: api/serializers.py:838 +#, python-format +msgid "Unable to change %s on user managed by LDAP." +msgstr "" + +#: api/serializers.py:990 +msgid "Organization is missing" +msgstr "" + +#: api/serializers.py:996 +msgid "Array of playbooks available within this project." +msgstr "" + +#: api/serializers.py:1178 +#, python-format +msgid "Invalid port specification: %s" +msgstr "" + +#: api/serializers.py:1206 main/validators.py:192 +msgid "Must be valid JSON or YAML." +msgstr "" + +#: api/serializers.py:1263 +msgid "Invalid group name." +msgstr "" + +#: api/serializers.py:1338 +msgid "" +"Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" +msgstr "" + +#: api/serializers.py:1391 +msgid "If 'source' is 'custom', 'source_script' must be provided." +msgstr "" + +#: api/serializers.py:1395 +msgid "" +"The 'source_script' does not belong to the same organization as the " +"inventory." +msgstr "" + +#: api/serializers.py:1397 +msgid "'source_script' doesn't exist." +msgstr "" + +#: api/serializers.py:1756 +msgid "" +"Write-only field used to add user to owner role. If provided, do not give " +"either team or organization. Only valid for creation." +msgstr "" + +#: api/serializers.py:1761 +msgid "" +"Write-only field used to add team to owner role. If provided, do not give " +"either user or organization. Only valid for creation." +msgstr "" + +#: api/serializers.py:1766 +msgid "" +"Inherit permissions from organization roles. If provided on creation, do not " +"give either user or team." +msgstr "" + +#: api/serializers.py:1782 +msgid "Missing 'user', 'team', or 'organization'." +msgstr "" + +#: api/serializers.py:1795 +msgid "" +"Credential organization must be set and match before assigning to a team" +msgstr "" + +#: api/serializers.py:1887 +msgid "This field is required." +msgstr "" + +#: api/serializers.py:1889 api/serializers.py:1891 +msgid "Playbook not found for project." +msgstr "" + +#: api/serializers.py:1893 +msgid "Must select playbook for project." +msgstr "" + +#: api/serializers.py:1957 main/models/jobs.py:280 +msgid "Scan jobs must be assigned a fixed inventory." +msgstr "" + +#: api/serializers.py:1959 main/models/jobs.py:283 +msgid "Job types 'run' and 'check' must have assigned a project." +msgstr "" + +#: api/serializers.py:1962 +msgid "Survey Enabled cannot be used with scan jobs." +msgstr "" + +#: api/serializers.py:2024 +msgid "Invalid job template." +msgstr "" + +#: api/serializers.py:2109 +msgid "Credential not found or deleted." +msgstr "" + +#: api/serializers.py:2111 +msgid "Job Template Project is missing or undefined." +msgstr "" + +#: api/serializers.py:2113 +msgid "Job Template Inventory is missing or undefined." +msgstr "" + +#: api/serializers.py:2398 +#, python-format +msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." +msgstr "" + +#: api/serializers.py:2403 +msgid "Workflow job template is missing during creation." +msgstr "" + +#: api/serializers.py:2408 +#, python-format +msgid "Cannot nest a %s inside a WorkflowJobTemplate" +msgstr "" + +#: api/serializers.py:2646 +#, python-format +msgid "Job Template '%s' is missing or undefined." +msgstr "" + +#: api/serializers.py:2672 +msgid "Must be a valid JSON or YAML dictionary." +msgstr "" + +#: api/serializers.py:2817 +msgid "" +"Missing required fields for Notification Configuration: notification_type" +msgstr "" + +#: api/serializers.py:2840 +msgid "No values specified for field '{}'" +msgstr "" + +#: api/serializers.py:2845 +msgid "Missing required fields for Notification Configuration: {}." +msgstr "" + +#: api/serializers.py:2848 +msgid "Configuration field '{}' incorrect type, expected {}." +msgstr "" + +#: api/serializers.py:2901 +msgid "Inventory Source must be a cloud resource." +msgstr "" + +#: api/serializers.py:2903 +msgid "Manual Project can not have a schedule set." +msgstr "" + +#: api/serializers.py:2925 +msgid "DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" +msgstr "" + +#: api/serializers.py:2927 +msgid "Multiple DTSTART is not supported." +msgstr "" + +#: api/serializers.py:2929 +msgid "RRULE require in rrule." +msgstr "" + +#: api/serializers.py:2931 +msgid "Multiple RRULE is not supported." +msgstr "" + +#: api/serializers.py:2933 +msgid "INTERVAL required in rrule." +msgstr "" + +#: api/serializers.py:2935 +msgid "TZID is not supported." +msgstr "" + +#: api/serializers.py:2937 +msgid "SECONDLY is not supported." +msgstr "" + +#: api/serializers.py:2939 +msgid "Multiple BYMONTHDAYs not supported." +msgstr "" + +#: api/serializers.py:2941 +msgid "Multiple BYMONTHs not supported." +msgstr "" + +#: api/serializers.py:2943 +msgid "BYDAY with numeric prefix not supported." +msgstr "" + +#: api/serializers.py:2945 +msgid "BYYEARDAY not supported." +msgstr "" + +#: api/serializers.py:2947 +msgid "BYWEEKNO not supported." +msgstr "" + +#: api/serializers.py:2951 +msgid "COUNT > 999 is unsupported." +msgstr "" + +#: api/serializers.py:2955 +msgid "rrule parsing failed validation." +msgstr "" + +#: api/serializers.py:2973 +msgid "" +"A summary of the new and changed values when an object is created, updated, " +"or deleted" +msgstr "" + +#: api/serializers.py:2975 +msgid "" +"For create, update, and delete events this is the object type that was " +"affected. For associate and disassociate events this is the object type " +"associated or disassociated with object2." +msgstr "" + +#: api/serializers.py:2978 +msgid "" +"Unpopulated for create, update, and delete events. For associate and " +"disassociate events this is the object type that object1 is being associated " +"with." +msgstr "" + +#: api/serializers.py:2981 +msgid "The action taken with respect to the given object(s)." +msgstr "" + +#: api/serializers.py:3081 +msgid "Unable to login with provided credentials." +msgstr "" + +#: api/serializers.py:3083 +msgid "Must include \"username\" and \"password\"." +msgstr "" + +#: api/views.py:96 +msgid "Your license does not allow use of the activity stream." +msgstr "" + +#: api/views.py:106 +msgid "Your license does not permit use of system tracking." +msgstr "" + +#: api/views.py:116 +msgid "Your license does not allow use of workflows." +msgstr "" + +#: api/views.py:124 templates/rest_framework/api.html:28 +msgid "REST API" +msgstr "" + +#: api/views.py:131 templates/rest_framework/api.html:4 +msgid "Ansible Tower REST API" +msgstr "" + +#: api/views.py:147 +msgid "Version 1" +msgstr "" + +#: api/views.py:198 +msgid "Ping" +msgstr "" + +#: api/views.py:227 conf/apps.py:12 +msgid "Configuration" +msgstr "" + +#: api/views.py:280 +msgid "Invalid license data" +msgstr "" + +#: api/views.py:282 +msgid "Missing 'eula_accepted' property" +msgstr "" + +#: api/views.py:286 +msgid "'eula_accepted' value is invalid" +msgstr "" + +#: api/views.py:289 +msgid "'eula_accepted' must be True" +msgstr "" + +#: api/views.py:296 +msgid "Invalid JSON" +msgstr "" + +#: api/views.py:304 +msgid "Invalid License" +msgstr "" + +#: api/views.py:314 +msgid "Invalid license" +msgstr "" + +#: api/views.py:322 +#, python-format +msgid "Failed to remove license (%s)" +msgstr "" + +#: api/views.py:327 +msgid "Dashboard" +msgstr "" + +#: api/views.py:433 +msgid "Dashboard Jobs Graphs" +msgstr "" + +#: api/views.py:469 +#, python-format +msgid "Unknown period \"%s\"" +msgstr "" + +#: api/views.py:483 +msgid "Schedules" +msgstr "" + +#: api/views.py:502 +msgid "Schedule Jobs List" +msgstr "" + +#: api/views.py:711 +msgid "Your Tower license only permits a single organization to exist." +msgstr "" + +#: api/views.py:932 api/views.py:1284 +msgid "Role 'id' field is missing." +msgstr "" + +#: api/views.py:938 api/views.py:4182 +msgid "You cannot assign an Organization role as a child role for a Team." +msgstr "" + +#: api/views.py:942 api/views.py:4196 +msgid "You cannot grant system-level permissions to a team." +msgstr "" + +#: api/views.py:949 api/views.py:4188 +msgid "" +"You cannot grant credential access to a team when the Organization field " +"isn't set, or belongs to a different organization" +msgstr "" + +#: api/views.py:1039 +msgid "Cannot delete project." +msgstr "" + +#: api/views.py:1068 +msgid "Project Schedules" +msgstr "" + +#: api/views.py:1168 api/views.py:2252 api/views.py:3225 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "" + +#: api/views.py:1244 +msgid "Me" +msgstr "" + +#: api/views.py:1288 api/views.py:4137 +msgid "You may not perform any action with your own admin_role." +msgstr "" + +#: api/views.py:1294 api/views.py:4141 +msgid "You may not change the membership of a users admin_role" +msgstr "" + +#: api/views.py:1299 api/views.py:4146 +msgid "" +"You cannot grant credential access to a user not in the credentials' " +"organization" +msgstr "" + +#: api/views.py:1303 api/views.py:4150 +msgid "You cannot grant private credential access to another user" +msgstr "" + +#: api/views.py:1401 +#, python-format +msgid "Cannot change %s." +msgstr "" + +#: api/views.py:1407 +msgid "Cannot delete user." +msgstr "" + +#: api/views.py:1553 +msgid "Cannot delete inventory script." +msgstr "" + +#: api/views.py:1788 +msgid "Fact not found." +msgstr "" + +#: api/views.py:2108 +msgid "Inventory Source List" +msgstr "" + +#: api/views.py:2136 +msgid "Cannot delete inventory source." +msgstr "" + +#: api/views.py:2144 +msgid "Inventory Source Schedules" +msgstr "" + +#: api/views.py:2173 +msgid "Notification Templates can only be assigned when source is one of {}." +msgstr "" + +#: api/views.py:2380 +msgid "Job Template Schedules" +msgstr "" + +#: api/views.py:2399 api/views.py:2409 +msgid "Your license does not allow adding surveys." +msgstr "" + +#: api/views.py:2416 +msgid "'name' missing from survey spec." +msgstr "" + +#: api/views.py:2418 +msgid "'description' missing from survey spec." +msgstr "" + +#: api/views.py:2420 +msgid "'spec' missing from survey spec." +msgstr "" + +#: api/views.py:2422 +msgid "'spec' must be a list of items." +msgstr "" + +#: api/views.py:2424 +msgid "'spec' doesn't contain any items." +msgstr "" + +#: api/views.py:2429 +#, python-format +msgid "Survey question %s is not a json object." +msgstr "" + +#: api/views.py:2431 +#, python-format +msgid "'type' missing from survey question %s." +msgstr "" + +#: api/views.py:2433 +#, python-format +msgid "'question_name' missing from survey question %s." +msgstr "" + +#: api/views.py:2435 +#, python-format +msgid "'variable' missing from survey question %s." +msgstr "" + +#: api/views.py:2437 +#, python-format +msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." +msgstr "" + +#: api/views.py:2442 +#, python-format +msgid "'required' missing from survey question %s." +msgstr "" + +#: api/views.py:2641 +msgid "No matching host could be found!" +msgstr "" + +#: api/views.py:2644 +msgid "Multiple hosts matched the request!" +msgstr "" + +#: api/views.py:2649 +msgid "Cannot start automatically, user input required!" +msgstr "" + +#: api/views.py:2656 +msgid "Host callback job already pending." +msgstr "" + +#: api/views.py:2669 +msgid "Error starting job!" +msgstr "" + +#: api/views.py:2995 +msgid "Workflow Job Template Schedules" +msgstr "" + +#: api/views.py:3131 api/views.py:3853 +msgid "Superuser privileges needed." +msgstr "" + +#: api/views.py:3161 +msgid "System Job Template Schedules" +msgstr "" + +#: api/views.py:3344 +msgid "Job Host Summaries List" +msgstr "" + +#: api/views.py:3386 +msgid "Job Event Children List" +msgstr "" + +#: api/views.py:3395 +msgid "Job Event Hosts List" +msgstr "" + +#: api/views.py:3404 +msgid "Job Events List" +msgstr "" + +#: api/views.py:3436 +msgid "Job Plays List" +msgstr "" + +#: api/views.py:3513 +msgid "Job Play Tasks List" +msgstr "" + +#: api/views.py:3529 +msgid "Job not found." +msgstr "" + +#: api/views.py:3533 +msgid "'event_id' not provided." +msgstr "" + +#: api/views.py:3537 +msgid "Parent event not found." +msgstr "" + +#: api/views.py:3809 +msgid "Ad Hoc Command Events List" +msgstr "" + +#: api/views.py:3963 +#, python-format +msgid "Error generating stdout download file: %s" +msgstr "" + +#: api/views.py:4009 +msgid "Delete not allowed while there are pending notifications" +msgstr "" + +#: api/views.py:4016 +msgid "NotificationTemplate Test" +msgstr "" + +#: api/views.py:4131 +msgid "User 'id' field is missing." +msgstr "" + +#: api/views.py:4174 +msgid "Team 'id' field is missing." +msgstr "" + +#: conf/conf.py:20 +msgid "Bud Frogs" +msgstr "" + +#: conf/conf.py:21 +msgid "Bunny" +msgstr "" + +#: conf/conf.py:22 +msgid "Cheese" +msgstr "" + +#: conf/conf.py:23 +msgid "Daemon" +msgstr "" + +#: conf/conf.py:24 +msgid "Default Cow" +msgstr "" + +#: conf/conf.py:25 +msgid "Dragon" +msgstr "" + +#: conf/conf.py:26 +msgid "Elephant in Snake" +msgstr "" + +#: conf/conf.py:27 +msgid "Elephant" +msgstr "" + +#: conf/conf.py:28 +msgid "Eyes" +msgstr "" + +#: conf/conf.py:29 +msgid "Hello Kitty" +msgstr "" + +#: conf/conf.py:30 +msgid "Kitty" +msgstr "" + +#: conf/conf.py:31 +msgid "Luke Koala" +msgstr "" + +#: conf/conf.py:32 +msgid "Meow" +msgstr "" + +#: conf/conf.py:33 +msgid "Milk" +msgstr "" + +#: conf/conf.py:34 +msgid "Moofasa" +msgstr "" + +#: conf/conf.py:35 +msgid "Moose" +msgstr "" + +#: conf/conf.py:36 +msgid "Ren" +msgstr "" + +#: conf/conf.py:37 +msgid "Sheep" +msgstr "" + +#: conf/conf.py:38 +msgid "Small Cow" +msgstr "" + +#: conf/conf.py:39 +msgid "Stegosaurus" +msgstr "" + +#: conf/conf.py:40 +msgid "Stimpy" +msgstr "" + +#: conf/conf.py:41 +msgid "Super Milker" +msgstr "" + +#: conf/conf.py:42 +msgid "Three Eyes" +msgstr "" + +#: conf/conf.py:43 +msgid "Turkey" +msgstr "" + +#: conf/conf.py:44 +msgid "Turtle" +msgstr "" + +#: conf/conf.py:45 +msgid "Tux" +msgstr "" + +#: conf/conf.py:46 +msgid "Udder" +msgstr "" + +#: conf/conf.py:47 +msgid "Vader Koala" +msgstr "" + +#: conf/conf.py:48 +msgid "Vader" +msgstr "" + +#: conf/conf.py:49 +msgid "WWW" +msgstr "" + +#: conf/conf.py:52 +msgid "Cow Selection" +msgstr "" + +#: conf/conf.py:53 +msgid "Select which cow to use with cowsay when running jobs." +msgstr "" + +#: conf/conf.py:54 conf/conf.py:75 +msgid "Cows" +msgstr "" + +#: conf/conf.py:73 +msgid "Example Read-Only Setting" +msgstr "" + +#: conf/conf.py:74 +msgid "Example setting that cannot be changed." +msgstr "" + +#: conf/conf.py:93 +msgid "Example Setting" +msgstr "" + +#: conf/conf.py:94 +msgid "Example setting which can be different for each user." +msgstr "" + +#: conf/conf.py:95 conf/registry.py:67 conf/views.py:46 +msgid "User" +msgstr "" + +#: conf/fields.py:38 +msgid "Enter a valid URL" +msgstr "" + +#: conf/license.py:19 +msgid "Your Tower license does not allow that." +msgstr "" + +#: conf/management/commands/migrate_to_database_settings.py:41 +msgid "Only show which settings would be commented/migrated." +msgstr "" + +#: conf/management/commands/migrate_to_database_settings.py:48 +msgid "Skip over settings that would raise an error when commenting/migrating." +msgstr "" + +#: conf/management/commands/migrate_to_database_settings.py:55 +msgid "Skip commenting out settings in files." +msgstr "" + +#: conf/management/commands/migrate_to_database_settings.py:61 +msgid "Backup existing settings files with this suffix." +msgstr "" + +#: conf/registry.py:55 +msgid "All" +msgstr "" + +#: conf/registry.py:56 +msgid "Changed" +msgstr "" + +#: conf/registry.py:68 +msgid "User-Defaults" +msgstr "" + +#: conf/views.py:38 +msgid "Setting Categories" +msgstr "" + +#: conf/views.py:61 +msgid "Setting Detail" +msgstr "" + +#: main/access.py:255 +#, python-format +msgid "Bad data found in related field %s." +msgstr "" + +#: main/access.py:296 +msgid "License is missing." +msgstr "" + +#: main/access.py:298 +msgid "License has expired." +msgstr "" + +#: main/access.py:303 +#, python-format +msgid "License count of %s instances has been reached." +msgstr "" + +#: main/access.py:305 +#, python-format +msgid "License count of %s instances has been exceeded." +msgstr "" + +#: main/access.py:307 +msgid "Host count exceeds available instances." +msgstr "" + +#: main/access.py:311 +#, python-format +msgid "Feature %s is not enabled in the active license." +msgstr "" + +#: main/access.py:313 +msgid "Features not found in active license." +msgstr "" + +#: main/access.py:507 main/access.py:574 main/access.py:694 main/access.py:957 +#: main/access.py:1198 main/access.py:1587 +msgid "Resource is being used by running jobs" +msgstr "" + +#: main/access.py:618 +msgid "Unable to change inventory on a host." +msgstr "" + +#: main/access.py:630 main/access.py:675 +msgid "Cannot associate two items from different inventories." +msgstr "" + +#: main/access.py:663 +msgid "Unable to change inventory on a group." +msgstr "" + +#: main/access.py:877 +msgid "Unable to change organization on a team." +msgstr "" + +#: main/access.py:890 +msgid "The {} role cannot be assigned to a team" +msgstr "" + +#: main/access.py:892 +msgid "The admin_role for a User cannot be assigned to a team" +msgstr "" + +#: main/apps.py:9 +msgid "Main" +msgstr "" + +#: main/conf.py:17 +msgid "Enable Activity Stream" +msgstr "" + +#: main/conf.py:18 +msgid "Enable capturing activity for the Tower activity stream." +msgstr "" + +#: main/conf.py:19 main/conf.py:29 main/conf.py:39 main/conf.py:48 +#: main/conf.py:60 main/conf.py:78 main/conf.py:103 +msgid "System" +msgstr "" + +#: main/conf.py:27 +msgid "Enable Activity Stream for Inventory Sync" +msgstr "" + +#: main/conf.py:28 +msgid "" +"Enable capturing activity for the Tower activity stream when running " +"inventory sync." +msgstr "" + +#: main/conf.py:37 +msgid "All Users Visible to Organization Admins" +msgstr "" + +#: main/conf.py:38 +msgid "" +"Controls whether any Organization Admin can view all users, even those not " +"associated with their Organization." +msgstr "" + +#: main/conf.py:46 +msgid "Enable Tower Administrator Alerts" +msgstr "" + +#: main/conf.py:47 +msgid "" +"Allow Tower to email Admin users for system events that may require " +"attention." +msgstr "" + +#: main/conf.py:57 +msgid "Base URL of the Tower host" +msgstr "" + +#: main/conf.py:58 +msgid "" +"This setting is used by services like notifications to render a valid url to " +"the Tower host." +msgstr "" + +#: main/conf.py:67 +msgid "Remote Host Headers" +msgstr "" + +#: main/conf.py:68 +msgid "" +"HTTP headers and meta keys to search to determine remote host name or IP. " +"Add additional items to this list, such as \"HTTP_X_FORWARDED_FOR\", if " +"behind a reverse proxy.\n" +"\n" +"Note: The headers will be searched in order and the first found remote host " +"name or IP will be used.\n" +"\n" +"In the below example 8.8.8.7 would be the chosen IP address.\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" +msgstr "" + +#: main/conf.py:99 +msgid "Tower License" +msgstr "" + +#: main/conf.py:100 +msgid "" +"The license controls which features and functionality are enabled in Tower. " +"Use /api/v1/config/ to update or change the license." +msgstr "" + +#: main/conf.py:110 +msgid "Ansible Modules Allowed for Ad Hoc Jobs" +msgstr "" + +#: main/conf.py:111 +msgid "List of modules allowed to be used by ad-hoc jobs." +msgstr "" + +#: main/conf.py:112 main/conf.py:121 main/conf.py:130 main/conf.py:139 +#: main/conf.py:148 main/conf.py:158 main/conf.py:168 main/conf.py:178 +#: main/conf.py:187 main/conf.py:199 main/conf.py:211 main/conf.py:223 +msgid "Jobs" +msgstr "" + +#: main/conf.py:119 +msgid "Enable job isolation" +msgstr "" + +#: main/conf.py:120 +msgid "" +"Isolates an Ansible job from protected parts of the Tower system to prevent " +"exposing sensitive information." +msgstr "" + +#: main/conf.py:128 +msgid "Job isolation execution path" +msgstr "" + +#: main/conf.py:129 +msgid "" +"Create temporary working directories for isolated jobs in this location." +msgstr "" + +#: main/conf.py:137 +msgid "Paths to hide from isolated jobs" +msgstr "" + +#: main/conf.py:138 +msgid "Additional paths to hide from isolated processes." +msgstr "" + +#: main/conf.py:146 +msgid "Paths to expose to isolated jobs" +msgstr "" + +#: main/conf.py:147 +msgid "" +"Whitelist of paths that would otherwise be hidden to expose to isolated jobs." +msgstr "" + +#: main/conf.py:156 +msgid "Standard Output Maximum Display Size" +msgstr "" + +#: main/conf.py:157 +msgid "" +"Maximum Size of Standard Output in bytes to display before requiring the " +"output be downloaded." +msgstr "" + +#: main/conf.py:166 +msgid "Job Event Standard Output Maximum Display Size" +msgstr "" + +#: main/conf.py:167 +msgid "" +"Maximum Size of Standard Output in bytes to display for a single job or ad " +"hoc command event. `stdout` will end with `
` when truncated." +msgstr "" + +#: main/conf.py:176 +msgid "Maximum Scheduled Jobs" +msgstr "" + +#: main/conf.py:177 +msgid "" +"Maximum number of the same job template that can be waiting to run when " +"launching from a schedule before no more are created." +msgstr "" + +#: main/conf.py:185 +msgid "Ansible Callback Plugins" +msgstr "" + +#: main/conf.py:186 +msgid "" +"List of paths to search for extra callback plugins to be used when running " +"jobs." +msgstr "" + +#: main/conf.py:196 +msgid "Default Job Timeout" +msgstr "" + +#: main/conf.py:197 +msgid "" +"Maximum time to allow jobs to run. Use value of 0 to indicate that no " +"timeout should be imposed. A timeout set on an individual job template will " +"override this." +msgstr "" + +#: main/conf.py:208 +msgid "Default Inventory Update Timeout" +msgstr "" + +#: main/conf.py:209 +msgid "" +"Maximum time to allow inventory updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual inventory " +"source will override this." +msgstr "" + +#: main/conf.py:220 +msgid "Default Project Update Timeout" +msgstr "" + +#: main/conf.py:221 +msgid "" +"Maximum time to allow project updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual project " +"will override this." +msgstr "" + +#: main/conf.py:231 +msgid "Logging Aggregator Receiving Host" +msgstr "" + +#: main/conf.py:232 +msgid "External host maintain a log collector to send logs to" +msgstr "" + +#: main/conf.py:233 main/conf.py:242 main/conf.py:252 main/conf.py:261 +#: main/conf.py:271 main/conf.py:286 main/conf.py:297 main/conf.py:306 +msgid "Logging" +msgstr "" + +#: main/conf.py:240 +msgid "Logging Aggregator Receiving Port" +msgstr "" + +#: main/conf.py:241 +msgid "Port that the log collector is listening on" +msgstr "" + +#: main/conf.py:250 +msgid "Logging Aggregator Type: Logstash, Loggly, Datadog, etc" +msgstr "" + +#: main/conf.py:251 +msgid "The type of log aggregator service to format messages for" +msgstr "" + +#: main/conf.py:259 +msgid "Logging Aggregator Username to Authenticate With" +msgstr "" + +#: main/conf.py:260 +msgid "Username for Logstash or others (basic auth)" +msgstr "" + +#: main/conf.py:269 +msgid "Logging Aggregator Password to Authenticate With" +msgstr "" + +#: main/conf.py:270 +msgid "Password for Logstash or others (basic auth)" +msgstr "" + +#: main/conf.py:278 +msgid "Loggers to send data to the log aggregator from" +msgstr "" + +#: main/conf.py:279 +msgid "" +"List of loggers that will send HTTP logs to the collector, these can include " +"any or all of: \n" +"activity_stream - logs duplicate to records entered in activity stream\n" +"job_events - callback data from Ansible job events\n" +"system_tracking - data generated from scan jobs\n" +"Sending generic Tower logs must be configured through local_settings." +"pyinstead of this mechanism." +msgstr "" + +#: main/conf.py:293 +msgid "" +"Flag denoting to send individual messages for each fact in system tracking" +msgstr "" + +#: main/conf.py:294 +msgid "" +"If not set, the data from system tracking will be sent inside of a single " +"dictionary, but if set, separate requests will be sent for each package, " +"service, etc. that is found in the scan." +msgstr "" + +#: main/conf.py:304 +msgid "Flag denoting whether to use the external logger system" +msgstr "" + +#: main/conf.py:305 +msgid "" +"If not set, only normal settings data will be used to configure loggers." +msgstr "" + +#: main/models/activity_stream.py:22 +msgid "Entity Created" +msgstr "" + +#: main/models/activity_stream.py:23 +msgid "Entity Updated" +msgstr "" + +#: main/models/activity_stream.py:24 +msgid "Entity Deleted" +msgstr "" + +#: main/models/activity_stream.py:25 +msgid "Entity Associated with another Entity" +msgstr "" + +#: main/models/activity_stream.py:26 +msgid "Entity was Disassociated with another Entity" +msgstr "" + +#: main/models/ad_hoc_commands.py:96 +msgid "No valid inventory." +msgstr "" + +#: main/models/ad_hoc_commands.py:103 main/models/jobs.py:163 +msgid "You must provide a machine / SSH credential." +msgstr "" + +#: main/models/ad_hoc_commands.py:114 main/models/ad_hoc_commands.py:122 +msgid "Invalid type for ad hoc command" +msgstr "" + +#: main/models/ad_hoc_commands.py:117 +msgid "Unsupported module for ad hoc commands." +msgstr "" + +#: main/models/ad_hoc_commands.py:125 +#, python-format +msgid "No argument passed to %s module." +msgstr "" + +#: main/models/ad_hoc_commands.py:220 main/models/jobs.py:767 +msgid "Host Failed" +msgstr "" + +#: main/models/ad_hoc_commands.py:221 main/models/jobs.py:768 +msgid "Host OK" +msgstr "" + +#: main/models/ad_hoc_commands.py:222 main/models/jobs.py:771 +msgid "Host Unreachable" +msgstr "" + +#: main/models/ad_hoc_commands.py:227 main/models/jobs.py:770 +msgid "Host Skipped" +msgstr "" + +#: main/models/ad_hoc_commands.py:237 main/models/jobs.py:798 +msgid "Debug" +msgstr "" + +#: main/models/ad_hoc_commands.py:238 main/models/jobs.py:799 +msgid "Verbose" +msgstr "" + +#: main/models/ad_hoc_commands.py:239 main/models/jobs.py:800 +msgid "Deprecated" +msgstr "" + +#: main/models/ad_hoc_commands.py:240 main/models/jobs.py:801 +msgid "Warning" +msgstr "" + +#: main/models/ad_hoc_commands.py:241 main/models/jobs.py:802 +msgid "System Warning" +msgstr "" + +#: main/models/ad_hoc_commands.py:242 main/models/jobs.py:803 +#: main/models/unified_jobs.py:62 +msgid "Error" +msgstr "" + +#: main/models/base.py:45 main/models/base.py:51 main/models/base.py:56 +msgid "Run" +msgstr "" + +#: main/models/base.py:46 main/models/base.py:52 main/models/base.py:57 +msgid "Check" +msgstr "" + +#: main/models/base.py:47 +msgid "Scan" +msgstr "" + +#: main/models/base.py:61 +msgid "Read Inventory" +msgstr "" + +#: main/models/base.py:62 +msgid "Edit Inventory" +msgstr "" + +#: main/models/base.py:63 +msgid "Administrate Inventory" +msgstr "" + +#: main/models/base.py:64 +msgid "Deploy To Inventory" +msgstr "" + +#: main/models/base.py:65 +msgid "Deploy To Inventory (Dry Run)" +msgstr "" + +#: main/models/base.py:66 +msgid "Scan an Inventory" +msgstr "" + +#: main/models/base.py:67 +msgid "Create a Job Template" +msgstr "" + +#: main/models/credential.py:33 +msgid "Machine" +msgstr "" + +#: main/models/credential.py:34 +msgid "Network" +msgstr "" + +#: main/models/credential.py:35 +msgid "Source Control" +msgstr "" + +#: main/models/credential.py:36 +msgid "Amazon Web Services" +msgstr "" + +#: main/models/credential.py:37 +msgid "Rackspace" +msgstr "" + +#: main/models/credential.py:38 main/models/inventory.py:713 +msgid "VMware vCenter" +msgstr "" + +#: main/models/credential.py:39 main/models/inventory.py:714 +msgid "Red Hat Satellite 6" +msgstr "" + +#: main/models/credential.py:40 main/models/inventory.py:715 +msgid "Red Hat CloudForms" +msgstr "" + +#: main/models/credential.py:41 main/models/inventory.py:710 +msgid "Google Compute Engine" +msgstr "" + +#: main/models/credential.py:42 main/models/inventory.py:711 +msgid "Microsoft Azure Classic (deprecated)" +msgstr "" + +#: main/models/credential.py:43 main/models/inventory.py:712 +msgid "Microsoft Azure Resource Manager" +msgstr "" + +#: main/models/credential.py:44 main/models/inventory.py:716 +msgid "OpenStack" +msgstr "" + +#: main/models/credential.py:48 +msgid "None" +msgstr "" + +#: main/models/credential.py:49 +msgid "Sudo" +msgstr "" + +#: main/models/credential.py:50 +msgid "Su" +msgstr "" + +#: main/models/credential.py:51 +msgid "Pbrun" +msgstr "" + +#: main/models/credential.py:52 +msgid "Pfexec" +msgstr "" + +#: main/models/credential.py:101 +msgid "Host" +msgstr "" + +#: main/models/credential.py:102 +msgid "The hostname or IP address to use." +msgstr "" + +#: main/models/credential.py:108 +msgid "Username" +msgstr "" + +#: main/models/credential.py:109 +msgid "Username for this credential." +msgstr "" + +#: main/models/credential.py:115 +msgid "Password" +msgstr "" + +#: main/models/credential.py:116 +msgid "" +"Password for this credential (or \"ASK\" to prompt the user for machine " +"credentials)." +msgstr "" + +#: main/models/credential.py:123 +msgid "Security Token" +msgstr "" + +#: main/models/credential.py:124 +msgid "Security Token for this credential" +msgstr "" + +#: main/models/credential.py:130 +msgid "Project" +msgstr "" + +#: main/models/credential.py:131 +msgid "The identifier for the project." +msgstr "" + +#: main/models/credential.py:137 +msgid "Domain" +msgstr "" + +#: main/models/credential.py:138 +msgid "The identifier for the domain." +msgstr "" + +#: main/models/credential.py:143 +msgid "SSH private key" +msgstr "" + +#: main/models/credential.py:144 +msgid "RSA or DSA private key to be used instead of password." +msgstr "" + +#: main/models/credential.py:150 +msgid "SSH key unlock" +msgstr "" + +#: main/models/credential.py:151 +msgid "" +"Passphrase to unlock SSH private key if encrypted (or \"ASK\" to prompt the " +"user for machine credentials)." +msgstr "" + +#: main/models/credential.py:159 +msgid "Privilege escalation method." +msgstr "" + +#: main/models/credential.py:165 +msgid "Privilege escalation username." +msgstr "" + +#: main/models/credential.py:171 +msgid "Password for privilege escalation method." +msgstr "" + +#: main/models/credential.py:177 +msgid "Vault password (or \"ASK\" to prompt the user)." +msgstr "" + +#: main/models/credential.py:181 +msgid "Whether to use the authorize mechanism." +msgstr "" + +#: main/models/credential.py:187 +msgid "Password used by the authorize mechanism." +msgstr "" + +#: main/models/credential.py:193 +msgid "Client Id or Application Id for the credential" +msgstr "" + +#: main/models/credential.py:199 +msgid "Secret Token for this credential" +msgstr "" + +#: main/models/credential.py:205 +msgid "Subscription identifier for this credential" +msgstr "" + +#: main/models/credential.py:211 +msgid "Tenant identifier for this credential" +msgstr "" + +#: main/models/credential.py:281 +msgid "Host required for VMware credential." +msgstr "" + +#: main/models/credential.py:283 +msgid "Host required for OpenStack credential." +msgstr "" + +#: main/models/credential.py:292 +msgid "Access key required for AWS credential." +msgstr "" + +#: main/models/credential.py:294 +msgid "Username required for Rackspace credential." +msgstr "" + +#: main/models/credential.py:297 +msgid "Username required for VMware credential." +msgstr "" + +#: main/models/credential.py:299 +msgid "Username required for OpenStack credential." +msgstr "" + +#: main/models/credential.py:305 +msgid "Secret key required for AWS credential." +msgstr "" + +#: main/models/credential.py:307 +msgid "API key required for Rackspace credential." +msgstr "" + +#: main/models/credential.py:309 +msgid "Password required for VMware credential." +msgstr "" + +#: main/models/credential.py:311 +msgid "Password or API key required for OpenStack credential." +msgstr "" + +#: main/models/credential.py:317 +msgid "Project name required for OpenStack credential." +msgstr "" + +#: main/models/credential.py:344 +msgid "SSH key unlock must be set when SSH key is encrypted." +msgstr "" + +#: main/models/credential.py:350 +msgid "Credential cannot be assigned to both a user and team." +msgstr "" + +#: main/models/fact.py:21 +msgid "Host for the facts that the fact scan captured." +msgstr "" + +#: main/models/fact.py:26 +msgid "Date and time of the corresponding fact scan gathering time." +msgstr "" + +#: main/models/fact.py:29 +msgid "" +"Arbitrary JSON structure of module facts captured at timestamp for a single " +"host." +msgstr "" + +#: main/models/inventory.py:45 +msgid "inventories" +msgstr "" + +#: main/models/inventory.py:52 +msgid "Organization containing this inventory." +msgstr "" + +#: main/models/inventory.py:58 +msgid "Inventory variables in JSON or YAML format." +msgstr "" + +#: main/models/inventory.py:63 +msgid "Flag indicating whether any hosts in this inventory have failed." +msgstr "" + +#: main/models/inventory.py:68 +msgid "Total number of hosts in this inventory." +msgstr "" + +#: main/models/inventory.py:73 +msgid "Number of hosts in this inventory with active failures." +msgstr "" + +#: main/models/inventory.py:78 +msgid "Total number of groups in this inventory." +msgstr "" + +#: main/models/inventory.py:83 +msgid "Number of groups in this inventory with active failures." +msgstr "" + +#: main/models/inventory.py:88 +msgid "" +"Flag indicating whether this inventory has any external inventory sources." +msgstr "" + +#: main/models/inventory.py:93 +msgid "" +"Total number of external inventory sources configured within this inventory." +msgstr "" + +#: main/models/inventory.py:98 +msgid "Number of external inventory sources in this inventory with failures." +msgstr "" + +#: main/models/inventory.py:339 +msgid "Is this host online and available for running jobs?" +msgstr "" + +#: main/models/inventory.py:345 +msgid "" +"The value used by the remote inventory source to uniquely identify the host" +msgstr "" + +#: main/models/inventory.py:350 +msgid "Host variables in JSON or YAML format." +msgstr "" + +#: main/models/inventory.py:372 +msgid "Flag indicating whether the last job failed for this host." +msgstr "" + +#: main/models/inventory.py:377 +msgid "" +"Flag indicating whether this host was created/updated from any external " +"inventory sources." +msgstr "" + +#: main/models/inventory.py:383 +msgid "Inventory source(s) that created or modified this host." +msgstr "" + +#: main/models/inventory.py:474 +msgid "Group variables in JSON or YAML format." +msgstr "" + +#: main/models/inventory.py:480 +msgid "Hosts associated directly with this group." +msgstr "" + +#: main/models/inventory.py:485 +msgid "Total number of hosts directly or indirectly in this group." +msgstr "" + +#: main/models/inventory.py:490 +msgid "Flag indicating whether this group has any hosts with active failures." +msgstr "" + +#: main/models/inventory.py:495 +msgid "Number of hosts in this group with active failures." +msgstr "" + +#: main/models/inventory.py:500 +msgid "Total number of child groups contained within this group." +msgstr "" + +#: main/models/inventory.py:505 +msgid "Number of child groups within this group that have active failures." +msgstr "" + +#: main/models/inventory.py:510 +msgid "" +"Flag indicating whether this group was created/updated from any external " +"inventory sources." +msgstr "" + +#: main/models/inventory.py:516 +msgid "Inventory source(s) that created or modified this group." +msgstr "" + +#: main/models/inventory.py:706 main/models/projects.py:42 +#: main/models/unified_jobs.py:386 +msgid "Manual" +msgstr "" + +#: main/models/inventory.py:707 +msgid "Local File, Directory or Script" +msgstr "" + +#: main/models/inventory.py:708 +msgid "Rackspace Cloud Servers" +msgstr "" + +#: main/models/inventory.py:709 +msgid "Amazon EC2" +msgstr "" + +#: main/models/inventory.py:717 +msgid "Custom Script" +msgstr "" + +#: main/models/inventory.py:828 +msgid "Inventory source variables in YAML or JSON format." +msgstr "" + +#: main/models/inventory.py:847 +msgid "" +"Comma-separated list of filter expressions (EC2 only). Hosts are imported " +"when ANY of the filters match." +msgstr "" + +#: main/models/inventory.py:853 +msgid "Limit groups automatically created from inventory source (EC2 only)." +msgstr "" + +#: main/models/inventory.py:857 +msgid "Overwrite local groups and hosts from remote inventory source." +msgstr "" + +#: main/models/inventory.py:861 +msgid "Overwrite local variables from remote inventory source." +msgstr "" + +#: main/models/inventory.py:893 +msgid "Availability Zone" +msgstr "" + +#: main/models/inventory.py:894 +msgid "Image ID" +msgstr "" + +#: main/models/inventory.py:895 +msgid "Instance ID" +msgstr "" + +#: main/models/inventory.py:896 +msgid "Instance Type" +msgstr "" + +#: main/models/inventory.py:897 +msgid "Key Name" +msgstr "" + +#: main/models/inventory.py:898 +msgid "Region" +msgstr "" + +#: main/models/inventory.py:899 +msgid "Security Group" +msgstr "" + +#: main/models/inventory.py:900 +msgid "Tags" +msgstr "" + +#: main/models/inventory.py:901 +msgid "VPC ID" +msgstr "" + +#: main/models/inventory.py:902 +msgid "Tag None" +msgstr "" + +#: main/models/inventory.py:973 +#, python-format +msgid "" +"Cloud-based inventory sources (such as %s) require credentials for the " +"matching cloud service." +msgstr "" + +#: main/models/inventory.py:980 +msgid "Credential is required for a cloud source." +msgstr "" + +#: main/models/inventory.py:1005 +#, python-format +msgid "Invalid %(source)s region%(plural)s: %(region)s" +msgstr "" + +#: main/models/inventory.py:1031 +#, python-format +msgid "Invalid filter expression%(plural)s: %(filter)s" +msgstr "" + +#: main/models/inventory.py:1050 +#, python-format +msgid "Invalid group by choice%(plural)s: %(choice)s" +msgstr "" + +#: main/models/inventory.py:1198 +#, python-format +msgid "" +"Unable to configure this item for cloud sync. It is already managed by %s." +msgstr "" + +#: main/models/inventory.py:1293 +msgid "Inventory script contents" +msgstr "" + +#: main/models/inventory.py:1298 +msgid "Organization owning this inventory script" +msgstr "" + +#: main/models/jobs.py:171 +msgid "You must provide a network credential." +msgstr "" + +#: main/models/jobs.py:179 +msgid "" +"Must provide a credential for a cloud provider, such as Amazon Web Services " +"or Rackspace." +msgstr "" + +#: main/models/jobs.py:271 +msgid "Job Template must provide 'inventory' or allow prompting for it." +msgstr "" + +#: main/models/jobs.py:275 +msgid "Job Template must provide 'credential' or allow prompting for it." +msgstr "" + +#: main/models/jobs.py:364 +msgid "Cannot override job_type to or from a scan job." +msgstr "" + +#: main/models/jobs.py:367 +msgid "Inventory cannot be changed at runtime for scan jobs." +msgstr "" + +#: main/models/jobs.py:433 main/models/projects.py:243 +msgid "SCM Revision" +msgstr "" + +#: main/models/jobs.py:434 +msgid "The SCM Revision from the Project used for this job, if available" +msgstr "" + +#: main/models/jobs.py:442 +msgid "" +"The SCM Refresh task used to make sure the playbooks were available for the " +"job run" +msgstr "" + +#: main/models/jobs.py:666 +msgid "job host summaries" +msgstr "" + +#: main/models/jobs.py:769 +msgid "Host Failure" +msgstr "" + +#: main/models/jobs.py:772 main/models/jobs.py:786 +msgid "No Hosts Remaining" +msgstr "" + +#: main/models/jobs.py:773 +msgid "Host Polling" +msgstr "" + +#: main/models/jobs.py:774 +msgid "Host Async OK" +msgstr "" + +#: main/models/jobs.py:775 +msgid "Host Async Failure" +msgstr "" + +#: main/models/jobs.py:776 +msgid "Item OK" +msgstr "" + +#: main/models/jobs.py:777 +msgid "Item Failed" +msgstr "" + +#: main/models/jobs.py:778 +msgid "Item Skipped" +msgstr "" + +#: main/models/jobs.py:779 +msgid "Host Retry" +msgstr "" + +#: main/models/jobs.py:781 +msgid "File Difference" +msgstr "" + +#: main/models/jobs.py:782 +msgid "Playbook Started" +msgstr "" + +#: main/models/jobs.py:783 +msgid "Running Handlers" +msgstr "" + +#: main/models/jobs.py:784 +msgid "Including File" +msgstr "" + +#: main/models/jobs.py:785 +msgid "No Hosts Matched" +msgstr "" + +#: main/models/jobs.py:787 +msgid "Task Started" +msgstr "" + +#: main/models/jobs.py:789 +msgid "Variables Prompted" +msgstr "" + +#: main/models/jobs.py:790 +msgid "Gathering Facts" +msgstr "" + +#: main/models/jobs.py:791 +msgid "internal: on Import for Host" +msgstr "" + +#: main/models/jobs.py:792 +msgid "internal: on Not Import for Host" +msgstr "" + +#: main/models/jobs.py:793 +msgid "Play Started" +msgstr "" + +#: main/models/jobs.py:794 +msgid "Playbook Complete" +msgstr "" + +#: main/models/jobs.py:1240 +msgid "Remove jobs older than a certain number of days" +msgstr "" + +#: main/models/jobs.py:1241 +msgid "Remove activity stream entries older than a certain number of days" +msgstr "" + +#: main/models/jobs.py:1242 +msgid "Purge and/or reduce the granularity of system tracking data" +msgstr "" + +#: main/models/label.py:29 +msgid "Organization this label belongs to." +msgstr "" + +#: main/models/notifications.py:31 +msgid "Email" +msgstr "" + +#: main/models/notifications.py:32 +msgid "Slack" +msgstr "" + +#: main/models/notifications.py:33 +msgid "Twilio" +msgstr "" + +#: main/models/notifications.py:34 +msgid "Pagerduty" +msgstr "" + +#: main/models/notifications.py:35 +msgid "HipChat" +msgstr "" + +#: main/models/notifications.py:36 +msgid "Webhook" +msgstr "" + +#: main/models/notifications.py:37 +msgid "IRC" +msgstr "" + +#: main/models/notifications.py:127 main/models/unified_jobs.py:57 +msgid "Pending" +msgstr "" + +#: main/models/notifications.py:128 main/models/unified_jobs.py:60 +msgid "Successful" +msgstr "" + +#: main/models/notifications.py:129 main/models/unified_jobs.py:61 +msgid "Failed" +msgstr "" + +#: main/models/organization.py:157 +msgid "Execute Commands on the Inventory" +msgstr "" + +#: main/models/organization.py:211 +msgid "Token not invalidated" +msgstr "" + +#: main/models/organization.py:212 +msgid "Token is expired" +msgstr "" + +#: main/models/organization.py:213 +msgid "Maximum per-user sessions reached" +msgstr "" + +#: main/models/organization.py:216 +msgid "Invalid token" +msgstr "" + +#: main/models/organization.py:233 +msgid "Reason the auth token was invalidated." +msgstr "" + +#: main/models/organization.py:272 +msgid "Invalid reason specified" +msgstr "" + +#: main/models/projects.py:43 +msgid "Git" +msgstr "" + +#: main/models/projects.py:44 +msgid "Mercurial" +msgstr "" + +#: main/models/projects.py:45 +msgid "Subversion" +msgstr "" + +#: main/models/projects.py:71 +msgid "" +"Local path (relative to PROJECTS_ROOT) containing playbooks and related " +"files for this project." +msgstr "" + +#: main/models/projects.py:80 +msgid "SCM Type" +msgstr "" + +#: main/models/projects.py:81 +msgid "Specifies the source control system used to store the project." +msgstr "" + +#: main/models/projects.py:87 +msgid "SCM URL" +msgstr "" + +#: main/models/projects.py:88 +msgid "The location where the project is stored." +msgstr "" + +#: main/models/projects.py:94 +msgid "SCM Branch" +msgstr "" + +#: main/models/projects.py:95 +msgid "Specific branch, tag or commit to checkout." +msgstr "" + +#: main/models/projects.py:99 +msgid "Discard any local changes before syncing the project." +msgstr "" + +#: main/models/projects.py:103 +msgid "Delete the project before syncing." +msgstr "" + +#: main/models/projects.py:116 +msgid "The amount of time to run before the task is canceled." +msgstr "" + +#: main/models/projects.py:130 +msgid "Invalid SCM URL." +msgstr "" + +#: main/models/projects.py:133 +msgid "SCM URL is required." +msgstr "" + +#: main/models/projects.py:142 +msgid "Credential kind must be 'scm'." +msgstr "" + +#: main/models/projects.py:157 +msgid "Invalid credential." +msgstr "" + +#: main/models/projects.py:229 +msgid "Update the project when a job is launched that uses the project." +msgstr "" + +#: main/models/projects.py:234 +msgid "" +"The number of seconds after the last project update ran that a newproject " +"update will be launched as a job dependency." +msgstr "" + +#: main/models/projects.py:244 +msgid "The last revision fetched by a project update" +msgstr "" + +#: main/models/projects.py:251 +msgid "Playbook Files" +msgstr "" + +#: main/models/projects.py:252 +msgid "List of playbooks found in the project" +msgstr "" + +#: main/models/rbac.py:122 +msgid "roles" +msgstr "" + +#: main/models/rbac.py:438 +msgid "role_ancestors" +msgstr "" + +#: main/models/schedules.py:69 +msgid "Enables processing of this schedule by Tower." +msgstr "" + +#: main/models/schedules.py:75 +msgid "The first occurrence of the schedule occurs on or after this time." +msgstr "" + +#: main/models/schedules.py:81 +msgid "" +"The last occurrence of the schedule occurs before this time, aftewards the " +"schedule expires." +msgstr "" + +#: main/models/schedules.py:85 +msgid "A value representing the schedules iCal recurrence rule." +msgstr "" + +#: main/models/schedules.py:91 +msgid "The next time that the scheduled action will run." +msgstr "" + +#: main/models/unified_jobs.py:56 +msgid "New" +msgstr "" + +#: main/models/unified_jobs.py:58 +msgid "Waiting" +msgstr "" + +#: main/models/unified_jobs.py:59 +msgid "Running" +msgstr "" + +#: main/models/unified_jobs.py:63 +msgid "Canceled" +msgstr "" + +#: main/models/unified_jobs.py:67 +msgid "Never Updated" +msgstr "" + +#: main/models/unified_jobs.py:71 ui/templates/ui/index.html:85 +#: ui/templates/ui/index.html.py:104 +msgid "OK" +msgstr "" + +#: main/models/unified_jobs.py:72 +msgid "Missing" +msgstr "" + +#: main/models/unified_jobs.py:76 +msgid "No External Source" +msgstr "" + +#: main/models/unified_jobs.py:83 +msgid "Updating" +msgstr "" + +#: main/models/unified_jobs.py:387 +msgid "Relaunch" +msgstr "" + +#: main/models/unified_jobs.py:388 +msgid "Callback" +msgstr "" + +#: main/models/unified_jobs.py:389 +msgid "Scheduled" +msgstr "" + +#: main/models/unified_jobs.py:390 +msgid "Dependency" +msgstr "" + +#: main/models/unified_jobs.py:391 +msgid "Workflow" +msgstr "" + +#: main/models/unified_jobs.py:437 +msgid "The Tower node the job executed on." +msgstr "" + +#: main/models/unified_jobs.py:463 +msgid "The date and time the job was queued for starting." +msgstr "" + +#: main/models/unified_jobs.py:469 +msgid "The date and time the job finished execution." +msgstr "" + +#: main/models/unified_jobs.py:475 +msgid "Elapsed time in seconds that the job ran." +msgstr "" + +#: main/models/unified_jobs.py:497 +msgid "" +"A status field to indicate the state of the job if it wasn't able to run and " +"capture stdout" +msgstr "" + +#: main/notifications/base.py:17 main/notifications/email_backend.py:28 +msgid "" +"{} #{} had status {} on Ansible Tower, view details at {}\n" +"\n" +msgstr "" + +#: main/notifications/hipchat_backend.py:46 +msgid "Error sending messages: {}" +msgstr "" + +#: main/notifications/hipchat_backend.py:48 +msgid "Error sending message to hipchat: {}" +msgstr "" + +#: main/notifications/irc_backend.py:54 +msgid "Exception connecting to irc server: {}" +msgstr "" + +#: main/notifications/pagerduty_backend.py:39 +msgid "Exception connecting to PagerDuty: {}" +msgstr "" + +#: main/notifications/pagerduty_backend.py:48 +#: main/notifications/slack_backend.py:52 +#: main/notifications/twilio_backend.py:46 +msgid "Exception sending messages: {}" +msgstr "" + +#: main/notifications/twilio_backend.py:36 +msgid "Exception connecting to Twilio: {}" +msgstr "" + +#: main/notifications/webhook_backend.py:38 +#: main/notifications/webhook_backend.py:40 +msgid "Error sending notification webhook: {}" +msgstr "" + +#: main/tasks.py:139 +msgid "Ansible Tower host usage over 90%" +msgstr "" + +#: main/tasks.py:144 +msgid "Ansible Tower license will expire soon" +msgstr "" + +#: main/tasks.py:197 +msgid "status_str must be either succeeded or failed" +msgstr "" + +#: main/utils/common.py:88 +#, python-format +msgid "Unable to convert \"%s\" to boolean" +msgstr "" + +#: main/utils/common.py:242 +#, python-format +msgid "Unsupported SCM type \"%s\"" +msgstr "" + +#: main/utils/common.py:249 main/utils/common.py:261 main/utils/common.py:280 +#, python-format +msgid "Invalid %s URL" +msgstr "" + +#: main/utils/common.py:251 main/utils/common.py:289 +#, python-format +msgid "Unsupported %s URL" +msgstr "" + +#: main/utils/common.py:291 +#, python-format +msgid "Unsupported host \"%s\" for file:// URL" +msgstr "" + +#: main/utils/common.py:293 +#, python-format +msgid "Host is required for %s URL" +msgstr "" + +#: main/utils/common.py:311 +#, python-format +msgid "Username must be \"git\" for SSH access to %s." +msgstr "" + +#: main/utils/common.py:317 +#, python-format +msgid "Username must be \"hg\" for SSH access to %s." +msgstr "" + +#: main/validators.py:60 +#, python-format +msgid "Invalid certificate or key: %r..." +msgstr "" + +#: main/validators.py:74 +#, python-format +msgid "Invalid private key: unsupported type \"%s\"" +msgstr "" + +#: main/validators.py:78 +#, python-format +msgid "Unsupported PEM object type: \"%s\"" +msgstr "" + +#: main/validators.py:103 +msgid "Invalid base64-encoded data" +msgstr "" + +#: main/validators.py:122 +msgid "Exactly one private key is required." +msgstr "" + +#: main/validators.py:124 +msgid "At least one private key is required." +msgstr "" + +#: main/validators.py:126 +#, python-format +msgid "" +"At least %(min_keys)d private keys are required, only %(key_count)d provided." +msgstr "" + +#: main/validators.py:129 +#, python-format +msgid "Only one private key is allowed, %(key_count)d provided." +msgstr "" + +#: main/validators.py:131 +#, python-format +msgid "" +"No more than %(max_keys)d private keys are allowed, %(key_count)d provided." +msgstr "" + +#: main/validators.py:136 +msgid "Exactly one certificate is required." +msgstr "" + +#: main/validators.py:138 +msgid "At least one certificate is required." +msgstr "" + +#: main/validators.py:140 +#, python-format +msgid "" +"At least %(min_certs)d certificates are required, only %(cert_count)d " +"provided." +msgstr "" + +#: main/validators.py:143 +#, python-format +msgid "Only one certificate is allowed, %(cert_count)d provided." +msgstr "" + +#: main/validators.py:145 +#, python-format +msgid "" +"No more than %(max_certs)d certificates are allowed, %(cert_count)d provided." +msgstr "" + +#: main/views.py:20 +msgid "API Error" +msgstr "" + +#: main/views.py:49 +msgid "Bad Request" +msgstr "" + +#: main/views.py:50 +msgid "The request could not be understood by the server." +msgstr "" + +#: main/views.py:57 +msgid "Forbidden" +msgstr "" + +#: main/views.py:58 +msgid "You don't have permission to access the requested resource." +msgstr "" + +#: main/views.py:65 +msgid "Not Found" +msgstr "" + +#: main/views.py:66 +msgid "The requested resource could not be found." +msgstr "" + +#: main/views.py:73 +msgid "Server Error" +msgstr "" + +#: main/views.py:74 +msgid "A server error has occurred." +msgstr "" + +#: settings/defaults.py:593 +msgid "Chicago" +msgstr "" + +#: settings/defaults.py:594 +msgid "Dallas/Ft. Worth" +msgstr "" + +#: settings/defaults.py:595 +msgid "Northern Virginia" +msgstr "" + +#: settings/defaults.py:596 +msgid "London" +msgstr "" + +#: settings/defaults.py:597 +msgid "Sydney" +msgstr "" + +#: settings/defaults.py:598 +msgid "Hong Kong" +msgstr "" + +#: settings/defaults.py:625 +msgid "US East (Northern Virginia)" +msgstr "" + +#: settings/defaults.py:626 +msgid "US East (Ohio)" +msgstr "" + +#: settings/defaults.py:627 +msgid "US West (Oregon)" +msgstr "" + +#: settings/defaults.py:628 +msgid "US West (Northern California)" +msgstr "" + +#: settings/defaults.py:629 +msgid "EU (Frankfurt)" +msgstr "" + +#: settings/defaults.py:630 +msgid "EU (Ireland)" +msgstr "" + +#: settings/defaults.py:631 +msgid "Asia Pacific (Singapore)" +msgstr "" + +#: settings/defaults.py:632 +msgid "Asia Pacific (Sydney)" +msgstr "" + +#: settings/defaults.py:633 +msgid "Asia Pacific (Tokyo)" +msgstr "" + +#: settings/defaults.py:634 +msgid "Asia Pacific (Seoul)" +msgstr "" + +#: settings/defaults.py:635 +msgid "Asia Pacific (Mumbai)" +msgstr "" + +#: settings/defaults.py:636 +msgid "South America (Sao Paulo)" +msgstr "" + +#: settings/defaults.py:637 +msgid "US West (GovCloud)" +msgstr "" + +#: settings/defaults.py:638 +msgid "China (Beijing)" +msgstr "" + +#: settings/defaults.py:687 +msgid "US East (B)" +msgstr "" + +#: settings/defaults.py:688 +msgid "US East (C)" +msgstr "" + +#: settings/defaults.py:689 +msgid "US East (D)" +msgstr "" + +#: settings/defaults.py:690 +msgid "US Central (A)" +msgstr "" + +#: settings/defaults.py:691 +msgid "US Central (B)" +msgstr "" + +#: settings/defaults.py:692 +msgid "US Central (C)" +msgstr "" + +#: settings/defaults.py:693 +msgid "US Central (F)" +msgstr "" + +#: settings/defaults.py:694 +msgid "Europe West (B)" +msgstr "" + +#: settings/defaults.py:695 +msgid "Europe West (C)" +msgstr "" + +#: settings/defaults.py:696 +msgid "Europe West (D)" +msgstr "" + +#: settings/defaults.py:697 +msgid "Asia East (A)" +msgstr "" + +#: settings/defaults.py:698 +msgid "Asia East (B)" +msgstr "" + +#: settings/defaults.py:699 +msgid "Asia East (C)" +msgstr "" + +#: settings/defaults.py:723 +msgid "US Central" +msgstr "" + +#: settings/defaults.py:724 +msgid "US East" +msgstr "" + +#: settings/defaults.py:725 +msgid "US East 2" +msgstr "" + +#: settings/defaults.py:726 +msgid "US North Central" +msgstr "" + +#: settings/defaults.py:727 +msgid "US South Central" +msgstr "" + +#: settings/defaults.py:728 +msgid "US West" +msgstr "" + +#: settings/defaults.py:729 +msgid "Europe North" +msgstr "" + +#: settings/defaults.py:730 +msgid "Europe West" +msgstr "" + +#: settings/defaults.py:731 +msgid "Asia Pacific East" +msgstr "" + +#: settings/defaults.py:732 +msgid "Asia Pacific Southeast" +msgstr "" + +#: settings/defaults.py:733 +msgid "Japan East" +msgstr "" + +#: settings/defaults.py:734 +msgid "Japan West" +msgstr "" + +#: settings/defaults.py:735 +msgid "Brazil South" +msgstr "" + +#: sso/apps.py:9 +msgid "Single Sign-On" +msgstr "" + +#: sso/conf.py:27 +msgid "" +"Mapping to organization admins/users from social auth accounts. This " +"setting\n" +"controls which users are placed into which Tower organizations based on\n" +"their username and email address. Dictionary keys are organization names.\n" +"organizations will be created if not present if the license allows for\n" +"multiple organizations, otherwise the single default organization is used\n" +"regardless of the key. Values are dictionaries defining the options for\n" +"each organization's membership. For each organization it is possible to\n" +"specify which users are automatically users of the organization and also\n" +"which users can administer the organization. \n" +"\n" +"- admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated.\n" +" If True, all users using social auth will automatically be added as " +"admins\n" +" of the organization.\n" +" If False, no social auth users will be automatically added as admins of\n" +" the organization.\n" +" If a string or list of strings, specifies the usernames and emails for\n" +" users who will be added to the organization. Strings in the format\n" +" \"//\" will be interpreted as JavaScript regular " +"expressions and\n" +" may also be used instead of string literals; only \"i\" and \"m\" are " +"supported\n" +" for flags.\n" +"- remove_admins: True/False. Defaults to True.\n" +" If True, a user who does not match will be removed from the " +"organization's\n" +" administrative list.\n" +"- users: None, True/False, string or list of strings. Same rules apply as " +"for\n" +" admins.\n" +"- remove_users: True/False. Defaults to True. Same rules as apply for \n" +" remove_admins." +msgstr "" + +#: sso/conf.py:76 +msgid "" +"Mapping of team members (users) from social auth accounts. Keys are team\n" +"names (will be created if not present). Values are dictionaries of options\n" +"for each team's membership, where each can contain the following " +"parameters:\n" +"\n" +"- organization: string. The name of the organization to which the team\n" +" belongs. The team will be created if the combination of organization and\n" +" team name does not exist. The organization will first be created if it\n" +" does not exist. If the license does not allow for multiple " +"organizations,\n" +" the team will always be assigned to the single default organization.\n" +"- users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all social auth users will be added/removed as team\n" +" members.\n" +" If a string or list of strings, specifies expressions used to match " +"users.\n" +" User will be added as a team member if the username or email matches.\n" +" Strings in the format \"//\" will be interpreted as " +"JavaScript\n" +" regular expressions and may also be used instead of string literals; only " +"\"i\"\n" +" and \"m\" are supported for flags.\n" +"- remove: True/False. Defaults to True. If True, a user who does not match\n" +" the rules above will be removed from the team." +msgstr "" + +#: sso/conf.py:119 +msgid "Authentication Backends" +msgstr "" + +#: sso/conf.py:120 +msgid "" +"List of authentication backends that are enabled based on license features " +"and other authentication settings." +msgstr "" + +#: sso/conf.py:133 +msgid "Social Auth Organization Map" +msgstr "" + +#: sso/conf.py:145 +msgid "Social Auth Team Map" +msgstr "" + +#: sso/conf.py:157 +msgid "Social Auth User Fields" +msgstr "" + +#: sso/conf.py:158 +msgid "" +"When set to an empty list `[]`, this setting prevents new user accounts from " +"being created. Only users who have previously logged in using social auth or " +"have a user account with a matching email address will be able to login." +msgstr "" + +#: sso/conf.py:176 +msgid "LDAP Server URI" +msgstr "" + +#: sso/conf.py:177 +msgid "" +"URI to connect to LDAP server, such as \"ldap://ldap.example.com:389\" (non-" +"SSL) or \"ldaps://ldap.example.com:636\" (SSL). Multiple LDAP servers may be " +"specified by separating with spaces or commas. LDAP authentication is " +"disabled if this parameter is empty." +msgstr "" + +#: sso/conf.py:181 sso/conf.py:199 sso/conf.py:211 sso/conf.py:223 +#: sso/conf.py:239 sso/conf.py:258 sso/conf.py:279 sso/conf.py:295 +#: sso/conf.py:314 sso/conf.py:331 sso/conf.py:347 sso/conf.py:362 +#: sso/conf.py:379 sso/conf.py:417 sso/conf.py:458 +msgid "LDAP" +msgstr "" + +#: sso/conf.py:193 +msgid "LDAP Bind DN" +msgstr "" + +#: sso/conf.py:194 +msgid "" +"DN (Distinguished Name) of user to bind for all search queries. Normally in " +"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " +"specified as \"DOMAIN\\username\" for Active Directory. This is the system " +"user account we will use to login to query LDAP for other user information." +msgstr "" + +#: sso/conf.py:209 +msgid "LDAP Bind Password" +msgstr "" + +#: sso/conf.py:210 +msgid "Password used to bind LDAP user account." +msgstr "" + +#: sso/conf.py:221 +msgid "LDAP Start TLS" +msgstr "" + +#: sso/conf.py:222 +msgid "Whether to enable TLS when the LDAP connection is not using SSL." +msgstr "" + +#: sso/conf.py:232 +msgid "LDAP Connection Options" +msgstr "" + +#: sso/conf.py:233 +msgid "" +"Additional options to set for the LDAP connection. LDAP referrals are " +"disabled by default (to prevent certain LDAP queries from hanging with AD). " +"Option names should be strings (e.g. \"OPT_REFERRALS\"). Refer to https://" +"www.python-ldap.org/doc/html/ldap.html#options for possible options and " +"values that can be set." +msgstr "" + +#: sso/conf.py:251 +msgid "LDAP User Search" +msgstr "" + +#: sso/conf.py:252 +msgid "" +"LDAP search query to find users. Any user that matches the given pattern " +"will be able to login to Tower. The user should also be mapped into an " +"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " +"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"possible. See python-ldap documentation as linked at the top of this section." +msgstr "" + +#: sso/conf.py:273 +msgid "LDAP User DN Template" +msgstr "" + +#: sso/conf.py:274 +msgid "" +"Alternative to user search, if user DNs are all of the same format. This " +"approach will be more efficient for user lookups than searching if it is " +"usable in your organizational environment. If this setting has a value it " +"will be used instead of AUTH_LDAP_USER_SEARCH." +msgstr "" + +#: sso/conf.py:289 +msgid "LDAP User Attribute Map" +msgstr "" + +#: sso/conf.py:290 +msgid "" +"Mapping of LDAP user schema to Tower API user attributes (key is user " +"attribute name, value is LDAP attribute name). The default setting is valid " +"for ActiveDirectory but users with other LDAP configurations may need to " +"change the values (not the keys) of the dictionary/hash-table." +msgstr "" + +#: sso/conf.py:309 +msgid "LDAP Group Search" +msgstr "" + +#: sso/conf.py:310 +msgid "" +"Users in Tower are mapped to organizations based on their membership in LDAP " +"groups. This setting defines the LDAP search query to find groups. Note that " +"this, unlike the user search above, does not support LDAPSearchUnion." +msgstr "" + +#: sso/conf.py:327 +msgid "LDAP Group Type" +msgstr "" + +#: sso/conf.py:328 +msgid "" +"The group type may need to be changed based on the type of the LDAP server. " +"Values are listed at: http://pythonhosted.org/django-auth-ldap/groups." +"html#types-of-groups" +msgstr "" + +#: sso/conf.py:342 +msgid "LDAP Require Group" +msgstr "" + +#: sso/conf.py:343 +msgid "" +"Group DN required to login. If specified, user must be a member of this " +"group to login via LDAP. If not set, everyone in LDAP that matches the user " +"search will be able to login via Tower. Only one require group is supported." +msgstr "" + +#: sso/conf.py:358 +msgid "LDAP Deny Group" +msgstr "" + +#: sso/conf.py:359 +msgid "" +"Group DN denied from login. If specified, user will not be allowed to login " +"if a member of this group. Only one deny group is supported." +msgstr "" + +#: sso/conf.py:372 +msgid "LDAP User Flags By Group" +msgstr "" + +#: sso/conf.py:373 +msgid "" +"User profile flags updated from group membership (key is user attribute " +"name, value is group DN). These are boolean fields that are matched based " +"on whether the user is a member of the given group. So far only " +"is_superuser is settable via this method. This flag is set both true and " +"false at login time based on current LDAP settings." +msgstr "" + +#: sso/conf.py:391 +msgid "LDAP Organization Map" +msgstr "" + +#: sso/conf.py:392 +msgid "" +"Mapping between organization admins/users and LDAP groups. This controls " +"what users are placed into what Tower organizations relative to their LDAP " +"group memberships. Keys are organization names. Organizations will be " +"created if not present. Values are dictionaries defining the options for " +"each organization's membership. For each organization it is possible to " +"specify what groups are automatically users of the organization and also " +"what groups can administer the organization.\n" +"\n" +" - admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated based on LDAP values.\n" +" If True, all users in LDAP will automatically be added as admins of the " +"organization.\n" +" If False, no LDAP users will be automatically added as admins of the " +"organization.\n" +" If a string or list of strings, specifies the group DN(s) that will be " +"added of the organization if they match any of the specified groups.\n" +" - remove_admins: True/False. Defaults to True.\n" +" If True, a user who is not an member of the given groups will be removed " +"from the organization's administrative list.\n" +" - users: None, True/False, string or list of strings. Same rules apply as " +"for admins.\n" +" - remove_users: True/False. Defaults to True. Same rules apply as for " +"remove_admins." +msgstr "" + +#: sso/conf.py:440 +msgid "LDAP Team Map" +msgstr "" + +#: sso/conf.py:441 +msgid "" +"Mapping between team members (users) and LDAP groups. Keys are team names " +"(will be created if not present). Values are dictionaries of options for " +"each team's membership, where each can contain the following parameters:\n" +"\n" +" - organization: string. The name of the organization to which the team " +"belongs. The team will be created if the combination of organization and " +"team name does not exist. The organization will first be created if it does " +"not exist.\n" +" - users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all LDAP users will be added/removed as team members.\n" +" If a string or list of strings, specifies the group DN(s). User will be " +"added as a team member if the user is a member of ANY of these groups.\n" +"- remove: True/False. Defaults to True. If True, a user who is not a member " +"of the given groups will be removed from the team." +msgstr "" + +#: sso/conf.py:484 +msgid "RADIUS Server" +msgstr "" + +#: sso/conf.py:485 +msgid "" +"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this " +"setting is empty." +msgstr "" + +#: sso/conf.py:487 sso/conf.py:501 sso/conf.py:513 +msgid "RADIUS" +msgstr "" + +#: sso/conf.py:499 +msgid "RADIUS Port" +msgstr "" + +#: sso/conf.py:500 +msgid "Port of RADIUS server." +msgstr "" + +#: sso/conf.py:511 +msgid "RADIUS Secret" +msgstr "" + +#: sso/conf.py:512 +msgid "Shared secret for authenticating to RADIUS server." +msgstr "" + +#: sso/conf.py:528 +msgid "Google OAuth2 Callback URL" +msgstr "" + +#: sso/conf.py:529 +msgid "" +"Create a project at https://console.developers.google.com/ to obtain an " +"OAuth2 key and secret for a web application. Ensure that the Google+ API is " +"enabled. Provide this URL as the callback URL for your application." +msgstr "" + +#: sso/conf.py:533 sso/conf.py:544 sso/conf.py:555 sso/conf.py:568 +#: sso/conf.py:582 sso/conf.py:594 sso/conf.py:606 +msgid "Google OAuth2" +msgstr "" + +#: sso/conf.py:542 +msgid "Google OAuth2 Key" +msgstr "" + +#: sso/conf.py:543 +msgid "" +"The OAuth2 key from your web application at https://console.developers." +"google.com/." +msgstr "" + +#: sso/conf.py:553 +msgid "Google OAuth2 Secret" +msgstr "" + +#: sso/conf.py:554 +msgid "" +"The OAuth2 secret from your web application at https://console.developers." +"google.com/." +msgstr "" + +#: sso/conf.py:565 +msgid "Google OAuth2 Whitelisted Domains" +msgstr "" + +#: sso/conf.py:566 +msgid "" +"Update this setting to restrict the domains who are allowed to login using " +"Google OAuth2." +msgstr "" + +#: sso/conf.py:577 +msgid "Google OAuth2 Extra Arguments" +msgstr "" + +#: sso/conf.py:578 +msgid "" +"Extra arguments for Google OAuth2 login. When only allowing a single domain " +"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " +"display any other accounts even if the user is logged in with multiple " +"Google accounts." +msgstr "" + +#: sso/conf.py:592 +msgid "Google OAuth2 Organization Map" +msgstr "" + +#: sso/conf.py:604 +msgid "Google OAuth2 Team Map" +msgstr "" + +#: sso/conf.py:620 +msgid "GitHub OAuth2 Callback URL" +msgstr "" + +#: sso/conf.py:621 +msgid "" +"Create a developer application at https://github.com/settings/developers to " +"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " +"URL as the callback URL for your application." +msgstr "" + +#: sso/conf.py:625 sso/conf.py:636 sso/conf.py:646 sso/conf.py:658 +#: sso/conf.py:670 +msgid "GitHub OAuth2" +msgstr "" + +#: sso/conf.py:634 +msgid "GitHub OAuth2 Key" +msgstr "" + +#: sso/conf.py:635 +msgid "The OAuth2 key (Client ID) from your GitHub developer application." +msgstr "" + +#: sso/conf.py:644 +msgid "GitHub OAuth2 Secret" +msgstr "" + +#: sso/conf.py:645 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub developer application." +msgstr "" + +#: sso/conf.py:656 +msgid "GitHub OAuth2 Organization Map" +msgstr "" + +#: sso/conf.py:668 +msgid "GitHub OAuth2 Team Map" +msgstr "" + +#: sso/conf.py:684 +msgid "GitHub Organization OAuth2 Callback URL" +msgstr "" + +#: sso/conf.py:685 sso/conf.py:760 +msgid "" +"Create an organization-owned application at https://github.com/organizations/" +"/settings/applications and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" + +#: sso/conf.py:689 sso/conf.py:700 sso/conf.py:710 sso/conf.py:722 +#: sso/conf.py:733 sso/conf.py:745 +msgid "GitHub Organization OAuth2" +msgstr "" + +#: sso/conf.py:698 +msgid "GitHub Organization OAuth2 Key" +msgstr "" + +#: sso/conf.py:699 sso/conf.py:774 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "" + +#: sso/conf.py:708 +msgid "GitHub Organization OAuth2 Secret" +msgstr "" + +#: sso/conf.py:709 sso/conf.py:784 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" + +#: sso/conf.py:719 +msgid "GitHub Organization Name" +msgstr "" + +#: sso/conf.py:720 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" + +#: sso/conf.py:731 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "" + +#: sso/conf.py:743 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "" + +#: sso/conf.py:759 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "" + +#: sso/conf.py:764 sso/conf.py:775 sso/conf.py:785 sso/conf.py:797 +#: sso/conf.py:808 sso/conf.py:820 +msgid "GitHub Team OAuth2" +msgstr "" + +#: sso/conf.py:773 +msgid "GitHub Team OAuth2 Key" +msgstr "" + +#: sso/conf.py:783 +msgid "GitHub Team OAuth2 Secret" +msgstr "" + +#: sso/conf.py:794 +msgid "GitHub Team ID" +msgstr "" + +#: sso/conf.py:795 +msgid "" +"Find the numeric team ID using the Github API: http://fabian-kostadinov." +"github.io/2015/01/16/how-to-find-a-github-team-id/." +msgstr "" + +#: sso/conf.py:806 +msgid "GitHub Team OAuth2 Organization Map" +msgstr "" + +#: sso/conf.py:818 +msgid "GitHub Team OAuth2 Team Map" +msgstr "" + +#: sso/conf.py:834 +msgid "Azure AD OAuth2 Callback URL" +msgstr "" + +#: sso/conf.py:835 +msgid "" +"Register an Azure AD application as described by https://msdn.microsoft.com/" +"en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" + +#: sso/conf.py:839 sso/conf.py:850 sso/conf.py:860 sso/conf.py:872 +#: sso/conf.py:884 +msgid "Azure AD OAuth2" +msgstr "" + +#: sso/conf.py:848 +msgid "Azure AD OAuth2 Key" +msgstr "" + +#: sso/conf.py:849 +msgid "The OAuth2 key (Client ID) from your Azure AD application." +msgstr "" + +#: sso/conf.py:858 +msgid "Azure AD OAuth2 Secret" +msgstr "" + +#: sso/conf.py:859 +msgid "The OAuth2 secret (Client Secret) from your Azure AD application." +msgstr "" + +#: sso/conf.py:870 +msgid "Azure AD OAuth2 Organization Map" +msgstr "" + +#: sso/conf.py:882 +msgid "Azure AD OAuth2 Team Map" +msgstr "" + +#: sso/conf.py:903 +msgid "SAML Service Provider Callback URL" +msgstr "" + +#: sso/conf.py:904 +msgid "" +"Register Tower as a service provider (SP) with each identity provider (IdP) " +"you have configured. Provide your SP Entity ID and this callback URL for " +"your application." +msgstr "" + +#: sso/conf.py:907 sso/conf.py:921 sso/conf.py:934 sso/conf.py:948 +#: sso/conf.py:962 sso/conf.py:980 sso/conf.py:1002 sso/conf.py:1021 +#: sso/conf.py:1041 sso/conf.py:1075 sso/conf.py:1088 +msgid "SAML" +msgstr "" + +#: sso/conf.py:918 +msgid "SAML Service Provider Metadata URL" +msgstr "" + +#: sso/conf.py:919 +msgid "" +"If your identity provider (IdP) allows uploading an XML metadata file, you " +"can download one from this URL." +msgstr "" + +#: sso/conf.py:931 +msgid "SAML Service Provider Entity ID" +msgstr "" + +#: sso/conf.py:932 +msgid "" +"The application-defined unique identifier used as the audience of the SAML " +"service provider (SP) configuration." +msgstr "" + +#: sso/conf.py:945 +msgid "SAML Service Provider Public Certificate" +msgstr "" + +#: sso/conf.py:946 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"certificate content here." +msgstr "" + +#: sso/conf.py:959 +msgid "SAML Service Provider Private Key" +msgstr "" + +#: sso/conf.py:960 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"private key content here." +msgstr "" + +#: sso/conf.py:978 +msgid "SAML Service Provider Organization Info" +msgstr "" + +#: sso/conf.py:979 +msgid "Configure this setting with information about your app." +msgstr "" + +#: sso/conf.py:1000 +msgid "SAML Service Provider Technical Contact" +msgstr "" + +#: sso/conf.py:1001 sso/conf.py:1020 +msgid "Configure this setting with your contact information." +msgstr "" + +#: sso/conf.py:1019 +msgid "SAML Service Provider Support Contact" +msgstr "" + +#: sso/conf.py:1034 +msgid "SAML Enabled Identity Providers" +msgstr "" + +#: sso/conf.py:1035 +msgid "" +"Configure the Entity ID, SSO URL and certificate for each identity provider " +"(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " +"data using attribute names that differ from the default OIDs (https://github." +"com/omab/python-social-auth/blob/master/social/backends/saml.py#L16). " +"Attribute names may be overridden for each IdP." +msgstr "" + +#: sso/conf.py:1073 +msgid "SAML Organization Map" +msgstr "" + +#: sso/conf.py:1086 +msgid "SAML Team Map" +msgstr "" + +#: sso/fields.py:123 +msgid "Invalid connection option(s): {invalid_options}." +msgstr "" + +#: sso/fields.py:182 +msgid "Base" +msgstr "" + +#: sso/fields.py:183 +msgid "One Level" +msgstr "" + +#: sso/fields.py:184 +msgid "Subtree" +msgstr "" + +#: sso/fields.py:202 +msgid "Expected a list of three items but got {length} instead." +msgstr "" + +#: sso/fields.py:203 +msgid "Expected an instance of LDAPSearch but got {input_type} instead." +msgstr "" + +#: sso/fields.py:239 +msgid "" +"Expected an instance of LDAPSearch or LDAPSearchUnion but got {input_type} " +"instead." +msgstr "" + +#: sso/fields.py:266 +msgid "Invalid user attribute(s): {invalid_attrs}." +msgstr "" + +#: sso/fields.py:283 +msgid "Expected an instance of LDAPGroupType but got {input_type} instead." +msgstr "" + +#: sso/fields.py:308 +msgid "Invalid user flag: \"{invalid_flag}\"." +msgstr "" + +#: sso/fields.py:324 sso/fields.py:491 +msgid "" +"Expected None, True, False, a string or list of strings but got {input_type} " +"instead." +msgstr "" + +#: sso/fields.py:360 +msgid "Missing key(s): {missing_keys}." +msgstr "" + +#: sso/fields.py:361 +msgid "Invalid key(s): {invalid_keys}." +msgstr "" + +#: sso/fields.py:410 sso/fields.py:527 +msgid "Invalid key(s) for organization map: {invalid_keys}." +msgstr "" + +#: sso/fields.py:428 +msgid "Missing required key for team map: {invalid_keys}." +msgstr "" + +#: sso/fields.py:429 sso/fields.py:546 +msgid "Invalid key(s) for team map: {invalid_keys}." +msgstr "" + +#: sso/fields.py:545 +msgid "Missing required key for team map: {missing_keys}." +msgstr "" + +#: sso/fields.py:563 +msgid "Missing required key(s) for org info record: {missing_keys}." +msgstr "" + +#: sso/fields.py:576 +msgid "Invalid language code(s) for org info: {invalid_lang_codes}." +msgstr "" + +#: sso/fields.py:595 +msgid "Missing required key(s) for contact: {missing_keys}." +msgstr "" + +#: sso/fields.py:607 +msgid "Missing required key(s) for IdP: {missing_keys}." +msgstr "" + +#: sso/pipeline.py:24 +msgid "An account cannot be found for {0}" +msgstr "" + +#: sso/pipeline.py:30 +msgid "Your account is inactive" +msgstr "" + +#: sso/validators.py:19 sso/validators.py:44 +#, python-format +msgid "DN must include \"%%(user)s\" placeholder for username: %s" +msgstr "" + +#: sso/validators.py:26 +#, python-format +msgid "Invalid DN: %s" +msgstr "" + +#: sso/validators.py:56 +#, python-format +msgid "Invalid filter: %s" +msgstr "" + +#: templates/error.html:4 ui/templates/ui/index.html:8 +msgid "Ansible Tower" +msgstr "" + +#: templates/rest_framework/api.html:39 +msgid "Ansible Tower API Guide" +msgstr "" + +#: templates/rest_framework/api.html:40 +msgid "Back to Ansible Tower" +msgstr "" + +#: templates/rest_framework/api.html:41 +msgid "Resize" +msgstr "" + +#: templates/rest_framework/base.html:78 templates/rest_framework/base.html:92 +#, python-format +msgid "Make a GET request on the %(name)s resource" +msgstr "" + +#: templates/rest_framework/base.html:80 +msgid "Specify a format for the GET request" +msgstr "" + +#: templates/rest_framework/base.html:86 +#, python-format +msgid "" +"Make a GET request on the %(name)s resource with the format set to `" +"%(format)s`" +msgstr "" + +#: templates/rest_framework/base.html:100 +#, python-format +msgid "Make an OPTIONS request on the %(name)s resource" +msgstr "" + +#: templates/rest_framework/base.html:106 +#, python-format +msgid "Make a DELETE request on the %(name)s resource" +msgstr "" + +#: templates/rest_framework/base.html:113 +msgid "Filters" +msgstr "" + +#: templates/rest_framework/base.html:172 +#: templates/rest_framework/base.html:186 +#, python-format +msgid "Make a POST request on the %(name)s resource" +msgstr "" + +#: templates/rest_framework/base.html:216 +#: templates/rest_framework/base.html:230 +#, python-format +msgid "Make a PUT request on the %(name)s resource" +msgstr "" + +#: templates/rest_framework/base.html:233 +#, python-format +msgid "Make a PATCH request on the %(name)s resource" +msgstr "" + +#: ui/apps.py:9 ui/conf.py:22 ui/conf.py:38 ui/conf.py:53 +msgid "UI" +msgstr "" + +#: ui/conf.py:16 +msgid "Off" +msgstr "" + +#: ui/conf.py:17 +msgid "Anonymous" +msgstr "" + +#: ui/conf.py:18 +msgid "Detailed" +msgstr "" + +#: ui/conf.py:20 +msgid "Analytics Tracking State" +msgstr "" + +#: ui/conf.py:21 +msgid "Enable or Disable Analytics Tracking." +msgstr "" + +#: ui/conf.py:31 +msgid "Custom Login Info" +msgstr "" + +#: ui/conf.py:32 +msgid "" +"If needed, you can add specific information (such as a legal notice or a " +"disclaimer) to a text box in the login modal using this setting. Any content " +"added must be in plain text, as custom HTML or other markup languages are " +"not supported. If multiple paragraphs of text are needed, new lines " +"(paragraphs) must be escaped as `\\n` within the block of text." +msgstr "" + +#: ui/conf.py:48 +msgid "Custom Logo" +msgstr "" + +#: ui/conf.py:49 +msgid "" +"To set up a custom logo, provide a file that you create. For the custom logo " +"to look its best, use a `.png` file with a transparent background. GIF, PNG " +"and JPEG formats are supported." +msgstr "" + +#: ui/fields.py:29 +msgid "" +"Invalid format for custom logo. Must be a data URL with a base64-encoded " +"GIF, PNG or JPEG image." +msgstr "" + +#: ui/fields.py:30 +msgid "Invalid base64-encoded data in data URL." +msgstr "" + +#: ui/templates/ui/index.html:49 +msgid "" +"Your session will expire in 60 seconds, would you like to continue?" +msgstr "" + +#: ui/templates/ui/index.html:64 +msgid "CANCEL" +msgstr "" + +#: ui/templates/ui/index.html:116 +msgid "Set how many days of data should be retained." +msgstr "" + +#: ui/templates/ui/index.html:122 +msgid "" +"Please enter an integer that is not " +"negative that is lower than 9999." +msgstr "" + +#: ui/templates/ui/index.html:127 +msgid "" +"For facts collected older than the time period specified, save one fact scan " +"(snapshot) per time window (frequency). For example, facts older than 30 " +"days are purged, while one weekly fact scan is kept.\n" +"
\n" +"
CAUTION: Setting both numerical variables to \"0\" " +"will delete all facts.\n" +"
\n" +"
" +msgstr "" + +#: ui/templates/ui/index.html:136 +msgid "Select a time period after which to remove old facts" +msgstr "" + +#: ui/templates/ui/index.html:150 +msgid "" +"Please enter an integer " +"that is not negative " +"that is lower than 9999." +msgstr "" + +#: ui/templates/ui/index.html:155 +msgid "Select a frequency for snapshot retention" +msgstr "" + +#: ui/templates/ui/index.html:169 +msgid "" +"Please enter an integer that is not negative that is " +"lower than 9999." +msgstr "" + +#: ui/templates/ui/index.html:175 +msgid "working..." +msgstr "" diff --git a/awx/locale/fr/LC_MESSAGES/ansible-tower-ui.po b/awx/locale/fr/LC_MESSAGES/ansible-tower-ui.po new file mode 100644 index 0000000000..b37f3871b7 --- /dev/null +++ b/awx/locale/fr/LC_MESSAGES/ansible-tower-ui.po @@ -0,0 +1,2963 @@ +# Corina Roe , 2017. #zanata +# Sam Friedmann , 2017. #zanata +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" +"MIME-Version: 1.0\n" +"PO-Revision-Date: 2017-01-11 12:31+0000\n" +"Last-Translator: Corina Roe \n" +"Language-Team: French\n" +"Language: fr\n" +"X-Generator: Zanata 3.9.6\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: client/src/notifications/notificationTemplates.form.js:371 +msgid "%s or %s" +msgstr "%s ou %s" + +#: client/src/controllers/Projects.js:397 +#: client/src/controllers/Projects.js:679 +msgid "" +"%sNote:%s Mercurial does not support password authentication for SSH. Do not " +"put the username and key in the URL. If using Bitbucket and SSH, do not " +"supply your Bitbucket username." +msgstr "" +"%Remarque :%s Mercurial ne prend pas en charge l'authentification par mot de " +"passe pour SSH. N'entrez ni le nom d'utilisateur, ni la clé dans l'URL. Si " +"vous utilisez Bitbucket et SSH, ne saisissez pas votre nom d'utilisateur " +"Bitbucket." + +#: client/src/controllers/Projects.js:384 +#: client/src/controllers/Projects.js:666 +msgid "" +"%sNote:%s When using SSH protocol for GitHub or Bitbucket, enter an SSH key " +"only, do not enter a username (other than git). Additionally, GitHub and " +"Bitbucket do not support password authentication when using SSH. GIT read " +"only protocol (git://) does not use username or password information." +msgstr "" +"%Remarque :%s Si vous utilisez le protocole SSH pour GitHub ou Bitbucket, " +"entrez uniquement une clé SSH sans nom d'utilisateur (autre que git). De " +"plus, GitHub et Bitbucket ne prennent pas en charge l'authentification par " +"mot de passe lorsque SSH est utilisé. Le protocole GIT en lecture seule (git:" +"//) n'utilise pas les informations de nom d'utilisateur ou de mot de passe." + +#: client/src/forms/Credentials.js:287 +msgid "(defaults to %s)" +msgstr "(défini par défaut sur %s)" + +#: client/src/organizations/list/organizations-list.partial.html:15 +msgid "+ ADD" +msgstr "+ AJOUTER" + +#: client/src/controllers/Users.js:185 +msgid "A value is required" +msgstr "Entrez une valeur" + +#: client/src/forms/Credentials.js:442 +#: client/src/forms/Inventories.js:153 +#: client/src/forms/JobTemplates.js:414 +#: client/src/forms/Organizations.js:75 +#: client/src/forms/Projects.js:237 +#: client/src/forms/Teams.js:86 +#: client/src/forms/Workflows.js:127 +#: client/src/inventory-scripts/inventory-scripts.list.js:45 +#: client/src/lists/Credentials.js:59 +#: client/src/lists/Inventories.js:68 +#: client/src/lists/Projects.js:67 +#: client/src/lists/Teams.js:50 +#: client/src/lists/Templates.js:62 +#: client/src/lists/Users.js:58 +#: client/src/notifications/notificationTemplates.list.js:52 +msgid "ADD" +msgstr "AJOUTER" + +#: client/src/notifications/notifications.list.js:68 +msgid "ADD NOTIFICATION TEMPLATE" +msgstr "AJOUTER UN MODÈLE DE NOTIFICATION" + +#: client/src/forms/Credentials.js:199 +msgid "API Key" +msgstr "Clé API" + +#: client/src/notifications/notificationTemplates.form.js:248 +msgid "API Service/Integration Key" +msgstr "Service API/Clé d'intégration" + +#: client/src/notifications/shared/type-change.service.js:52 +msgid "API Token" +msgstr "Token API" + +#: client/src/setup-menu/setup-menu.partial.html:59 +msgid "About Tower" +msgstr "Tower" + +#: client/src/forms/Credentials.js:92 +msgid "Access Key" +msgstr "Clé d'accÚs" + +#: client/src/notifications/notificationTemplates.form.js:226 +msgid "Account SID" +msgstr "SID de compte" + +#: client/src/notifications/notificationTemplates.form.js:184 +msgid "Account Token" +msgstr "Token de compte" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:20 +#: client/src/shared/list-generator/list-generator.factory.js:538 +msgid "Actions" +msgstr "Actions" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:17 +#: client/src/lists/Templates.js:40 +msgid "Activity" +msgstr "Activité" + +#: client/src/configuration/system-form/configuration-system.controller.js:81 +msgid "Activity Stream" +msgstr "Flux d'activité" + +#: client/src/forms/Inventories.js:104 +#: client/src/forms/Inventories.js:150 +#: client/src/forms/Organizations.js:72 +#: client/src/forms/Teams.js:83 +#: client/src/forms/Workflows.js:124 +msgid "Add" +msgstr "Ajouter" + +#: client/src/lists/Credentials.js:17 +msgid "Add Credentials" +msgstr "Ajouter des informations d'identification" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:12 +msgid "Add Existing Hosts" +msgstr "Ajouter des hÃŽtes existants" + +#: client/src/lists/Inventories.js:15 +msgid "Add Inventories" +msgstr "Ajouter des inventaires" + +#: client/src/notifications/notifications.list.js:63 +msgid "Add Notification" +msgstr "Ajouter une notification" + +#: client/src/lists/Projects.js:15 +msgid "Add Project" +msgstr "Ajouter un projet" + +#: client/src/forms/JobTemplates.js:459 +#: client/src/forms/Workflows.js:172 +#: client/src/shared/form-generator.js:1707 +msgid "Add Survey" +msgstr "Ajouter un questionnaire" + +#: client/src/lists/Teams.js:15 +msgid "Add Team" +msgstr "Ajouter une équipe" + +#: client/src/lists/Users.js:25 +msgid "Add Users" +msgstr "Ajouter des utilisateurs" + +#: client/src/forms/Credentials.js:440 +#: client/src/forms/Inventories.js:151 +#: client/src/forms/JobTemplates.js:412 +#: client/src/forms/Organizations.js:73 +#: client/src/forms/Projects.js:235 +msgid "Add a permission" +msgstr "Ajouter une permission" + +#: client/src/setup-menu/setup-menu.partial.html:23 +msgid "" +"Add passwords, SSH keys, etc. for Tower to use when launching jobs against " +"machines, or when syncing inventories or projects." +msgstr "" +"Ajouter des mots de passe, des clés SSH, etc. pour Tower afin de les " +"utiliser lors du lancement de tâches sur des machines ou durant la " +"synchronisation d'inventaires ou de projets." + +#: client/src/forms/Teams.js:84 +msgid "Add user to team" +msgstr "Ajouter un utilisateur à l'équipe" + +#: client/src/shared/form-generator.js:1450 +msgid "Admin" +msgstr "Administrateur" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:37 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:43 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:65 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:74 +msgid "All" +msgstr "Tous" + +#: client/src/portal-mode/portal-mode-jobs.partial.html:7 +msgid "All Jobs" +msgstr "Toutes les tâches" + +#: client/src/forms/JobTemplates.js:299 +#: client/src/forms/JobTemplates.js:306 +msgid "Allow Provisioning Callbacks" +msgstr "Autoriser les rappels d'exécution de Tower job_template" + +#: client/src/setup-menu/setup-menu.partial.html:11 +msgid "Allow others to sign into Tower and own the content they create." +msgstr "" +"Autoriser les autres à se connecter à Tower et à devenir propriétaire du " +"contenu qu'ils créent." + +#: client/src/forms/WorkflowMaker.js:50 +msgid "Always" +msgstr "Toujours" + +#: client/src/controllers/Projects.js:220 +msgid "" +"An SCM update does not appear to be running for project: %s. Click the " +"%sRefresh%s button to view the latest status." +msgstr "" +"Une mise à jour SCM ne semble pas s'exécuter pour le projet : %s. Cliquez " +"sur le bouton %sActualiser%s pour voir l'état le plus récent." + +#: client/src/controllers/Projects.js:162 +msgid "Are you sure you want to delete the project below?" +msgstr "Voulez-vous vraiment supprimer le projet ci-dessous ?" + +#: client/src/controllers/Users.js:102 +msgid "Are you sure you want to delete the user below?" +msgstr "Voulez-vous vraiment supprimer l'utilisateur ci-dessous ?" + +#: client/src/controllers/Projects.js:647 +msgid "Are you sure you want to remove the %s below from %s?" +msgstr "Voulez-vous vraimment supprimer le %s ci-dessous de %s ?" + +#: client/src/forms/Credentials.js:233 +#: client/src/forms/Credentials.js:271 +#: client/src/forms/Credentials.js:310 +#: client/src/forms/Credentials.js:395 +msgid "Ask at runtime?" +msgstr "Demander durant l'éxecution ?" + +#: client/src/shared/form-generator.js:1452 +msgid "Auditor" +msgstr "Auditeur" + +#: client/src/forms/Credentials.js:73 +msgid "" +"Authentication for network device access. This can include SSH keys, " +"usernames, passwords, and authorize information. Network credentials are " +"used when submitting jobs to run playbooks against network devices." +msgstr "" +"Authentification pour l'accÚs aux périphériques réseau. Il peut s'agir de " +"clés SSH, de noms d'utilisateur, de mots de passe et d'informations " +"d'autorisation. Les informations d'identification réseau sont utilisées au " +"cours de l'envoi de tâches afin d'exécuter des playbooks sur des " +"périphériques réseau." + +#: client/src/forms/Credentials.js:69 +msgid "" +"Authentication for remote machine access. This can include SSH keys, " +"usernames, passwords, and sudo information. Machine credentials are used " +"when submitting jobs to run playbooks against remote hosts." +msgstr "" +"Authentification pour l'accÚs aux machines distantes. Il peut s'agir de clés " +"SSH, de noms d'utilisateur, de mots de passe et d'informations sudo. Les " +"informations d'identification de machine sont utilisées au cours de l'envoi " +"de tâches afin d'exécuter des playbooks sur des hÃŽtes distants." + +#: client/src/forms/Credentials.js:341 +msgid "Authorize" +msgstr "Autoriser" + +#: client/src/forms/Credentials.js:349 +msgid "Authorize Password" +msgstr "Mot de passe d'autorisation" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:101 +msgid "Azure AD" +msgstr "Azure AD" + +#: client/src/forms/Projects.js:80 +msgid "" +"Base path used for locating playbooks. Directories found inside this path " +"will be listed in the playbook directory drop-down. Together the base path " +"and selected playbook directory provide the full path used to locate " +"playbooks." +msgstr "" +"Chemin de base utilisé pour localiser les playbooks. Les répertoires " +"localisés dans ce chemin sont répertoriés dans la liste déroulante des " +"répertoires de playbooks. Le chemin de base et le répertoire de playbook " +"sélectionnés fournissent ensemble le chemin complet servant à localiser les " +"playbooks." + +#: client/src/forms/JobTemplates.js:293 +msgid "Become Privilege Escalation" +msgstr "Activer l'élévation des privilÚges" + +#: client/src/license/license.partial.html:104 +msgid "Browse" +msgstr "Parcourir" + +#: client/src/app.js:317 +msgid "CREDENTIALS" +msgstr "INFORMATIONS D'IDENTIFICATION" + +#: client/src/forms/Projects.js:194 +msgid "Cache Timeout" +msgstr "Expiration du délai d'attente du cache" + +#: client/src/forms/Projects.js:183 +msgid "Cache Timeout%s (seconds)%s" +msgstr "Expiration du délai d'attente du cache%s (secondes)%s" + +#: client/src/controllers/Projects.js:156 +#: client/src/controllers/Users.js:95 +msgid "Call to %s failed. DELETE returned status:" +msgstr "Échec de l'appel de %s. État DELETE renvoyé :" + +#: client/src/controllers/Projects.js:201 +#: client/src/controllers/Projects.js:217 +msgid "Call to %s failed. GET status:" +msgstr "Échec de l'appel de %s. État GET :" + +#: client/src/controllers/Projects.js:641 +msgid "Call to %s failed. POST returned status:" +msgstr "Échec de l'appel de %s. État POST renvoyé :" + +#: client/src/controllers/Projects.js:180 +msgid "Call to %s failed. POST status:" +msgstr "Échec de l'appel de %s. État POST :" + +#: client/src/controllers/Projects.js:226 +msgid "Call to get project failed. GET status:" +msgstr "Échec de l'appel du projet en GET. État GET :" + +#: client/src/configuration/configuration.controller.js:434 +#: client/src/shared/form-generator.js:1695 +msgid "Cancel" +msgstr "Annuler" + +#: client/src/controllers/Projects.js:196 +msgid "Cancel Not Allowed" +msgstr "Annulation non autorisée" + +#: client/src/lists/Projects.js:121 +msgid "Cancel the SCM update" +msgstr "Annuler la mise à jour SCM" + +#: client/src/controllers/Projects.js:53 +msgid "Canceled. Click for details" +msgstr "Annulé. Cliquez pour connaître les détails." + +#: client/src/forms/Projects.js:82 +msgid "Change %s under \"Configure Tower\" to change this location." +msgstr "Modifiez %s sous \"Configurer Tower\" pour changer d'emplacement." + +#: client/src/shared/form-generator.js:1084 +msgid "Choose a %s" +msgstr "Choisir un %s" + +#: client/src/license/license.partial.html:97 +msgid "" +"Choose your license file, agree to the End User License Agreement, and click " +"submit." +msgstr "" +"Choisissez votre fichier de licence, acceptez le Contrat de licence de " +"l'utilisateur final et validez." + +#: client/src/forms/Projects.js:151 +msgid "Clean" +msgstr "Nettoyer" + +#: client/src/lists/Inventories.js:18 +msgid "" +"Click on a row to select it, and click Finished when done. Click the %s " +"button to create a new inventory." +msgstr "" +"Cliquez sur une ligne pour la sélectionner, puis sur Terminé lorsque vous " +"avez fini. Cliquez sur le bouton %s pour créer un inventaire." + +#: client/src/lists/Teams.js:18 +msgid "" +"Click on a row to select it, and click Finished when done. Click the %s " +"button to create a new team." +msgstr "" +"Cliquez sur une ligne pour la sélectionner, puis sur Terminé lorsque vous " +"avez fini. Cliquez sur le bouton %s pour créer une équipe." + +#: client/src/lists/Templates.js:19 +msgid "" +"Click on a row to select it, and click Finished when done. Use the %s button " +"to create a new job template." +msgstr "" +"Cliquez sur une ligne pour la sélectionner, puis sur Terminé lorsque vous " +"avez fini. Cliquez sur le bouton %s pour créer un modÚle de tâche." + +#: client/src/forms/Credentials.js:319 +msgid "Client ID" +msgstr "ID du client" + +#: client/src/notifications/notificationTemplates.form.js:259 +msgid "Client Identifier" +msgstr "Identifiant client" + +#: client/src/forms/Credentials.js:328 +msgid "Client Secret" +msgstr "Question secrÚte du client" + +#: client/src/shared/form-generator.js:1699 +msgid "Close" +msgstr "Fermer" + +#: client/src/forms/JobTemplates.js:164 +#: client/src/forms/JobTemplates.js:176 +msgid "Cloud Credential" +msgstr "Informations d'identification cloud" + +#: client/src/helpers/Credentials.js:158 +msgid "CloudForms Host" +msgstr "HÃŽte CloudForms" + +#: client/src/notifications/notificationTemplates.form.js:295 +msgid "Color can be one of %s." +msgstr "La couleur peut être l'une des %s." + +#: client/src/lists/CompletedJobs.js:18 +msgid "Completed Jobs" +msgstr "Tâches terminées" + +#: client/src/management-jobs/card/card.partial.html:32 +msgid "Configure Notifications" +msgstr "Configurer les notifications" + +#: client/src/forms/Users.js:82 +msgid "Confirm Password" +msgstr "Confirmer le mot de passe" + +#: client/src/configuration/configuration.controller.js:441 +msgid "Confirm Reset" +msgstr "Confirmer la réinitialisation" + +#: client/src/configuration/configuration.controller.js:450 +msgid "Confirm factory reset" +msgstr "Confirmer la réinitialisation usine" + +#: client/src/forms/JobTemplates.js:255 +#: client/src/forms/JobTemplates.js:273 +#: client/src/forms/WorkflowMaker.js:141 +#: client/src/forms/WorkflowMaker.js:156 +msgid "" +"Consult the Ansible documentation for further details on the usage of tags." +msgstr "" +"Consultez la documentation d'Ansible pour en savoir plus sur l'utilisation " +"des balises." + +#: client/src/forms/JobTemplates.js:241 +msgid "" +"Control the level of output ansible will produce as the playbook executes." +msgstr "" +"ContrÃŽlez le niveau de sortie qu'Ansible génÚre lors de l'exécution du " +"playbook." + +#: client/src/lists/Templates.js:100 +msgid "Copy" +msgstr "Copier" + +#: client/src/lists/Templates.js:103 +msgid "Copy template" +msgstr "Copier le modÚle" + +#: client/src/forms/Credentials.js:18 +msgid "Create Credential" +msgstr "Créer des informations d'identification" + +#: client/src/lists/Users.js:52 +msgid "Create New" +msgstr "Créer" + +#: client/src/lists/Credentials.js:57 +msgid "Create a new credential" +msgstr "Créer de nouvelles informations d'identification" + +#: client/src/inventory-scripts/inventory-scripts.list.js:43 +msgid "Create a new custom inventory" +msgstr "Créer un inventaire personnalisé" + +#: client/src/lists/Inventories.js:66 +msgid "Create a new inventory" +msgstr "Créer un inventaire" + +#: client/src/notifications/notificationTemplates.list.js:50 +#: client/src/notifications/notifications.list.js:66 +msgid "Create a new notification template" +msgstr "Créer un modÚle de notification" + +#: client/src/organizations/list/organizations-list.partial.html:16 +msgid "Create a new organization" +msgstr "Créer une organisation" + +#: client/src/lists/Projects.js:65 +msgid "Create a new project" +msgstr "Créer un projet" + +#: client/src/lists/Teams.js:48 +msgid "Create a new team" +msgstr "Créer une équipe" + +#: client/src/lists/Templates.js:60 +msgid "Create a new template" +msgstr "Créer un modÚle" + +#: client/src/lists/Users.js:56 +msgid "Create a new user" +msgstr "Créer un utilisateur" + +#: client/src/setup-menu/setup-menu.partial.html:35 +msgid "Create and edit scripts to dynamically load hosts from any source." +msgstr "" +"Créez et modifiez des scripts pour charger dynamiquement des hÃŽtes à partir " +"de n'importe quelle source." + +#: client/src/setup-menu/setup-menu.partial.html:42 +msgid "" +"Create templates for sending notifications with Email, HipChat, Slack, and " +"SMS." +msgstr "" +"Créer des modÚles pour envoyer des notifications via email, HipChat, Slack, " +"et SMS." + +#: client/src/forms/JobTemplates.js:154 +#: client/src/forms/WorkflowMaker.js:60 +#: client/src/forms/WorkflowMaker.js:69 +msgid "Credential" +msgstr "Information d'identification" + +#: client/src/lists/Credentials.js:18 +#: client/src/lists/Credentials.js:19 +#: client/src/setup-menu/setup-menu.partial.html:22 +msgid "Credentials" +msgstr "Informations d'identification" + +#: client/src/inventory-scripts/inventory-scripts.form.js:50 +#: client/src/inventory-scripts/inventory-scripts.form.js:60 +msgid "Custom Script" +msgstr "Script personnalisé" + +#: client/src/app.js:409 +msgid "DASHBOARD" +msgstr "TABLEAU DE BORD" + +#: client/src/controllers/Projects.js:649 +#: client/src/controllers/Users.js:104 +msgid "DELETE" +msgstr "SUPPRIMER" + +#: client/src/controllers/Projects.js:161 +#: client/src/controllers/Projects.js:646 +#: client/src/controllers/Users.js:101 +#: client/src/inventory-scripts/inventory-scripts.list.js:74 +#: client/src/lists/Credentials.js:90 +#: client/src/lists/Inventories.js:92 +#: client/src/lists/Teams.js:77 +#: client/src/lists/Templates.js:125 +#: client/src/lists/Users.js:87 +#: client/src/notifications/notificationTemplates.list.js:89 +msgid "Delete" +msgstr "Supprimer" + +#: client/src/lists/Credentials.js:92 +msgid "Delete credential" +msgstr "Supprimer les informations d'identification" + +#: client/src/lists/Inventories.js:94 +msgid "Delete inventory" +msgstr "Supprimer l'inventaire" + +#: client/src/inventory-scripts/inventory-scripts.list.js:76 +msgid "Delete inventory script" +msgstr "Supprimer le script d'inventaire" + +#: client/src/notifications/notificationTemplates.list.js:91 +msgid "Delete notification" +msgstr "Supprimer la notification" + +#: client/src/forms/Projects.js:161 +msgid "Delete on Update" +msgstr "Supprimer lors de la mise à jour" + +#: client/src/lists/Teams.js:81 +msgid "Delete team" +msgstr "Supprimer l'équipe" + +#: client/src/lists/Templates.js:128 +msgid "Delete template" +msgstr "Supprimer le modÚle" + +#: client/src/lists/CompletedJobs.js:82 +msgid "Delete the job" +msgstr "Supprimer la tâche" + +#: client/src/forms/Projects.js:163 +msgid "" +"Delete the local repository in its entirety prior to performing an update." +msgstr "" +"Supprimer le référentiel local dans son intégralité avant de lancer la mise " +"à jour." + +#: client/src/lists/Projects.js:115 +msgid "Delete the project" +msgstr "Supprimer le projet" + +#: client/src/lists/ScheduledJobs.js:80 +msgid "Delete the schedule" +msgstr "Supprimer la planification" + +#: client/src/lists/Users.js:91 +msgid "Delete user" +msgstr "Supprimer l'utilisateur" + +#: client/src/forms/Projects.js:163 +msgid "" +"Depending on the size of the repository this may significantly increase the " +"amount of time required to complete an update." +msgstr "" +"Selon la taille du référentiel, cette opération risque d'augmenter " +"considérablement le délai d'exécution de la mise à jour." + +#: client/src/forms/Credentials.js:41 +#: client/src/forms/Inventories.js:37 +#: client/src/forms/JobTemplates.js:42 +#: client/src/forms/Organizations.js:33 +#: client/src/forms/Projects.js:38 +#: client/src/forms/Teams.js:34 +#: client/src/forms/Users.js:142 +#: client/src/forms/Users.js:167 +#: client/src/forms/Workflows.js:41 +#: client/src/inventory-scripts/inventory-scripts.form.js:32 +#: client/src/inventory-scripts/inventory-scripts.list.js:25 +#: client/src/lists/Credentials.js:34 +#: client/src/lists/PortalJobTemplates.js:29 +#: client/src/lists/Teams.js:30 +#: client/src/lists/Templates.js:36 +#: client/src/notifications/notificationTemplates.form.js:36 +msgid "Description" +msgstr "Description" + +#: client/src/notifications/notificationTemplates.form.js:138 +#: client/src/notifications/notificationTemplates.form.js:143 +#: client/src/notifications/notificationTemplates.form.js:155 +#: client/src/notifications/notificationTemplates.form.js:160 +#: client/src/notifications/notificationTemplates.form.js:372 +msgid "Destination Channels" +msgstr "Canaux de destination" + +#: client/src/notifications/notificationTemplates.form.js:367 +msgid "Destination Channels or Users" +msgstr "Canaux de destination pour les utilisateurs" + +#: client/src/notifications/notificationTemplates.form.js:209 +#: client/src/notifications/notificationTemplates.form.js:214 +msgid "Destination SMS Number" +msgstr "Numéro SMS de destination" + +#: client/src/license/license.partial.html:5 +#: client/src/shared/form-generator.js:1481 +msgid "Details" +msgstr "Détails" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:70 +#: client/src/configuration/configuration.controller.js:170 +#: client/src/configuration/configuration.controller.js:232 +#: client/src/configuration/system-form/configuration-system.controller.js:49 +msgid "Discard changes" +msgstr "Ignorer les modifications" + +#: client/src/forms/Teams.js:148 +msgid "Dissasociate permission from team" +msgstr "Dissocier la permission de l'équipe" + +#: client/src/forms/Users.js:217 +msgid "Dissasociate permission from user" +msgstr "Dissocier la permission de l'utilisateur" + +#: client/src/forms/Credentials.js:382 +#: client/src/helpers/Credentials.js:133 +msgid "Domain Name" +msgstr "Nom de domaine" + +#: client/src/inventory-scripts/inventory-scripts.form.js:58 +msgid "" +"Drag and drop your custom inventory script file here or create one in the " +"field to import your custom inventory." +msgstr "" +"Faites glisser votre script d'inventaire personnalisé et déposez-le ici ou " +"créez-en un dans le champ pour importer votre inventaire personnalisé." + +#: client/src/forms/Projects.js:174 +msgid "" +"Each time a job runs using this project, perform an update to the local " +"repository prior to starting the job." +msgstr "" +"Chaque fois qu'une tâche s'exécute avec ce projet, réalisez une mise à jour " +"dans le référentiel local avant de lancer la tâche." + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:63 +#: client/src/inventory-scripts/inventory-scripts.list.js:57 +#: client/src/lists/Credentials.js:71 +#: client/src/lists/Inventories.js:78 +#: client/src/lists/Teams.js:60 +#: client/src/lists/Templates.js:108 +#: client/src/lists/Users.js:68 +#: client/src/notifications/notificationTemplates.list.js:63 +#: client/src/notifications/notificationTemplates.list.js:72 +msgid "Edit" +msgstr "Modifier" + +#: client/src/forms/JobTemplates.js:466 +#: client/src/forms/Workflows.js:179 +#: client/src/shared/form-generator.js:1711 +msgid "Edit Survey" +msgstr "Modifier le questionnaire" + +#: client/src/lists/Credentials.js:73 +msgid "Edit credential" +msgstr "Modifier les informations d'identification" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:66 +msgid "Edit host" +msgstr "Modifier l'hÃŽte" + +#: client/src/lists/Inventories.js:80 +msgid "Edit inventory" +msgstr "Modifier l'inventaire" + +#: client/src/inventory-scripts/inventory-scripts.list.js:59 +msgid "Edit inventory script" +msgstr "Modifier le script d'inventaire" + +#: client/src/notifications/notificationTemplates.list.js:74 +msgid "Edit notification" +msgstr "Modifier la notification" + +#: client/src/lists/Teams.js:64 +msgid "Edit team" +msgstr "Modifier l'équipe" + +#: client/src/lists/Templates.js:110 +msgid "Edit template" +msgstr "Modifier le modÚle" + +#: client/src/lists/Projects.js:102 +msgid "Edit the project" +msgstr "Modifier le projet" + +#: client/src/lists/ScheduledJobs.js:66 +msgid "Edit the schedule" +msgstr "Modifier la planification" + +#: client/src/lists/Users.js:72 +msgid "Edit user" +msgstr "Modifier l'utilisateur" + +#: client/src/controllers/Projects.js:196 +msgid "" +"Either you do not have access or the SCM update process completed. Click the " +"%sRefresh%s button to view the latest status." +msgstr "" +"Vous n'avez pas accÚs, ou la mise à jour SCM est terminée. Cliquez sur le " +"bouton %sActualiser%s pour voir l'état le plus récent." + +#: client/src/forms/Credentials.js:192 +#: client/src/forms/Users.js:42 +msgid "Email" +msgstr "Email" + +#: client/src/forms/JobTemplates.js:288 +msgid "Enable Privilege Escalation" +msgstr "Activer l'élévation des privilÚges" + +#: client/src/forms/JobTemplates.js:303 +msgid "" +"Enables creation of a provisioning callback URL. Using the URL a host can " +"contact Tower and request a configuration update using this job template." +msgstr "" +"Active la création d'une URL de rappels d'exécution de Tower job_template. " +"Avec cette URL, un hÃŽte peut contacter Tower et demander une mise à jour de " +"la configuration à l'aide de ce modÚle de tâche." + +#: client/src/helpers/Credentials.js:306 +msgid "Encrypted credentials are not supported." +msgstr "" +"Les informations d'identification chiffrées ne sont pas prises en charge." + +#: client/src/license/license.partial.html:108 +msgid "End User License Agreement" +msgstr "Contrat de licence de l'utilisateur final" + +#: client/src/forms/Inventories.js:60 +msgid "" +"Enter inventory variables using either JSON or YAML syntax. Use the radio " +"button to toggle between the two." +msgstr "" +"Entrez les variables d'inventaire avec la syntaxe JSON ou YAML. Utilisez le " +"bouton radio pour basculer entre les deux." + +#: client/src/helpers/Credentials.js:159 +msgid "" +"Enter the hostname or IP address for the virtual %s machine which is hosting " +"the CloudForm appliance." +msgstr "" +"Entrez le nom d'hÃŽte ou l'adresse IP de la machine %s virtuelle qui héberge " +"l'appliance CloudForm." + +#: client/src/helpers/Credentials.js:150 +msgid "" +"Enter the hostname or IP address name which %scorresponds to your Red Hat " +"Satellite 6 server." +msgstr "" +"Entrez le nom d'hÃŽte ou l'adresse IP qui %scorrespond à votre serveur Red " +"Hat Satellite 6." + +#: client/src/helpers/Credentials.js:128 +msgid "" +"Enter the hostname or IP address which corresponds to your VMware vCenter." +msgstr "" +"Entrez le nom d'hÃŽte ou l'adresse IP qui correspond à votre VMware vCenter." + +#: client/src/configuration/configuration.controller.js:292 +#: client/src/configuration/configuration.controller.js:370 +#: client/src/configuration/configuration.controller.js:404 +#: client/src/configuration/configuration.controller.js:423 +#: client/src/controllers/Projects.js:133 +#: client/src/controllers/Projects.js:155 +#: client/src/controllers/Projects.js:180 +#: client/src/controllers/Projects.js:201 +#: client/src/controllers/Projects.js:216 +#: client/src/controllers/Projects.js:225 +#: client/src/controllers/Projects.js:363 +#: client/src/controllers/Projects.js:557 +#: client/src/controllers/Projects.js:623 +#: client/src/controllers/Projects.js:641 +#: client/src/controllers/Users.js:182 +#: client/src/controllers/Users.js:267 +#: client/src/controllers/Users.js:321 +#: client/src/controllers/Users.js:94 +#: client/src/helpers/Credentials.js:310 +#: client/src/helpers/Credentials.js:326 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:119 +msgid "Error!" +msgstr "Erreur !" + +#: client/src/controllers/Projects.js:381 +#: client/src/controllers/Projects.js:664 +msgid "Example URLs for GIT SCM include:" +msgstr "Exemples d'URL pour le SCM GIT :" + +#: client/src/controllers/Projects.js:394 +#: client/src/controllers/Projects.js:676 +msgid "Example URLs for Mercurial SCM include:" +msgstr "Exemples d'URL pour le SCM Mercurial :" + +#: client/src/controllers/Projects.js:389 +#: client/src/controllers/Projects.js:671 +msgid "Example URLs for Subversion SCM include:" +msgstr "Exemples d'URL pour le SCM Subversion :" + +#: client/src/license/license.partial.html:39 +msgid "Expires On" +msgstr "Arrive à expiration le" + +#: client/src/forms/JobTemplates.js:352 +#: client/src/forms/JobTemplates.js:364 +#: client/src/forms/Workflows.js:72 +#: client/src/forms/Workflows.js:84 +msgid "Extra Variables" +msgstr "Variables supplémentaires" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:67 +msgid "FAILED" +msgstr "ÉCHEC" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:80 +msgid "Failed" +msgstr "Échec" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:44 +msgid "Failed Hosts" +msgstr "Échec des hÃŽtes" + +#: client/src/controllers/Users.js:182 +msgid "Failed to add new user. POST returned status:" +msgstr "L'ajout de l'utilisateur a échoué. État POST renvoyé :" + +#: client/src/helpers/Credentials.js:311 +msgid "Failed to create new Credential. POST status:" +msgstr "La création des informations d'identification a échoué. État POST :" + +#: client/src/controllers/Projects.js:364 +msgid "Failed to create new project. POST returned status:" +msgstr "La création du projet a échoué. État POST renvoyé :" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:120 +msgid "Failed to get third-party login types. Returned status:" +msgstr "L'obtention des types de connexion tiers a échoué. État renvoyé :" + +#: client/src/controllers/Projects.js:558 +msgid "Failed to retrieve project: %s. GET status:" +msgstr "La récupération du projet a échoué : %s. État GET :" + +#: client/src/controllers/Users.js:268 +#: client/src/controllers/Users.js:322 +msgid "Failed to retrieve user: %s. GET status:" +msgstr "La récupération de l'utilisateur a échoué : %s. État GET :" + +#: client/src/configuration/configuration.controller.js:371 +msgid "Failed to save settings. Returned status:" +msgstr "L'enregistrement des paramÚtres a échoué. État renvoyé :" + +#: client/src/configuration/configuration.controller.js:405 +msgid "Failed to save toggle settings. Returned status:" +msgstr "" +"L'enregistrement des paramÚtres d'activation/désactivation a échoué. État " +"renvoyé :" + +#: client/src/helpers/Credentials.js:327 +msgid "Failed to update Credential. PUT status:" +msgstr "La mise à jour des informations d'identification a échoué. État PUT :" + +#: client/src/controllers/Projects.js:623 +msgid "Failed to update project: %s. PUT status:" +msgstr "La mise à jour du projet a échoué : %s. État PUT :" + +#: client/src/notifications/notifications.list.js:49 +msgid "Failure" +msgstr "Défaillance" + +#: client/src/lists/CompletedJobs.js:56 +#: client/src/lists/PortalJobs.js:37 +msgid "Finished" +msgstr "Terminé" + +#: client/src/forms/Users.js:28 +#: client/src/lists/Users.js:41 +msgid "First Name" +msgstr "Prénom" + +#: client/src/helpers/Credentials.js:142 +msgid "For example, %s" +msgstr "Par exemple, %s" + +#: client/src/notifications/notificationTemplates.form.js:142 +#: client/src/notifications/notificationTemplates.form.js:159 +#: client/src/notifications/notificationTemplates.form.js:213 +#: client/src/notifications/notificationTemplates.form.js:333 +#: client/src/notifications/notificationTemplates.form.js:371 +#: client/src/notifications/notificationTemplates.form.js:98 +msgid "For example:" +msgstr "Par exemple :" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:54 +msgid "" +"For hosts that are part of an external inventory, this flag cannot be " +"changed. It will be set by the inventory sync process." +msgstr "" +"Pour les hÃŽtes qui font partie d'un inventaire externe, ce marqueur ne peut " +"pas être modifié. Il sera défini par le processus de synchronisation des " +"inventaires." + +#: client/src/forms/JobTemplates.js:223 +#: client/src/forms/WorkflowMaker.js:125 +msgid "" +"For more information and examples see %sthe Patterns topic at docs.ansible." +"com%s." +msgstr "" +"Pour obtenir plus d'informations et voir des exemples, reportez-vous à la " +"rubrique %Patterns sur docs.ansible.com%s." + +#: client/src/forms/JobTemplates.js:199 +#: client/src/forms/JobTemplates.js:212 +msgid "Forks" +msgstr "Forks" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:102 +msgid "GitHub" +msgstr "GitHub" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:103 +msgid "GitHub Org" +msgstr "GitHub Org" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:104 +msgid "GithHub Team" +msgstr "Équipe GithHub" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:105 +msgid "Google OAuth2" +msgstr "Google OAuth2" + +#: client/src/forms/Teams.js:118 +msgid "Granted Permissions" +msgstr "Permissions accordées" + +#: client/src/forms/Users.js:183 +msgid "Granted permissions" +msgstr "Permissions accordées" + +#: client/src/setup-menu/setup-menu.partial.html:5 +msgid "" +"Group all of your content to manage permissions across departments in your " +"company." +msgstr "" +"Regroupez l'ensemble du contenu pour gérer les permissions entre les " +"différents services de votre entreprise." + +#: client/src/notifications/notificationTemplates.form.js:324 +msgid "HTTP Headers" +msgstr "En-têtes HTTP" + +#: client/src/forms/Credentials.js:140 +#: client/src/notifications/notificationTemplates.form.js:72 +msgid "Host" +msgstr "HÃŽte" + +#: client/src/helpers/Credentials.js:131 +msgid "Host (Authentication URL)" +msgstr "HÃŽte (URL d'authentification)" + +#: client/src/forms/JobTemplates.js:326 +#: client/src/forms/JobTemplates.js:335 +msgid "Host Config Key" +msgstr "Clé de configuration de l'hÃŽte" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:55 +msgid "Host Enabled" +msgstr "HÃŽte activé" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:39 +msgid "Hosts" +msgstr "HÃŽtes" + +#: client/src/license/license.partial.html:52 +msgid "Hosts Available" +msgstr "HÃŽtes disponibles" + +#: client/src/license/license.partial.html:64 +msgid "Hosts Remaining" +msgstr "HÃŽtes restants" + +#: client/src/license/license.partial.html:58 +msgid "Hosts Used" +msgstr "HÃŽtes utilisés" + +#: client/src/license/license.partial.html:116 +msgid "I agree to the End User License Agreement" +msgstr "J'accepte le Contrat de licence de l'utilisateur final" + +#: client/src/main-menu/main-menu.partial.html:104 +#: client/src/main-menu/main-menu.partial.html:27 +msgid "INVENTORIES" +msgstr "INVENTAIRES" + +#: client/src/notifications/notificationTemplates.form.js:356 +msgid "IRC Nick" +msgstr "Surnom IRC" + +#: client/src/notifications/notificationTemplates.form.js:345 +msgid "IRC Server Address" +msgstr "Adresse du serveur IRC" + +#: client/src/notifications/shared/type-change.service.js:58 +msgid "IRC Server Password" +msgstr "Mot de passe du serveur IRC" + +#: client/src/notifications/shared/type-change.service.js:57 +msgid "IRC Server Port" +msgstr "Port du serveur IRC" + +#: client/src/forms/JobTemplates.js:291 +msgid "" +"If enabled, run this playbook as an administrator. This is the equivalent of " +"passing the %s option to the %s command." +msgstr "" +"Si cette option est activée, exécutez ce playbook en tant qu'administrateur. " +"Cette opération revient à transmettre l'option %s à la commande %s." + +#: client/src/forms/Credentials.js:54 +msgid "" +"If no organization is given, the credential can only be used by the user " +"that creates the credential. Organization admins and system administrators " +"can assign an organization so that roles for the credential can be assigned " +"to users and teams in that organization." +msgstr "" +"Si aucune organisation n'est renseignée, les informations d'identification " +"ne peuvent être utilisées que par l'utilisateur qui les crée. Les " +"administrateurs d'organisation et les administrateurs systÚme peuvent " +"assigner une organisation pour que les rÃŽles liés aux informations " +"d'identification puissent être associés aux utilisateurs et aux équipes de " +"cette organisation." + +#: client/src/license/license.partial.html:70 +msgid "" +"If you are ready to upgrade, please contact us by clicking the button below" +msgstr "" +"Si vous êtes prêt à effectuer une mise à niveau, contactez-nous en cliquant " +"sur le bouton ci-dessous" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:54 +msgid "" +"Indicates if a host is available and should be included in running jobs." +msgstr "" +"Indique si un hÃŽte est disponible et doit être ajouté aux tâches en cours " +"d'exécution." + +#: client/src/forms/JobTemplates.js:58 +msgid "" +"Instead, %s will check playbook syntax, test environment setup and report " +"problems." +msgstr "" +"À la place, %s vérifie la syntaxe du playbook, teste la configuration de " +"l'environnement et signale les problÚmes." + +#: client/src/license/license.partial.html:11 +msgid "Invalid License" +msgstr "Licence non valide" + +#: client/src/license/license.controller.js:69 +#: client/src/license/license.controller.js:76 +msgid "Invalid file format. Please upload valid JSON." +msgstr "Format de fichier non valide. Chargez un fichier JSON valide." + +#: client/src/login/loginModal/loginModal.partial.html:34 +msgid "Invalid username and/or password. Please try again." +msgstr "Nom d'utilisateur et/ou mot de passe non valide. Veuillez réessayer." + +#: client/src/dashboard/counts/dashboard-counts.directive.js:50 +#: client/src/lists/Inventories.js:16 +#: client/src/lists/Inventories.js:17 +msgid "Inventories" +msgstr "Inventaires" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:41 +#: client/src/forms/JobTemplates.js:73 +#: client/src/forms/JobTemplates.js:86 +#: client/src/forms/WorkflowMaker.js:79 +#: client/src/forms/WorkflowMaker.js:89 +msgid "Inventory" +msgstr "Inventaire" + +#: client/src/inventory-scripts/inventory-scripts.list.js:12 +#: client/src/setup-menu/setup-menu.partial.html:34 +msgid "Inventory Scripts" +msgstr "Scripts d'inventaire" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:46 +msgid "Inventory Sync" +msgstr "Synchronisation des inventaires" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:55 +msgid "Inventory Sync Failures" +msgstr "Erreurs de synchronisation des inventaires" + +#: client/src/forms/Inventories.js:67 +msgid "Inventory Variables" +msgstr "Variables d'inventaire" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:4 +msgid "JOB STATUS" +msgstr "ÉTAT DE LA TÂCHE" + +#: client/src/forms/JobTemplates.js:23 +msgid "JOB TEMPLATE" +msgstr "MODÈLES DE TÂCHE" + +#: client/src/app.js:429 +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:113 +#: client/src/main-menu/main-menu.partial.html:122 +#: client/src/main-menu/main-menu.partial.html:43 +msgid "JOBS" +msgstr "TÂCHES" + +#: client/src/forms/JobTemplates.js:248 +#: client/src/forms/JobTemplates.js:256 +#: client/src/forms/WorkflowMaker.js:134 +#: client/src/forms/WorkflowMaker.js:142 +msgid "Job Tags" +msgstr "Balises de tâche" + +#: client/src/lists/Templates.js:65 +msgid "Job Template" +msgstr "ModÚle de tâche" + +#: client/src/lists/PortalJobTemplates.js:15 +#: client/src/lists/PortalJobTemplates.js:16 +msgid "Job Templates" +msgstr "ModÚles de tâche" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:32 +#: client/src/forms/JobTemplates.js:48 +#: client/src/forms/JobTemplates.js:62 +#: client/src/forms/WorkflowMaker.js:110 +#: client/src/forms/WorkflowMaker.js:99 +msgid "Job Type" +msgstr "Type de tâche" + +#: client/src/lists/PortalJobs.js:15 +#: client/src/lists/PortalJobs.js:19 +#: client/src/partials/jobs.html:7 +msgid "Jobs" +msgstr "Tâches" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:106 +msgid "LDAP" +msgstr "LDAP" + +#: client/src/main-menu/main-menu.partial.html:83 +msgid "LOG OUT" +msgstr "SE DÉCONNECTER" + +#: client/src/notifications/notificationTemplates.form.js:270 +msgid "Label to be shown with notification" +msgstr "Libellé à afficher avec la notification" + +#: client/src/forms/JobTemplates.js:340 +#: client/src/forms/JobTemplates.js:345 +#: client/src/forms/Workflows.js:60 +#: client/src/forms/Workflows.js:65 +#: client/src/lists/Templates.js:47 +msgid "Labels" +msgstr "Libellés" + +#: client/src/forms/Users.js:35 +#: client/src/lists/Users.js:45 +msgid "Last Name" +msgstr "Nom" + +#: client/src/lists/Projects.js:53 +msgid "Last Updated" +msgstr "DerniÚre mise à jour" + +#: client/src/lists/PortalJobTemplates.js:39 +#: client/src/lists/Templates.js:84 +#: client/src/shared/form-generator.js:1703 +msgid "Launch" +msgstr "Lancer" + +#: client/src/management-jobs/card/card.partial.html:21 +msgid "Launch Management Job" +msgstr "Lancer la tâche de gestion" + +#: client/src/license/license.controller.js:42 +#: client/src/license/license.partial.html:8 +msgid "License" +msgstr "Licence" + +#: client/src/license/license.partial.html:102 +msgid "License File" +msgstr "Fichier de licence" + +#: client/src/license/license.partial.html:33 +msgid "License Key" +msgstr "Clé de licence" + +#: client/src/license/license.controller.js:42 +msgid "License Management" +msgstr "Gestion des licences" + +#: client/src/license/license.partial.html:21 +msgid "License Type" +msgstr "Type de licence" + +#: client/src/forms/JobTemplates.js:218 +#: client/src/forms/JobTemplates.js:225 +#: client/src/forms/WorkflowMaker.js:120 +#: client/src/forms/WorkflowMaker.js:127 +msgid "Limit" +msgstr "Limite" + +#: client/src/shared/socket/socket.service.js:170 +msgid "Live events: attempting to connect to the Tower server." +msgstr "Événements en direct : tentative de connexion au serveur Tower." + +#: client/src/shared/socket/socket.service.js:174 +msgid "" +"Live events: connected. Pages containing job status information will " +"automatically update in real-time." +msgstr "" +"Événements en direct : connecté. Les pages contenant des informations sur " +"l'état de la tâche seront automatiquement mises à jour en temps réel." + +#: client/src/shared/socket/socket.service.js:178 +msgid "Live events: error connecting to the Tower server." +msgstr "Événements en direct : erreur de connexion au serveur Tower." + +#: client/src/shared/form-generator.js:1977 +msgid "Loading..." +msgstr "Chargement en cours..." + +#: client/src/main-menu/main-menu.partial.html:188 +msgid "Log Out" +msgstr "Se déconnecter" + +#: client/src/configuration/system-form/configuration-system.controller.js:82 +msgid "Logging" +msgstr "Journalisation" + +#: client/src/management-jobs/card/card.route.js:21 +msgid "MANAGEMENT JOBS" +msgstr "TÂCHES DE GESTION" + +#: client/src/forms/Credentials.js:68 +msgid "Machine" +msgstr "Machine" + +#: client/src/forms/JobTemplates.js:137 +msgid "Machine Credential" +msgstr "Informations d'identification de la machine" + +#: client/src/setup-menu/setup-menu.partial.html:29 +msgid "" +"Manage the cleanup of old job history, activity streams, data marked for " +"deletion, and system tracking info." +msgstr "" +"Gérez le nettoyage de l'historique des anciennes tâches, des flux " +"d’activité, des données marquées pour suppression et des informations de " +"suivi du systÚme." + +#: client/src/helpers/Credentials.js:111 +msgid "Management Certificate" +msgstr "Certificat de gestion" + +#: client/src/management-jobs/card/card.partial.html:4 +#: client/src/setup-menu/setup-menu.partial.html:28 +msgid "Management Jobs" +msgstr "Tâches de gestion" + +#: client/src/controllers/Projects.js:62 +msgid "Manual projects do not require a schedule" +msgstr "Les projets manuels ne nécessitent pas de planification" + +#: client/src/controllers/Projects.js:547 +#: client/src/controllers/Projects.js:61 +msgid "Manual projects do not require an SCM update" +msgstr "Les projets manuels ne nécessitent pas de mise à jour SCM" + +#: client/src/login/loginModal/loginModal.partial.html:28 +msgid "Maximum per-user sessions reached. Please sign in." +msgstr "" +"Nombre maximum de sessions par utilisateur atteintes. Veuillez vous " +"connecter." + +#: client/src/configuration/system-form/configuration-system.controller.js:80 +msgid "Misc. System" +msgstr "SystÚme divers" + +#: client/src/portal-mode/portal-mode-jobs.partial.html:4 +msgid "My Jobs" +msgstr "Mes tâches" + +#: client/src/main-menu/main-menu.partial.html:160 +msgid "My View" +msgstr "Ma vue" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:18 +msgid "NO HOSTS FOUND" +msgstr "AUCUN HÔTE DÉTECTÉ" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:14 +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:13 +#: client/src/forms/Credentials.js:34 +#: client/src/forms/Inventories.js:29 +#: client/src/forms/JobTemplates.js:35 +#: client/src/forms/Organizations.js:26 +#: client/src/forms/Projects.js:31 +#: client/src/forms/Teams.js:126 +#: client/src/forms/Teams.js:27 +#: client/src/forms/Users.js:139 +#: client/src/forms/Users.js:164 +#: client/src/forms/Users.js:190 +#: client/src/forms/Workflows.js:34 +#: client/src/inventory-scripts/inventory-scripts.form.js:25 +#: client/src/inventory-scripts/inventory-scripts.list.js:20 +#: client/src/lists/CompletedJobs.js:43 +#: client/src/lists/Credentials.js:29 +#: client/src/lists/Inventories.js:46 +#: client/src/lists/PortalJobTemplates.js:24 +#: client/src/lists/PortalJobs.js:32 +#: client/src/lists/Projects.js:37 +#: client/src/lists/ScheduledJobs.js:32 +#: client/src/lists/Teams.js:25 +#: client/src/lists/Templates.js:26 +#: client/src/notifications/notificationTemplates.form.js:29 +#: client/src/notifications/notificationTemplates.list.js:33 +#: client/src/notifications/notifications.list.js:26 +msgid "Name" +msgstr "Nom" + +#: client/src/forms/Credentials.js:72 +msgid "Network" +msgstr "Réseau" + +#: client/src/forms/JobTemplates.js:182 +#: client/src/forms/JobTemplates.js:193 +msgid "Network Credential" +msgstr "Informations d'identification réseau" + +#: client/src/forms/JobTemplates.js:192 +msgid "" +"Network credentials are used by Ansible networking modules to connect to and " +"manage networking devices." +msgstr "" +"Les informations d'identification sont utilisées par les modules de mise en " +"réseau d'Ansible pour connecter et gérer les périphériques réseau." + +#: client/src/inventory-scripts/inventory-scripts.form.js:16 +msgid "New Custom Inventory" +msgstr "Nouvel inventaire personnalisé" + +#: client/src/forms/Inventories.js:18 +msgid "New Inventory" +msgstr "Nouvel inventaire" + +#: client/src/forms/JobTemplates.js:20 +msgid "New Job Template" +msgstr "Nouveau modÚle de tâche" + +#: client/src/notifications/notificationTemplates.form.js:16 +msgid "New Notification Template" +msgstr "Nouveau modÚle de notification" + +#: client/src/forms/Organizations.js:18 +msgid "New Organization" +msgstr "Nouvelle organisation" + +#: client/src/forms/Projects.js:18 +msgid "New Project" +msgstr "Nouveau projet" + +#: client/src/forms/Teams.js:18 +msgid "New Team" +msgstr "Nouvelle équipe" + +#: client/src/forms/Users.js:18 +msgid "New User" +msgstr "Nouvel utilisateur" + +#: client/src/forms/Workflows.js:19 +msgid "New Workflow Job Template" +msgstr "Nouveau modÚle de tâche Workflow" + +#: client/src/controllers/Users.js:174 +msgid "New user successfully created!" +msgstr "Création de l'utilisateur réussie" + +#: client/src/lists/ScheduledJobs.js:50 +msgid "Next Run" +msgstr "Exécution suivante" + +#: client/src/lists/Credentials.js:24 +msgid "No Credentials Have Been Created" +msgstr "Informations d'identification non créées" + +#: client/src/controllers/Projects.js:123 +msgid "No SCM Configuration" +msgstr "Aucune configuration SCM" + +#: client/src/controllers/Projects.js:114 +msgid "No Updates Available" +msgstr "Aucune mise à jour disponible" + +#: client/src/lists/CompletedJobs.js:22 +msgid "No completed jobs" +msgstr "Aucune tâche terminée" + +#: client/src/license/license.controller.js:41 +msgid "No file selected." +msgstr "Aucun fichier sélectionné." + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:46 +msgid "No jobs were recently run." +msgstr "Aucune tâche récemment exécutée." + +#: client/src/forms/Teams.js:123 +#: client/src/forms/Users.js:187 +msgid "No permissions have been granted" +msgstr "Aucune permission accordée" + +#: client/src/lists/ScheduledJobs.js:18 +msgid "No schedules exist" +msgstr "Aucune planification existante" + +#: client/src/controllers/Users.js:16 +msgid "Normal User" +msgstr "Utilisateur normal" + +#: client/src/controllers/Projects.js:64 +msgid "Not configured for SCM" +msgstr "Non configuré pour le SCM" + +#: client/src/notifications/notificationTemplates.form.js:293 +msgid "Notification Color" +msgstr "Couleur des notifications" + +#: client/src/notifications/notificationTemplates.list.js:14 +msgid "Notification Templates" +msgstr "ModÚles de notification" + +#: client/src/notifications/notifications.list.js:17 +#: client/src/setup-menu/setup-menu.partial.html:41 +msgid "Notifications" +msgstr "Notifications" + +#: client/src/notifications/notificationTemplates.form.js:306 +msgid "Notify Channel" +msgstr "Canal de notification" + +#: client/src/notifications/notificationTemplates.form.js:198 +msgid "Number associated with the \"Messaging Service\" in Twilio." +msgstr "Numéro associé au \"Service de messagerie\" de Twilio." + +#: client/src/shared/form-generator.js:547 +msgid "OFF" +msgstr "DÉSACTIVÉ" + +#: client/src/shared/form-generator.js:545 +msgid "ON" +msgstr "ACTIVÉ" + +#: client/src/organizations/list/organizations-list.partial.html:6 +msgid "ORGANIZATIONS" +msgstr "ORGANISATIONS" + +#: client/src/forms/WorkflowMaker.js:45 +msgid "On Failure" +msgstr "Lors d'un échec" + +#: client/src/forms/WorkflowMaker.js:40 +msgid "On Success" +msgstr "Lors d'une réussite" + +#: client/src/forms/Credentials.js:377 +msgid "" +"OpenStack domains define administrative boundaries. It is only needed for " +"Keystone v3 authentication URLs. Common scenarios include:" +msgstr "" +"Les domaines OpenStack définissent les limites administratives. Ils sont " +"nécessaires seulement pour les URL d'authentification Keystone v3. Les " +"scénarios courants incluent :" + +#: client/src/forms/JobTemplates.js:347 +#: client/src/forms/Workflows.js:67 +msgid "" +"Optional labels that describe this job template, such as 'dev' or 'test'. " +"Labels can be used to group and filter job templates and completed jobs in " +"the Tower display." +msgstr "" +"Libellés facultatifs décrivant ce modÚle de tâche, par exemple 'dev' ou " +"'test'. Les libellés peuvent être utilisés pour regrouper et filtrer les " +"modÚles de tâche et les tâches terminées dans l'affichage de Tower." + +#: client/src/forms/JobTemplates.js:284 +#: client/src/notifications/notificationTemplates.form.js:391 +msgid "Options" +msgstr "Options" + +#: client/src/forms/Credentials.js:49 +#: client/src/forms/Credentials.js:55 +#: client/src/forms/Inventories.js:42 +#: client/src/forms/Projects.js:43 +#: client/src/forms/Projects.js:49 +#: client/src/forms/Teams.js:39 +#: client/src/forms/Users.js:59 +#: client/src/forms/Workflows.js:47 +#: client/src/forms/Workflows.js:53 +#: client/src/inventory-scripts/inventory-scripts.form.js:37 +#: client/src/inventory-scripts/inventory-scripts.list.js:30 +#: client/src/lists/Inventories.js:52 +#: client/src/lists/Teams.js:35 +#: client/src/notifications/notificationTemplates.form.js:41 +msgid "Organization" +msgstr "Organisation" + +#: client/src/forms/Users.js:129 +#: client/src/setup-menu/setup-menu.partial.html:4 +msgid "Organizations" +msgstr "Organisations" + +#: client/src/forms/Credentials.js:80 +msgid "Others (Cloud Providers)" +msgstr "Autres (fournisseurs cloud)" + +#: client/src/lists/Credentials.js:45 +msgid "Owners" +msgstr "Propriétaires" + +#: client/src/login/loginModal/loginModal.partial.html:68 +msgid "PASSWORD" +msgstr "MOT DE PASSE" + +#: client/src/organizations/list/organizations-list.partial.html:44 +#: client/src/shared/form-generator.js:1880 +#: client/src/shared/list-generator/list-generator.factory.js:245 +msgid "PLEASE ADD ITEMS TO THIS LIST" +msgstr "AJOUTEZ DES ÉLÉMENTS À CETTE LISTE" + +#: client/src/main-menu/main-menu.partial.html:67 +msgid "PORTAL MODE" +msgstr "MODE PORTAIL" + +#: client/src/main-menu/main-menu.partial.html:19 +#: client/src/main-menu/main-menu.partial.html:95 +msgid "PROJECTS" +msgstr "PROJETS" + +#: client/src/notifications/notificationTemplates.form.js:237 +msgid "Pagerduty subdomain" +msgstr "Sous-domaine Pagerduty" + +#: client/src/forms/JobTemplates.js:358 +#: client/src/forms/Workflows.js:78 +msgid "" +"Pass extra command line variables to the playbook. This is the %s or %s " +"command line parameter for %s. Provide key/value pairs using either YAML or " +"JSON." +msgstr "" +"Transmettez des variables de ligne de commande supplémentaires au playbook. " +"Il s'agit du paramÚtre de ligne de commande %s ou %s pour %s. Entrez des " +"paires clé/valeur avec la syntaxe YAML ou JSON." + +#: client/src/forms/Credentials.js:227 +#: client/src/forms/Users.js:70 +#: client/src/helpers/Credentials.js:119 +#: client/src/helpers/Credentials.js:127 +#: client/src/helpers/Credentials.js:147 +#: client/src/helpers/Credentials.js:156 +#: client/src/helpers/Credentials.js:165 +#: client/src/helpers/Credentials.js:45 +#: client/src/helpers/Credentials.js:94 +#: client/src/notifications/shared/type-change.service.js:28 +msgid "Password" +msgstr "Mot de passe" + +#: client/src/helpers/Credentials.js:73 +msgid "Password (API Key)" +msgstr "Mot de passe (clé API)" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:20 +msgid "Past 24 Hours" +msgstr "AprÚs 24 heures" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:15 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:26 +msgid "Past Month" +msgstr "Le mois dernier" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:23 +msgid "Past Week" +msgstr "La semaine derniÚre" + +#: client/src/helpers/Credentials.js:102 +msgid "" +"Paste the contents of the PEM file associated with the service account email." +"" +msgstr "" +"Collez le contenu du fichier PEM associé à l'adresse électronique du compte " +"de service." + +#: client/src/helpers/Credentials.js:114 +msgid "" +"Paste the contents of the PEM file that corresponds to the certificate you " +"uploaded in the Microsoft Azure console." +msgstr "" +"Collez le contenu du fichier PEM correspondant au certificat que vous avez " +"chargé dans la console Microsoft Azure." + +#: client/src/helpers/Credentials.js:66 +msgid "Paste the contents of the SSH private key file." +msgstr "Collez le contenu du fichier de clé privée SSH." + +#: client/src/helpers/Credentials.js:41 +msgid "Paste the contents of the SSH private key file.%s or click to close%s" +msgstr "" +"Collez le contenu du fichier de clé privée SSH.%s ou cliquez pour fermer%s" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:8 +msgid "Period" +msgstr "Période" + +#: client/src/controllers/Projects.js:284 +#: client/src/controllers/Users.js:141 +msgid "Permission Error" +msgstr "Erreur de permission" + +#: client/src/forms/Credentials.js:432 +#: client/src/forms/Inventories.js:142 +#: client/src/forms/JobTemplates.js:403 +#: client/src/forms/Organizations.js:64 +#: client/src/forms/Projects.js:227 +#: client/src/forms/Workflows.js:116 +msgid "Permissions" +msgstr "Permissions" + +#: client/src/forms/JobTemplates.js:120 +#: client/src/forms/JobTemplates.js:131 +msgid "Playbook" +msgstr "Playbook" + +#: client/src/forms/Projects.js:89 +msgid "Playbook Directory" +msgstr "Répertoire de playbooks" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:52 +msgid "Playbook Run" +msgstr "Exécution du playbook" + +#: client/src/license/license.partial.html:84 +msgid "" +"Please click the button below to visit Ansible's website to get a Tower " +"license key." +msgstr "" +"Cliquez sur le bouton ci-dessous pour visiter le site Web d'Ansible afin " +"d'obtenir une clé de licence Tower." + +#: client/src/shared/form-generator.js:828 +#: client/src/shared/form-generator.js:953 +msgid "" +"Please enter a URL that begins with ssh, http or https. The URL may not " +"contain the '@' character." +msgstr "" +"Veuillez saisir une URL commençant par ssh, http ou https. L'URL ne doit pas " +"contenir le caractÚre '@'." + +#: client/src/shared/form-generator.js:1189 +msgid "Please enter a number greater than %d and less than %d." +msgstr "Entrez un nombre supérieur à %d et inférieur à %d." + +#: client/src/shared/form-generator.js:1191 +msgid "Please enter a number greater than %d." +msgstr "Entrez un nombre supérieur à %d." + +#: client/src/shared/form-generator.js:1183 +msgid "Please enter a number." +msgstr "Entrez un nombre." + +#: client/src/login/loginModal/loginModal.partial.html:78 +msgid "Please enter a password." +msgstr "Entrez un mot de passe." + +#: client/src/login/loginModal/loginModal.partial.html:58 +msgid "Please enter a username." +msgstr "Entrez un nom d'utilisateur." + +#: client/src/shared/form-generator.js:818 +#: client/src/shared/form-generator.js:943 +msgid "Please enter a valid email address." +msgstr "Entrez une adresse électronique valide." + +#: client/src/shared/form-generator.js:1044 +#: client/src/shared/form-generator.js:813 +#: client/src/shared/form-generator.js:938 +msgid "Please enter a value." +msgstr "Entrez une valeur." + +#: client/src/lists/CompletedJobs.js:13 +msgid "Please save and run a job to view" +msgstr "Veuillez enregistrer et exécuter une tâche à afficher" + +#: client/src/notifications/notifications.list.js:15 +msgid "Please save before adding notifications" +msgstr "Veuillez enregistrer avant d'ajouter des notifications" + +#: client/src/forms/Teams.js:69 +msgid "Please save before adding users" +msgstr "Veuillez enregistrer avant d'ajouter des utilisateurs" + +#: client/src/forms/Inventories.js:138 +#: client/src/forms/Inventories.js:91 +#: client/src/forms/JobTemplates.js:396 +#: client/src/forms/Organizations.js:57 +#: client/src/forms/Projects.js:219 +#: client/src/forms/Teams.js:110 +#: client/src/forms/Workflows.js:109 +msgid "Please save before assigning permissions" +msgstr "Veuillez enregistrer avant d'attribuer des permissions" + +#: client/src/forms/Users.js:122 +#: client/src/forms/Users.js:179 +msgid "Please save before assigning to organizations" +msgstr "Veuillez enregistrer avant l'attribution à des organisations" + +#: client/src/forms/Users.js:148 +msgid "Please save before assigning to teams" +msgstr "Veuillez enregistrer avant l'attribution à des équipes" + +#: client/src/forms/Workflows.js:185 +msgid "Please save before defining the workflow graph" +msgstr "Veuillez enregistrer avant de définir le graphique du workflow" + +#: client/src/forms/WorkflowMaker.js:65 +msgid "Please select a Credential." +msgstr "Sélectionnez des informations d'identification." + +#: client/src/forms/JobTemplates.js:150 +msgid "" +"Please select a Machine Credential or check the Prompt on launch option." +msgstr "" +"Sélectionnez les informations d'identification de la machine ou cochez " +"l'option Me le demander au lancement." + +#: client/src/shared/form-generator.js:1224 +msgid "Please select a number between" +msgstr "Sélectionnez un nombre compris entre" + +#: client/src/shared/form-generator.js:1220 +msgid "Please select a number." +msgstr "Sélectionnez un nombre." + +#: client/src/shared/form-generator.js:1111 +#: client/src/shared/form-generator.js:1180 +#: client/src/shared/form-generator.js:1298 +#: client/src/shared/form-generator.js:1403 +msgid "Please select a value." +msgstr "Sélectionnez une valeur." + +#: client/src/forms/JobTemplates.js:83 +msgid "Please select an Inventory or check the Prompt on launch option." +msgstr "" +"Sélectionnez un inventaire ou cochez l'option Me le demander au lancement." + +#: client/src/forms/WorkflowMaker.js:86 +msgid "Please select an Inventory." +msgstr "Sélectionnez un inventaire." + +#: client/src/shared/form-generator.js:1217 +msgid "Please select at least one value." +msgstr "Sélectionnez une valeur au moins." + +#: client/src/notifications/shared/type-change.service.js:27 +msgid "Port" +msgstr "Port" + +#: client/src/forms/Credentials.js:257 +#: client/src/helpers/Credentials.js:36 +#: client/src/helpers/Credentials.js:60 +msgid "Private Key" +msgstr "Clé privée" + +#: client/src/forms/Credentials.js:264 +msgid "Private Key Passphrase" +msgstr "Phrase de passe pour la clé privée" + +#: client/src/forms/Credentials.js:279 +#: client/src/forms/Credentials.js:283 +msgid "Privilege Escalation" +msgstr "Élévation des privilÚges" + +#: client/src/helpers/Credentials.js:90 +msgid "Privilege Escalation Password" +msgstr "Mot de passe pour l'élévation des privilÚges" + +#: client/src/helpers/Credentials.js:89 +msgid "Privilege Escalation Username" +msgstr "Nom d'utilisateur pour l'élévation des privilÚges" + +#: client/src/forms/JobTemplates.js:114 +#: client/src/forms/JobTemplates.js:97 +#: client/src/helpers/Credentials.js:103 +msgid "Project" +msgstr "Projet" + +#: client/src/helpers/Credentials.js:132 +msgid "Project (Tenant Name)" +msgstr "Projet (nom du client)" + +#: client/src/forms/Projects.js:75 +#: client/src/forms/Projects.js:83 +msgid "Project Base Path" +msgstr "Chemin de base du projet" + +#: client/src/forms/Credentials.js:363 +msgid "Project Name" +msgstr "Nom du projet" + +#: client/src/forms/Projects.js:100 +msgid "Project Path" +msgstr "Chemin du projet" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:66 +msgid "Project Sync Failures" +msgstr "Erreurs de synchronisation du projet" + +#: client/src/controllers/Projects.js:134 +msgid "Project lookup failed. GET returned:" +msgstr "La recherche de projet n'a pas abouti. GET renvoyé :" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:61 +#: client/src/lists/Projects.js:16 +#: client/src/lists/Projects.js:17 +msgid "Projects" +msgstr "Projets" + +#: client/src/forms/JobTemplates.js:159 +#: client/src/forms/JobTemplates.js:230 +#: client/src/forms/JobTemplates.js:261 +#: client/src/forms/JobTemplates.js:279 +#: client/src/forms/JobTemplates.js:369 +#: client/src/forms/JobTemplates.js:68 +#: client/src/forms/JobTemplates.js:92 +msgid "Prompt on launch" +msgstr "Me le demander au lancement" + +#: client/src/forms/JobTemplates.js:253 +#: client/src/forms/JobTemplates.js:271 +#: client/src/forms/WorkflowMaker.js:139 +#: client/src/forms/WorkflowMaker.js:154 +msgid "Provide a comma separated list of tags." +msgstr "Entrez une liste de balises séparées par des virgules." + +#: client/src/forms/JobTemplates.js:221 +#: client/src/forms/WorkflowMaker.js:123 +msgid "" +"Provide a host pattern to further constrain the list of hosts that will be " +"managed or affected by the playbook. Multiple patterns can be separated by " +"%s %s or %s" +msgstr "" +"Entrez un modÚle d'hÃŽte pour limiter davantage la liste des hÃŽtes qui seront " +"gérés ou attribués par le playbook. Plusieurs modÚles peuvent être séparés " +"par des % s% s ou des % s" + +#: client/src/forms/JobTemplates.js:313 +#: client/src/forms/JobTemplates.js:321 +msgid "Provisioning Callback URL" +msgstr "URL de rappel d'exécution de Tower job_template" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:107 +msgid "RADIUS" +msgstr "RADIUS" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:4 +msgid "RECENT JOB RUNS" +msgstr "RÉCENTES EXÉCUTIONS DE TÂCHE" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:42 +msgid "RECENTLY RUN JOBS" +msgstr "TÂCHES RÉCEMMENT EXÉCUTÉES" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:4 +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:52 +msgid "RECENTLY USED JOB TEMPLATES" +msgstr "MODÈLES DE TÂCHE RÉCEMMENT UTILISÉS" + +#: client/src/lists/Projects.js:76 +#: client/src/partials/jobs.html:15 +#: client/src/portal-mode/portal-mode-jobs.partial.html:12 +msgid "REFRESH" +msgstr "ACTUALISER" + +#: client/src/forms/JobTemplates.js:99 +msgid "RESET" +msgstr "RÉINITIALISER" + +#: client/src/helpers/Credentials.js:98 +msgid "RSA Private Key" +msgstr "Clé privée RSA" + +#: client/src/notifications/notificationTemplates.form.js:94 +#: client/src/notifications/notificationTemplates.form.js:99 +msgid "Recipient List" +msgstr "Liste de destinataires" + +#: client/src/bread-crumb/bread-crumb.partial.html:6 +#: client/src/lists/Projects.js:72 +msgid "Refresh the page" +msgstr "Actualiser la page" + +#: client/src/lists/CompletedJobs.js:75 +msgid "Relaunch using the same parameters" +msgstr "Relancer en utilisant les mêmes paramÚtres" + +#: client/src/forms/Teams.js:144 +#: client/src/forms/Users.js:214 +msgid "Remove" +msgstr "Supprimer" + +#: client/src/forms/Projects.js:153 +msgid "Remove any local modifications prior to performing an update." +msgstr "" +"Supprimez toutes les modifications locales avant d'effectuer une mise à jour." +"" + +#: client/src/license/license.partial.html:89 +msgid "Request License" +msgstr "Demander une licence" + +#: client/src/configuration/auth-form/sub-forms/auth-azure.form.js:41 +#: client/src/configuration/auth-form/sub-forms/auth-github-org.form.js:31 +#: client/src/configuration/auth-form/sub-forms/auth-github-team.form.js:31 +#: client/src/configuration/auth-form/sub-forms/auth-github.form.js:27 +#: client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js:39 +#: client/src/configuration/auth-form/sub-forms/auth-ldap.form.js:87 +#: client/src/configuration/auth-form/sub-forms/auth-radius.form.js:32 +#: client/src/configuration/auth-form/sub-forms/auth-saml.form.js:59 +#: client/src/configuration/jobs-form/configuration-jobs.form.js:67 +#: client/src/configuration/system-form/configuration-system.form.js:41 +#: client/src/configuration/system-form/sub-forms/system-activity-stream.form.js:25 +#: client/src/configuration/system-form/sub-forms/system-logging.form.js:50 +#: client/src/configuration/system-form/sub-forms/system-misc.form.js:29 +#: client/src/configuration/ui-form/configuration-ui.form.js:35 +msgid "Reset All" +msgstr "Tout réinitialiser" + +#: client/src/lists/Projects.js:42 +msgid "Revision" +msgstr "Révision" + +#: client/src/controllers/Projects.js:657 +msgid "Revision #" +msgstr "Révision n°" + +#: client/src/forms/Credentials.js:454 +#: client/src/forms/Inventories.js:120 +#: client/src/forms/Inventories.js:166 +#: client/src/forms/Organizations.js:88 +#: client/src/forms/Projects.js:249 +#: client/src/forms/Teams.js:137 +#: client/src/forms/Teams.js:99 +#: client/src/forms/Users.js:201 +msgid "Role" +msgstr "RÃŽle" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:108 +msgid "SAML" +msgstr "SAML" + +#: client/src/controllers/Projects.js:657 +msgid "SCM Branch" +msgstr "Branche SCM" + +#: client/src/forms/Projects.js:154 +msgid "SCM Clean" +msgstr "Nettoyage SCM" + +#: client/src/forms/Projects.js:130 +msgid "SCM Credential" +msgstr "Information d'identification SCM" + +#: client/src/forms/Projects.js:165 +msgid "SCM Delete" +msgstr "Suppression SCM" + +#: client/src/helpers/Credentials.js:93 +msgid "SCM Private Key" +msgstr "Clé privée SCM" + +#: client/src/forms/Projects.js:56 +msgid "SCM Type" +msgstr "Type SCM" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:49 +#: client/src/forms/Projects.js:175 +msgid "SCM Update" +msgstr "Mise à jour SCM" + +#: client/src/controllers/Projects.js:176 +msgid "SCM Update Cancel" +msgstr "Annulation de la mise à jour SCM" + +#: client/src/forms/Projects.js:145 +msgid "SCM Update Options" +msgstr "Options de mise à jour SCM" + +#: client/src/controllers/Projects.js:543 +#: client/src/controllers/Projects.js:57 +msgid "SCM update currently running" +msgstr "Mise à jour SCM en cours" + +#: client/src/main-menu/main-menu.partial.html:59 +msgid "SETTINGS" +msgstr "PARAMÈTRES" + +#: client/src/login/loginModal/loginModal.partial.html:97 +msgid "SIGN IN" +msgstr "SE CONNECTER" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.partial.html:2 +msgid "SIGN IN WITH" +msgstr "SE CONNECTER AVEC" + +#: client/src/app.js:513 +msgid "SOCKETS" +msgstr "SOCKETS" + +#: client/src/helpers/Credentials.js:166 +msgid "SSH Key" +msgstr "Clé SSH" + +#: client/src/forms/Credentials.js:255 +msgid "SSH key description" +msgstr "Description de la clé SSH" + +#: client/src/notifications/notificationTemplates.form.js:384 +msgid "SSL Connection" +msgstr "Connexion SSL" + +#: client/src/forms/Credentials.js:120 +#: client/src/forms/Credentials.js:128 +msgid "STS Token" +msgstr "Token STS" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:64 +msgid "SUCCESSFUL" +msgstr "RÉUSSI" + +#: client/src/helpers/Credentials.js:149 +msgid "Satellite 6 Host" +msgstr "HÃŽte Satellite 6" + +#: client/src/shared/form-generator.js:1687 +msgid "Save" +msgstr "Enregistrer" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:81 +#: client/src/configuration/configuration.controller.js:181 +#: client/src/configuration/configuration.controller.js:240 +#: client/src/configuration/system-form/configuration-system.controller.js:60 +msgid "Save changes" +msgstr "Enregistrer les modifications" + +#: client/src/license/license.partial.html:122 +msgid "Save successful!" +msgstr "Enregistrement réussi" + +#: client/src/lists/Templates.js:92 +msgid "Schedule" +msgstr "Planifier" + +#: client/src/management-jobs/card/card.partial.html:26 +msgid "Schedule Management Job" +msgstr "Planifier la tâche de gestion" + +#: client/src/controllers/Projects.js:49 +msgid "Schedule future SCM updates" +msgstr "Planifier les prochaines mises à jour SCM" + +#: client/src/lists/Templates.js:95 +msgid "Schedule future job template runs" +msgstr "Planifier les prochaines exécutions de modÚle de tâche" + +#: client/src/lists/ScheduledJobs.js:15 +msgid "Scheduled Jobs" +msgstr "Tâches planifiées" + +#: client/src/partials/jobs.html:10 +msgid "Schedules" +msgstr "Calendriers" + +#: client/src/inventory-scripts/inventory-scripts.form.js:59 +msgid "Script must begin with a hashbang sequence: i.e.... %s" +msgstr "Le script doit commencer par une séquence hashbang : c.-à-d. ....%s" + +#: client/src/forms/Credentials.js:105 +msgid "Secret Key" +msgstr "Clé secrÚte" + +#: client/src/forms/Credentials.js:125 +msgid "" +"Security Token Service (STS) is a web service that enables you to request " +"temporary, limited-privilege credentials for AWS Identity and Access " +"Management (IAM) users." +msgstr "" +"Le service de jeton de sécurité (STS) est un service Web qui permet de " +"demander des informations d'identification provisoires avec des privilÚges " +"limités pour les utilisateurs d'AWS Identity and Access Management (IAM)." + +#: client/src/shared/form-generator.js:1691 +msgid "Select" +msgstr "Sélectionner" + +#: client/src/configuration/jobs-form/configuration-jobs.controller.js:87 +#: client/src/configuration/ui-form/configuration-ui.controller.js:82 +msgid "Select commands" +msgstr "Sélectionner des commandes" + +#: client/src/forms/Projects.js:98 +msgid "" +"Select from the list of directories found in the Project Base Path. Together " +"the base path and the playbook directory provide the full path used to " +"locate playbooks." +msgstr "" +"Faites une sélection à partir de la liste des répertoires trouvés dans le " +"chemin de base du projet. Le chemin de base et le répertoire de playbook " +"fournissent ensemble le chemin complet servant à localiser les playbooks." + +#: client/src/configuration/auth-form/configuration-auth.controller.js:226 +msgid "Select group types" +msgstr "Sélectionner des types de groupe" + +#: client/src/forms/JobTemplates.js:152 +#: client/src/forms/WorkflowMaker.js:67 +msgid "" +"Select the credential you want the job to use when accessing the remote " +"hosts. Choose the credential containing the username and SSH key or " +"password that Ansible will need to log into the remote hosts." +msgstr "" +"Sélectionnez les informations d'identification que la tâche doit utiliser " +"lors de l'accÚs à des hÃŽtes distants. Choisissez les informations " +"d'identification contenant le nom d'utilisateur et la clé SSH ou le mot de " +"passe dont Ansible aura besoin pour se connecter aux hÃŽtes distants." + +#: client/src/forms/JobTemplates.js:85 +#: client/src/forms/WorkflowMaker.js:88 +msgid "Select the inventory containing the hosts you want this job to manage." +msgstr "" +"Sélectionnez l'inventaire contenant les hÃŽtes que vous souhaitez gérer." + +#: client/src/forms/JobTemplates.js:130 +msgid "Select the playbook to be executed by this job." +msgstr "Sélectionnez le playbook qui devra être exécuté par cette tâche." + +#: client/src/forms/JobTemplates.js:113 +msgid "" +"Select the project containing the playbook you want this job to execute." +msgstr "" +"Sélectionnez le projet contenant le playbook que cette tâche devra exécuter." + +#: client/src/configuration/system-form/configuration-system.controller.js:167 +msgid "Select types" +msgstr "Sélectionner des types" + +#: client/src/forms/JobTemplates.js:174 +msgid "" +"Selecting an optional cloud credential in the job template will pass along " +"the access credentials to the running playbook, allowing provisioning into " +"the cloud without manually passing parameters to the included modules." +msgstr "" +"La sélection d'informations identification cloud facultatives dans le modÚle " +"de tâche transmettra les informations d'identification d'accÚs au playbook " +"en cours d'exécution, ce qui permet une authentification dans le cloud sans " +"transmettre manuellement les paramÚtres aux modules inclus." + +#: client/src/notifications/notificationTemplates.form.js:83 +msgid "Sender Email" +msgstr "Adresse électronique de l'expéditeur" + +#: client/src/helpers/Credentials.js:97 +msgid "Service Account Email Address" +msgstr "Adresse électronique du compte de service" + +#: client/src/forms/JobTemplates.js:60 +#: client/src/forms/WorkflowMaker.js:108 +msgid "" +"Setting the type to %s will execute the playbook and store any scanned " +"facts for use with Tower's System Tracking feature." +msgstr "" +"La définition du type sur %s exécute le playbook et stocke tous les faits " +"scannés à utiliser avec la fonctionnalité de suivi System Tracking de Tower." + +#: client/src/forms/JobTemplates.js:57 +msgid "Setting the type to %s will not execute the playbook." +msgstr "La définition du type sur %s n'exécute pas le playbook." + +#: client/src/forms/WorkflowMaker.js:106 +msgid "" +"Setting the type to %s will not execute the playbook. Instead, %s will check " +"playbook syntax, test environment setup and report problems." +msgstr "" +"La définition du type sur %s n'exécute pas le playbook. À la place, %s " +"vérifie la syntaxe du playbook, teste la configuration de l'environnement et " +"signale les problÚmes." + +#: client/src/main-menu/main-menu.partial.html:147 +msgid "Settings" +msgstr "ParamÚtres" + +#: client/src/shared/form-generator.js:843 +msgid "Show" +msgstr "Afficher" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:34 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:45 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:56 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:77 +msgid "Sign in with %s" +msgstr "Se connecter avec %s" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:64 +msgid "Sign in with %s Organizations" +msgstr "Se connecter avec des organisations %s" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:62 +msgid "Sign in with %s Teams" +msgstr "Se connecter avec des équipes %s" + +#: client/src/forms/JobTemplates.js:266 +#: client/src/forms/JobTemplates.js:274 +#: client/src/forms/WorkflowMaker.js:149 +#: client/src/forms/WorkflowMaker.js:157 +msgid "Skip Tags" +msgstr "Balises de saut" + +#: client/src/forms/JobTemplates.js:272 +#: client/src/forms/WorkflowMaker.js:155 +msgid "" +"Skip tags are useful when you have a large playbook, and you want to skip " +"specific parts of a play or task." +msgstr "" +"Les balises de saut sont utiles si votre playbook est important et que vous " +"souhaitez ignorer certaines parties d'une scÚne ou d'une tâche." + +#: client/src/forms/Credentials.js:76 +msgid "Source Control" +msgstr "ContrÃŽle de la source" + +#: client/src/forms/Projects.js:27 +msgid "Source Details" +msgstr "Détails de la source" + +#: client/src/notifications/notificationTemplates.form.js:196 +msgid "Source Phone Number" +msgstr "Numéro de téléphone de la source" + +#: client/src/notifications/notificationTemplates.form.js:332 +msgid "Specify HTTP Headers in JSON format" +msgstr "Spécifier les en-têtes HTTP au format JSON" + +#: client/src/forms/Credentials.js:285 +msgid "" +"Specify a method for %s operations. This is equivalent to specifying the %s " +"parameter, where %s could be %s" +msgstr "" +"Spécifiez une méthode pour les opérations %s. Cela équivaut à définir le " +"paramÚtre %s, où %s peut être %s" + +#: client/src/setup-menu/setup-menu.partial.html:17 +msgid "" +"Split up your organization to associate content and control permissions for " +"groups." +msgstr "" +"Divisez votre organisation afin d'associer du contenu et des permissions de " +"contrÃŽle pour les groupes." + +#: client/src/lists/PortalJobTemplates.js:42 +#: client/src/lists/Templates.js:87 +msgid "Start a job using this template" +msgstr "Démarrer une tâche avec ce modÚle" + +#: client/src/controllers/Projects.js:48 +#: client/src/controllers/Projects.js:540 +msgid "Start an SCM update" +msgstr "Démarrer une mise à jour SCM" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:49 +msgid "Status" +msgstr "État" + +#: client/src/license/license.partial.html:121 +msgid "Submit" +msgstr "Valider" + +#: client/src/license/license.partial.html:27 +msgid "Subscription" +msgstr "Abonnement" + +#: client/src/forms/Credentials.js:152 +#: client/src/forms/Credentials.js:163 +msgid "Subscription ID" +msgstr "ID d'abonnement" + +#: client/src/forms/Credentials.js:162 +msgid "Subscription ID is an Azure construct, which is mapped to a username." +msgstr "" +"L'ID d'abonnement est une construction Azure mappée à un nom d'utilisateur." + +#: client/src/notifications/notifications.list.js:38 +msgid "Success" +msgstr "Réussite" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:77 +msgid "Successful" +msgstr "Réussi" + +#: client/src/controllers/Users.js:18 +msgid "System Administrator" +msgstr "Administrateur systÚme" + +#: client/src/controllers/Users.js:17 +msgid "System Auditor" +msgstr "Auditeur systÚme" + +#: client/src/app.js:341 +msgid "TEAMS" +msgstr "ÉQUIPES" + +#: client/src/main-menu/main-menu.partial.html:113 +#: client/src/main-menu/main-menu.partial.html:35 +msgid "TEMPLATES" +msgstr "MODÈLES" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:106 +msgid "TIME" +msgstr "DURÉE" + +#: client/src/forms/JobTemplates.js:254 +#: client/src/forms/WorkflowMaker.js:140 +msgid "" +"Tags are useful when you have a large playbook, and you want to run a " +"specific part of a play or task." +msgstr "" +"Les balises sont utiles si votre playbook est important et que vous " +"souhaitez exécuter une partie donnée d'une scÚne ou d'une tâche." + +#: client/src/notifications/notificationTemplates.form.js:313 +msgid "Target URL" +msgstr "URL cible" + +#: client/src/forms/Credentials.js:461 +#: client/src/forms/Inventories.js:126 +#: client/src/forms/Inventories.js:173 +#: client/src/forms/Organizations.js:95 +#: client/src/forms/Projects.js:255 +msgid "Team Roles" +msgstr "RÃŽles d'équipe" + +#: client/src/forms/Users.js:155 +#: client/src/lists/Teams.js:16 +#: client/src/lists/Teams.js:17 +#: client/src/setup-menu/setup-menu.partial.html:16 +msgid "Teams" +msgstr "Équipes" + +#: client/src/lists/Templates.js:16 +msgid "Template" +msgstr "ModÚle" + +#: client/src/lists/Templates.js:17 +#: client/src/lists/Templates.js:18 +msgid "Templates" +msgstr "ModÚles" + +#: client/src/forms/Credentials.js:335 +msgid "Tenant ID" +msgstr "ID Client" + +#: client/src/notifications/notificationTemplates.list.js:65 +msgid "Test notification" +msgstr "Notification test" + +#: client/src/shared/form-generator.js:1409 +msgid "That value was not found. Please enter or select a valid value." +msgstr "" +"Cette valeur n'a pas été trouvée. Veuillez entrer ou sélectionner une valeur " +"valide." + +#: client/src/helpers/Credentials.js:105 +msgid "" +"The Project ID is the GCE assigned identification. It is constructed as two " +"words followed by a three digit number. Such as:" +msgstr "" +"L'ID du projet est l'identifiant attribué par GCE. Il se compose de deux " +"mots suivis d'un nombre à trois chiffres. Exemple :" + +#: client/src/controllers/Projects.js:693 +msgid "The SCM update process is running." +msgstr "Le processus de mise à jour SCM est en cours d'exécution." + +#: client/src/forms/Credentials.js:191 +msgid "" +"The email address assigned to the Google Compute Engine %sservice account." +msgstr "" +"Adresse électronique attribuée au compte de service Google Compute Engine %s." +"" + +#: client/src/helpers/Credentials.js:141 +msgid "The host to authenticate with." +msgstr "HÃŽte avec lequel s'authentifier." + +#: client/src/helpers/Credentials.js:75 +msgid "The host value" +msgstr "Valeur de l'hÃŽte" + +#: client/src/forms/JobTemplates.js:208 +msgid "" +"The number of parallel or simultaneous processes to use while executing the " +"playbook. 0 signifies the default value from the %sansible configuration " +"file%s." +msgstr "" +"Nombre de processus parallÚles ou simultanés à utiliser lors de l'exécution " +"du playbook. 0 indique la valeur par défaut du %sfichier de configuration " +"ansible%s." + +#: client/src/helpers/Credentials.js:74 +msgid "The project value" +msgstr "Valeur du projet" + +#: client/src/controllers/Projects.js:123 +msgid "" +"The selected project is not configured for SCM. To configure for SCM, edit " +"the project and provide SCM settings, and then run an update." +msgstr "" +"Le projet sélectionné n'est pas configuré pour SCM. Afin de le configurer " +"pour SCM, modifiez le projet et définissez les paramÚtres SCM, puis lancez " +"une mise à jour." + +#: client/src/lists/PortalJobTemplates.js:20 +msgid "There are no job templates to display at this time" +msgstr "Aucun modÚle de tâche à afficher pour le moment" + +#: client/src/lists/PortalJobs.js:20 +msgid "There are no jobs to display at this time" +msgstr "Aucune tâche à afficher pour le moment" + +#: client/src/controllers/Projects.js:114 +msgid "" +"There is no SCM update information available for this project. An update has " +"not yet been completed. If you have not already done so, start an update " +"for this project." +msgstr "" +"Aucune information de mise à jour SCM n'est disponible pour ce projet. Une " +"mise à jour n'est pas encore terminée. Si vous n'avez pas encore lancé une " +"mise à jour pour ce projet, faites-le." + +#: client/src/configuration/configuration.controller.js:293 +msgid "There was an error resetting value. Returned status:" +msgstr "" +"Une erreur s'est produite lors de la réinitialisation de la valeur. État " +"renvoyé :" + +#: client/src/configuration/configuration.controller.js:424 +msgid "There was an error resetting values. Returned status:" +msgstr "" +"Une erreur s'est produite lors de la réinitialisation des valeurs. État " +"renvoyé :" + +#: client/src/helpers/Credentials.js:138 +msgid "" +"This is the tenant name. This value is usually the same as the username." +msgstr "" +"Il s'agit du nom du client. Cette valeur est habituellement la même que " +"celle du nom d'utilisateur." + +#: client/src/notifications/notifications.list.js:21 +msgid "" +"This list is populated by notification templates added from the " +"%sNotifications%s section" +msgstr "" +"Cette liste contient des modÚles de notification ajoutés à partir de la " +"section %sNotifications%s" + +#: client/src/notifications/notificationTemplates.form.js:199 +msgid "This must be of the form %s." +msgstr "Elle doit se présenter au format %s." + +#: client/src/forms/Users.js:160 +msgid "This user is not a member of any teams" +msgstr "Cet utilisateur n'est pas membre d'une équipe" + +#: client/src/shared/form-generator.js:823 +#: client/src/shared/form-generator.js:948 +msgid "" +"This value does not match the password you entered previously. Please " +"confirm that password." +msgstr "" +"Cette valeur ne correspond pas au mot de passe que vous avez entré " +"précédemment. Veuillez confirmer ce mot de passe." + +#: client/src/configuration/configuration.controller.js:449 +msgid "" +"This will reset all configuration values to their factory defaults. Are you " +"sure you want to proceed?" +msgstr "" +"Cette opération rétablit toutes les valeurs de configuration sur leurs " +"valeurs par défaut. Voulez-vous vraiment continuer ?" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:14 +msgid "Time" +msgstr "Durée" + +#: client/src/license/license.partial.html:45 +msgid "Time Remaining" +msgstr "Durée restante" + +#: client/src/forms/Projects.js:191 +msgid "" +"Time in seconds to consider a project to be current. During job runs and " +"callbacks the task system will evaluate the timestamp of the latest project " +"update. If it is older than Cache Timeout, it is not considered current, and " +"a new project update will be performed." +msgstr "" +"Délai en secondes à prévoir pour qu'un projet soit actualisé. Durant " +"l'exécution des tâches et les rappels, le systÚme de tâches évalue " +"l'horodatage de la derniÚre mise à jour du projet. Si elle est plus ancienne " +"que le délai d'expiration du cache, elle n'est pas considérée comme " +"actualisée, et une nouvelle mise à jour du projet sera effectuée." + +#: client/src/forms/Credentials.js:126 +msgid "" +"To learn more about the IAM STS Token, refer to the %sAmazon documentation%s." +"" +msgstr "" +"Pour en savoir plus sur le token STS d'IAM, reportez-vous à la documentation " +"d'%Amazon%s." + +#: client/src/shared/form-generator.js:848 +msgid "Toggle the display of plaintext." +msgstr "Bascule l'affichage du texte en clair." + +#: client/src/notifications/shared/type-change.service.js:34 +#: client/src/notifications/shared/type-change.service.js:40 +msgid "Token" +msgstr "Token" + +#: client/src/forms/Credentials.js:61 +#: client/src/forms/Credentials.js:85 +#: client/src/forms/Teams.js:132 +#: client/src/forms/Users.js:196 +#: client/src/forms/WorkflowMaker.js:34 +#: client/src/lists/CompletedJobs.js:50 +#: client/src/lists/Credentials.js:39 +#: client/src/lists/Projects.js:48 +#: client/src/lists/ScheduledJobs.js:42 +#: client/src/lists/Templates.js:31 +#: client/src/notifications/notificationTemplates.form.js:54 +#: client/src/notifications/notificationTemplates.list.js:38 +#: client/src/notifications/notifications.list.js:31 +msgid "Type" +msgstr "Type" + +#: client/src/forms/Credentials.js:25 +#: client/src/notifications/notificationTemplates.form.js:23 +msgid "Type Details" +msgstr "Détails sur le type" + +#: client/src/notifications/notificationTemplates.form.js:212 +#: client/src/notifications/notificationTemplates.form.js:97 +msgid "Type an option on each line." +msgstr "Tapez une option sur chaque ligne." + +#: client/src/notifications/notificationTemplates.form.js:141 +#: client/src/notifications/notificationTemplates.form.js:158 +#: client/src/notifications/notificationTemplates.form.js:370 +msgid "Type an option on each line. The pound symbol (#) is not required." +msgstr "" +"Tapez une option sur chaque ligne. Le symbole diÚse (#) n'est pas nécessaire." +"" + +#: client/src/controllers/Projects.js:402 +#: client/src/controllers/Projects.js:684 +msgid "URL popover text" +msgstr "Texte popover de l'URL" + +#: client/src/login/loginModal/loginModal.partial.html:49 +msgid "USERNAME" +msgstr "NOM D'UTILISATEUR" + +#: client/src/app.js:365 +msgid "USERS" +msgstr "UTILISATEURS" + +#: client/src/controllers/Projects.js:220 +msgid "Update Not Found" +msgstr "Mise à jour introuvable" + +#: client/src/controllers/Projects.js:693 +msgid "Update in Progress" +msgstr "Mise à jour en cours" + +#: client/src/forms/Projects.js:172 +msgid "Update on Launch" +msgstr "Mettre à jour au lancement" + +#: client/src/license/license.partial.html:71 +msgid "Upgrade" +msgstr "Mettre à niveau" + +#: client/src/notifications/notificationTemplates.form.js:404 +msgid "Use SSL" +msgstr "Utiliser SSL" + +#: client/src/notifications/notificationTemplates.form.js:397 +msgid "Use TLS" +msgstr "Utiliser TLS" + +#: client/src/forms/Credentials.js:77 +msgid "" +"Used to check out and synchronize playbook repositories with a remote source " +"control management system such as Git, Subversion (svn), or Mercurial (hg). " +"These credentials are used by Projects." +msgstr "" +"Utilisé pour vérifier et synchroniser les référentiels de playbooks avec un " +"SCM à distance tel que Git, Subversion (svn) ou Mercurial (hg). Ces " +"informations d'identification sont utilisées par les Projets." + +#: client/src/forms/Credentials.js:449 +#: client/src/forms/Inventories.js:115 +#: client/src/forms/Inventories.js:161 +#: client/src/forms/Organizations.js:83 +#: client/src/forms/Projects.js:244 +#: client/src/forms/Teams.js:94 +msgid "User" +msgstr "Utilisateur" + +#: client/src/forms/Users.js:94 +msgid "User Type" +msgstr "Type d'utilisateur" + +#: client/src/forms/Users.js:49 +#: client/src/helpers/Credentials.js:117 +#: client/src/helpers/Credentials.js:32 +#: client/src/helpers/Credentials.js:56 +#: client/src/helpers/Credentials.js:88 +#: client/src/lists/Users.js:37 +#: client/src/notifications/notificationTemplates.form.js:64 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: client/src/forms/Credentials.js:81 +msgid "" +"Usernames, passwords, and access keys for authenticating to the specified " +"cloud or infrastructure provider. These are used for dynamic inventory " +"sources and for cloud provisioning and deployment in playbook runs." +msgstr "" +"Noms d'utilisateur, mots de passe et clés d'accÚs pour s'authentifier auprÚs " +"du fournisseur de cloud ou d'infrastructure spécifié. Ceux-ci sont utilisés " +"pour les sources d'inventaire dynamique et pour l'authentification de " +"services dans le cloud et leur déploiement dans les playbooks." + +#: client/src/forms/Teams.js:75 +#: client/src/lists/Users.js:26 +#: client/src/lists/Users.js:27 +#: client/src/setup-menu/setup-menu.partial.html:10 +msgid "Users" +msgstr "Utilisateurs" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:7 +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:7 +msgid "VIEW ALL" +msgstr "TOUT AFFICHER" + +#: client/src/main-menu/main-menu.partial.html:75 +msgid "VIEW DOCUMENTATION" +msgstr "AFFICHER LA DOCUMENTATION" + +#: client/src/main-menu/main-menu.partial.html:51 +msgid "VIEW USER PAGE FOR {{ $root.current_user.username | uppercase }}" +msgstr "" +"AFFICHER LA PAGE UTILISATEUR POUR {{ $root.current_user.username | uppercase " +"}}" + +#: client/src/license/license.partial.html:10 +msgid "Valid License" +msgstr "Licence valide" + +#: client/src/forms/Inventories.js:55 +msgid "Variables" +msgstr "Variables" + +#: client/src/forms/Credentials.js:389 +msgid "Vault Password" +msgstr "Mot de passe Vault" + +#: client/src/forms/JobTemplates.js:235 +#: client/src/forms/JobTemplates.js:242 +msgid "Verbosity" +msgstr "Verbosité" + +#: client/src/about/about.controller.js:24 +#: client/src/license/license.partial.html:15 +msgid "Version" +msgstr "Version" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:58 +#: client/src/inventory-scripts/inventory-scripts.list.js:65 +#: client/src/lists/Credentials.js:80 +#: client/src/lists/Inventories.js:85 +#: client/src/lists/Teams.js:69 +#: client/src/lists/Templates.js:117 +#: client/src/lists/Users.js:78 +#: client/src/notifications/notificationTemplates.list.js:80 +msgid "View" +msgstr "Afficher" + +#: client/src/main-menu/main-menu.partial.html:173 +msgid "View Documentation" +msgstr "Afficher la documentation" + +#: client/src/forms/Inventories.js:65 +msgid "View JSON examples at %s" +msgstr "Afficher les exemples JSON à %s" + +#: client/src/forms/JobTemplates.js:450 +#: client/src/forms/Workflows.js:163 +#: client/src/shared/form-generator.js:1715 +msgid "View Survey" +msgstr "Afficher le questionnaire" + +#: client/src/forms/Inventories.js:66 +msgid "View YAML examples at %s" +msgstr "Afficher les exemples YAML à %s" + +#: client/src/setup-menu/setup-menu.partial.html:47 +msgid "View Your License" +msgstr "Afficher votre licence" + +#: client/src/setup-menu/setup-menu.partial.html:48 +msgid "View and edit your license information." +msgstr "Affichez et modifiez vos informations de licence." + +#: client/src/lists/Credentials.js:82 +msgid "View credential" +msgstr "Afficher les informations d'identification" + +#: client/src/setup-menu/setup-menu.partial.html:60 +msgid "View information about this version of Ansible Tower." +msgstr "Afficher les informations sur cette version d'Ansible Tower." + +#: client/src/lists/Inventories.js:87 +msgid "View inventory" +msgstr "Afficher l'inventaire" + +#: client/src/inventory-scripts/inventory-scripts.list.js:67 +msgid "View inventory script" +msgstr "Afficher le script d'inventaire" + +#: client/src/notifications/notificationTemplates.list.js:82 +msgid "View notification" +msgstr "Afficher la notification" + +#: client/src/lists/Teams.js:72 +msgid "View team" +msgstr "Afficher l'équipe" + +#: client/src/lists/Templates.js:119 +msgid "View template" +msgstr "Afficher le modÚle" + +#: client/src/lists/Projects.js:108 +msgid "View the project" +msgstr "Afficher le projet" + +#: client/src/lists/ScheduledJobs.js:73 +msgid "View the schedule" +msgstr "Afficher le calendrier" + +#: client/src/lists/Users.js:81 +msgid "View user" +msgstr "Afficher l'utilisateur" + +#: client/src/forms/Workflows.js:22 +msgid "WORKFLOW" +msgstr "WORKFLOW" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:68 +#: client/src/configuration/configuration.controller.js:168 +#: client/src/configuration/configuration.controller.js:230 +#: client/src/configuration/system-form/configuration-system.controller.js:47 +msgid "Warning: Unsaved Changes" +msgstr "Avertissement : modifications non enregistrées" + +#: client/src/login/loginModal/loginModal.partial.html:17 +msgid "Welcome to Ansible Tower!  Please sign in." +msgstr "Bienvenue à Ansible Tower !  Veuillez vous connecter." + +#: client/src/license/license.partial.html:78 +msgid "" +"Welcome to Ansible Tower! Please complete the steps below to acquire a " +"license." +msgstr "" +"Bienvenue à Ansible Tower ! Veuillez suivre les étapes ci-dessous pour " +"obtenir une licence." + +#: client/src/forms/JobTemplates.js:55 +#: client/src/forms/WorkflowMaker.js:104 +msgid "" +"When this template is submitted as a job, setting the type to %s will " +"execute the playbook, running tasks on the selected hosts." +msgstr "" +"Lorsque ce modÚle est validé en tant que tâche, le fait de définir le type " +"sur %s exécute le playbook en lançant les tâches sur les hÃŽtes sélectionnés." + +#: client/src/forms/Workflows.js:187 +#: client/src/shared/form-generator.js:1719 +msgid "Workflow Editor" +msgstr "Workflow Editor" + +#: client/src/lists/Templates.js:70 +msgid "Workflow Job Template" +msgstr "ModÚle de tâche Workflow" + +#: client/src/controllers/Projects.js:468 +msgid "You do not have access to view this property" +msgstr "Vous n'avez pas d'accÚs pour afficher cette propriété" + +#: client/src/controllers/Projects.js:284 +msgid "You do not have permission to add a project." +msgstr "Vous n'êtes pas autorisé à ajouter un projet." + +#: client/src/controllers/Users.js:141 +msgid "You do not have permission to add a user." +msgstr "Vous n'êtes pas autorisé à ajouter un utilisateur." + +#: client/src/configuration/auth-form/configuration-auth.controller.js:67 +#: client/src/configuration/configuration.controller.js:167 +#: client/src/configuration/configuration.controller.js:229 +#: client/src/configuration/system-form/configuration-system.controller.js:46 +msgid "" +"You have unsaved changes. Would you like to proceed without " +"saving?" +msgstr "" +"Des modifications n'ont pas été enregistrées. Voulez-vous continuer " +"sans les enregistrer ?" + +#: client/src/shared/form-generator.js:960 +msgid "Your password must be %d characters long." +msgstr "Votre mot de passe doit comporter %d caractÚres." + +#: client/src/shared/form-generator.js:965 +msgid "Your password must contain a lowercase letter." +msgstr "Votre mot de passe doit contenir une lettre minuscule." + +#: client/src/shared/form-generator.js:975 +msgid "Your password must contain a number." +msgstr "Votre mot de passe doit contenir un chiffre." + +#: client/src/shared/form-generator.js:970 +msgid "Your password must contain an uppercase letter." +msgstr "Votre mot de passe doit contenir une lettre majuscule." + +#: client/src/shared/form-generator.js:980 +msgid "Your password must contain one of the following characters: %s" +msgstr "Votre mot de passe doit contenir l'un des caractÚres suivants : %s" + +#: client/src/controllers/Projects.js:176 +msgid "Your request to cancel the update was submitted to the task manager." +msgstr "" +"Votre demande d'annulation de la mise à jour a été envoyée au gestionnaire " +"de tâches." + +#: client/src/login/loginModal/loginModal.partial.html:22 +msgid "Your session timed out due to inactivity. Please sign in." +msgstr "" +"Votre session a expiré en raison d'un temps d'inactivité. Veuillez vous " +"connecter." + +#: client/src/shared/form-generator.js:1224 +msgid "and" +msgstr "et" + +#: client/src/forms/Credentials.js:139 +#: client/src/forms/Credentials.js:362 +msgid "set in helpers/credentials" +msgstr "définir dans helpers/credentials" + +#: client/src/forms/Credentials.js:379 +msgid "v2 URLs%s - leave blank" +msgstr "v2 URLs%s - laisser vide" + +#: client/src/forms/Credentials.js:380 +msgid "v3 default%s - set to 'default'" +msgstr "v3 default%s - définir sur 'default'" + +#: client/src/forms/Credentials.js:381 +msgid "v3 multi-domain%s - your domain name" +msgstr "v3 multi-domain%s - votre nom de domaine" + diff --git a/awx/locale/fr/LC_MESSAGES/django.po b/awx/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cc83af8198 --- /dev/null +++ b/awx/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,4303 @@ +# Corina Roe , 2017. #zanata +# Sam Friedmann , 2017. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-15 12:05+0530\n" +"PO-Revision-Date: 2017-01-11 01:57+0000\n" +"Last-Translator: Corina Roe \n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"X-Generator: Zanata 3.9.6\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" + +#: api/authentication.py:67 +msgid "Invalid token header. No credentials provided." +msgstr "" +"En-tête de token non valide. Aucune information d'identification fournie." + +#: api/authentication.py:70 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "" +"En-tête de token non valide. La chaîne token ne doit pas contenir d'espaces." + +#: api/authentication.py:105 +msgid "User inactive or deleted" +msgstr "Utilisateur inactif ou supprimé" + +#: api/authentication.py:161 +msgid "Invalid task token" +msgstr "Token de tâche non valide" + +#: api/conf.py:12 +msgid "Idle Time Force Log Out" +msgstr "Temps d'inactivité - Forcer la déconnexion" + +#: api/conf.py:13 +msgid "" +"Number of seconds that a user is inactive before they will need to login " +"again." +msgstr "" +"Délai en secondes pendant lequel un utilisateur peut rester inactif avant de " +"devoir se reconnecter." + +#: api/conf.py:14 +#: api/conf.py:24 +#: api/conf.py:33 +#: sso/conf.py:124 +#: sso/conf.py:135 +#: sso/conf.py:147 +#: sso/conf.py:162 +msgid "Authentication" +msgstr "Authentification" + +#: api/conf.py:22 +msgid "Maximum number of simultaneous logins" +msgstr "Nombre maximal de connexions simultanées" + +#: api/conf.py:23 +msgid "" +"Maximum number of simultaneous logins a user may have. To disable enter -1." +msgstr "" +"Nombre maximal de connexions simultanées dont un utilisateur peut disposer. " +"Pour désactiver cette option, entrez -1." + +#: api/conf.py:31 +msgid "Enable HTTP Basic Auth" +msgstr "Activer l'authentification HTTP de base" + +#: api/conf.py:32 +msgid "Enable HTTP Basic Auth for the API Browser." +msgstr "Activer l'authentification HTTP de base pour le navigateur d'API." + +#: api/generics.py:446 +msgid "\"id\" is required to disassociate" +msgstr "\"id\" est nécessaire pour dissocier" + +#: api/metadata.py:50 +msgid "Database ID for this {}." +msgstr "ID de base de données pour ce {}." + +#: api/metadata.py:51 +msgid "Name of this {}." +msgstr "Nom de ce {}." + +#: api/metadata.py:52 +msgid "Optional description of this {}." +msgstr "Description facultative de ce {}." + +#: api/metadata.py:53 +msgid "Data type for this {}." +msgstr "Type de données pour ce {}." + +#: api/metadata.py:54 +msgid "URL for this {}." +msgstr "URL de ce {}." + +#: api/metadata.py:55 +msgid "Data structure with URLs of related resources." +msgstr "Structure de données avec URL des ressources associées." + +#: api/metadata.py:56 +msgid "Data structure with name/description for related resources." +msgstr "Structure de données avec nom/description des ressources associées." + +#: api/metadata.py:57 +msgid "Timestamp when this {} was created." +msgstr "Horodatage lors de la création de ce {}." + +#: api/metadata.py:58 +msgid "Timestamp when this {} was last modified." +msgstr "Horodatage lors de la modification de ce {}." + +#: api/parsers.py:31 +#, python-format +msgid "JSON parse error - %s" +msgstr "Erreur d'analyse JSON - %s" + +#: api/serializers.py:248 +msgid "Playbook Run" +msgstr "Exécution du playbook" + +#: api/serializers.py:249 +msgid "Command" +msgstr "Commande" + +#: api/serializers.py:250 +msgid "SCM Update" +msgstr "Mise à jour SCM" + +#: api/serializers.py:251 +msgid "Inventory Sync" +msgstr "Synchronisation des inventaires" + +#: api/serializers.py:252 +msgid "Management Job" +msgstr "Tâche de gestion" + +#: api/serializers.py:253 +msgid "Workflow Job" +msgstr "Tâche de workflow" + +#: api/serializers.py:655 +#: api/serializers.py:713 +#: api/views.py:3914 +#, python-format +msgid "" +"Standard Output too large to display (%(text_size)d bytes), only download " +"supported for sizes over %(supported_size)d bytes" +msgstr "" +"Sortie standard trop grande pour pouvoir s'afficher (%(text_size)d octets). " +"Le téléchargement est pris en charge seulement pour une taille supérieure à " +"%(supported_size)d octets" + +#: api/serializers.py:728 +msgid "Write-only field used to change the password." +msgstr "Champ en écriture seule servant à modifier le mot de passe." + +#: api/serializers.py:730 +msgid "Set if the account is managed by an external service" +msgstr "À définir si le compte est géré par un service externe" + +#: api/serializers.py:754 +msgid "Password required for new User." +msgstr "Mot de passe requis pour le nouvel utilisateur." + +#: api/serializers.py:838 +#, python-format +msgid "Unable to change %s on user managed by LDAP." +msgstr "Impossible de redéfinir %s sur un utilisateur géré par LDAP." + +#: api/serializers.py:990 +msgid "Organization is missing" +msgstr "L'organisation est manquante" + +#: api/serializers.py:996 +msgid "Array of playbooks available within this project." +msgstr "Tableau des playbooks disponibles dans ce projet." + +#: api/serializers.py:1178 +#, python-format +msgid "Invalid port specification: %s" +msgstr "Spécification de port non valide : %s" + +#: api/serializers.py:1206 +#: main/validators.py:192 +msgid "Must be valid JSON or YAML." +msgstr "Syntaxe JSON ou YAML valide exigée." + +#: api/serializers.py:1263 +msgid "Invalid group name." +msgstr "Nom de groupe incorrect." + +#: api/serializers.py:1338 +msgid "" +"Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" +msgstr "" +"Le script doit commencer par une séquence hashbang : c.-à-d. ... #!/usr/bin/" +"env python" + +#: api/serializers.py:1391 +msgid "If 'source' is 'custom', 'source_script' must be provided." +msgstr "Si la valeur 'source' est 'custom', 'source_script' doit être défini." + +#: api/serializers.py:1395 +msgid "" +"The 'source_script' does not belong to the same organization as the " +"inventory." +msgstr "" +"Le 'source_script' n'appartient pas à la même organisation que l'inventaire." + +#: api/serializers.py:1397 +msgid "'source_script' doesn't exist." +msgstr "'source_script' n'existe pas." + +#: api/serializers.py:1756 +msgid "" +"Write-only field used to add user to owner role. If provided, do not give " +"either team or organization. Only valid for creation." +msgstr "" +"Champ en écriture seule qui sert à ajouter un utilisateur au rÃŽle de " +"propriétaire. Si vous le définissez, n'entrez ni équipe ni organisation. " +"Seulement valable pour la création." + +#: api/serializers.py:1761 +msgid "" +"Write-only field used to add team to owner role. If provided, do not give " +"either user or organization. Only valid for creation." +msgstr "" +"Champ en écriture seule qui sert à ajouter une équipe au rÃŽle de " +"propriétaire. Si vous le définissez, n'entrez ni utilisateur ni organisation." +" Seulement valable pour la création." + +#: api/serializers.py:1766 +msgid "" +"Inherit permissions from organization roles. If provided on creation, do not " +"give either user or team." +msgstr "" +"Hériter des permissions à partir des rÃŽles d'organisation. Si vous le " +"définissez lors de la création, n'entrez ni utilisateur ni équipe." + +#: api/serializers.py:1782 +msgid "Missing 'user', 'team', or 'organization'." +msgstr "Valeur 'utilisateur', 'équipe' ou 'organisation' manquante." + +#: api/serializers.py:1795 +msgid "" +"Credential organization must be set and match before assigning to a team" +msgstr "" +"L'organisation des informations d'identification doit être définie et mise " +"en correspondance avant de l'attribuer à une équipe" + +#: api/serializers.py:1887 +msgid "This field is required." +msgstr "Ce champ est obligatoire." + +#: api/serializers.py:1889 +#: api/serializers.py:1891 +msgid "Playbook not found for project." +msgstr "Playbook introuvable pour le projet." + +#: api/serializers.py:1893 +msgid "Must select playbook for project." +msgstr "Un playbook doit être sélectionné pour le project." + +#: api/serializers.py:1957 +#: main/models/jobs.py:280 +msgid "Scan jobs must be assigned a fixed inventory." +msgstr "Un inventaire fixe doit être assigné aux tâches de scan." + +#: api/serializers.py:1959 +#: main/models/jobs.py:283 +msgid "Job types 'run' and 'check' must have assigned a project." +msgstr "Un projet doit être assigné aux types de tâche 'run' et 'check'." + +#: api/serializers.py:1962 +msgid "Survey Enabled cannot be used with scan jobs." +msgstr "" +"L'option Questionnaire activé ne peut pas être utilisée avec les tâches de " +"scan." + +#: api/serializers.py:2024 +msgid "Invalid job template." +msgstr "ModÚle de tâche non valide." + +#: api/serializers.py:2109 +msgid "Credential not found or deleted." +msgstr "Informations d'identification introuvables ou supprimées." + +#: api/serializers.py:2111 +msgid "Job Template Project is missing or undefined." +msgstr "Le projet de modÚle de tâche est manquant ou non défini." + +#: api/serializers.py:2113 +msgid "Job Template Inventory is missing or undefined." +msgstr "Le projet de modÚle d'inventaire est manquant ou non défini." + +#: api/serializers.py:2398 +#, python-format +msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." +msgstr "" +"%(job_type)s n'est pas un type de tâche valide. Les choix sont %(choices)s." + +#: api/serializers.py:2403 +msgid "Workflow job template is missing during creation." +msgstr "Le modÚle de tâche Workflow est manquant lors de la création." + +#: api/serializers.py:2408 +#, python-format +msgid "Cannot nest a %s inside a WorkflowJobTemplate" +msgstr "Impossible d'imbriquer %s dans un modÚle de tâche Workflow." + +#: api/serializers.py:2646 +#, python-format +msgid "Job Template '%s' is missing or undefined." +msgstr "Le modÚle de tâche '%s' est manquant ou non défini." + +#: api/serializers.py:2672 +msgid "Must be a valid JSON or YAML dictionary." +msgstr "Dictionnaire JSON ou YAML valide exigé." + +#: api/serializers.py:2817 +msgid "" +"Missing required fields for Notification Configuration: notification_type" +msgstr "" +"Champs obligatoires manquants pour la configuration des notifications : " +"notification_type" + +#: api/serializers.py:2840 +msgid "No values specified for field '{}'" +msgstr "Aucune valeur spécifiée pour le champ '{}'" + +#: api/serializers.py:2845 +msgid "Missing required fields for Notification Configuration: {}." +msgstr "" +"Champs obligatoires manquants pour la configuration des notifications : {}." + +#: api/serializers.py:2848 +msgid "Configuration field '{}' incorrect type, expected {}." +msgstr "Type de champ de configuration '{}' incorrect, {} attendu." + +#: api/serializers.py:2901 +msgid "Inventory Source must be a cloud resource." +msgstr "La source d'inventaire doit être une ressource cloud." + +#: api/serializers.py:2903 +msgid "Manual Project can not have a schedule set." +msgstr "Le projet manuel ne peut pas avoir de calendrier défini." + +#: api/serializers.py:2925 +msgid "" +"DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" +msgstr "" +"DTSTART obligatoire dans rrule. La valeur doit correspondre à : DTSTART:" +"YYYYMMDDTHHMMSSZ" + +#: api/serializers.py:2927 +msgid "Multiple DTSTART is not supported." +msgstr "Une seule valeur DTSTART est prise en charge." + +#: api/serializers.py:2929 +msgid "RRULE require in rrule." +msgstr "RRULE obligatoire dans rrule." + +#: api/serializers.py:2931 +msgid "Multiple RRULE is not supported." +msgstr "Une seule valeur RRULE est prise en charge." + +#: api/serializers.py:2933 +msgid "INTERVAL required in rrule." +msgstr "INTERVAL obligatoire dans rrule." + +#: api/serializers.py:2935 +msgid "TZID is not supported." +msgstr "TZID n'est pas pris en charge." + +#: api/serializers.py:2937 +msgid "SECONDLY is not supported." +msgstr "SECONDLY n'est pas pris en charge." + +#: api/serializers.py:2939 +msgid "Multiple BYMONTHDAYs not supported." +msgstr "Une seule valeur BYMONTHDAY est prise en charge." + +#: api/serializers.py:2941 +msgid "Multiple BYMONTHs not supported." +msgstr "Une seule valeur BYMONTH est prise en charge." + +#: api/serializers.py:2943 +msgid "BYDAY with numeric prefix not supported." +msgstr "BYDAY avec un préfixe numérique non pris en charge." + +#: api/serializers.py:2945 +msgid "BYYEARDAY not supported." +msgstr "BYYEARDAY non pris en charge." + +#: api/serializers.py:2947 +msgid "BYWEEKNO not supported." +msgstr "BYWEEKNO non pris en charge." + +#: api/serializers.py:2951 +msgid "COUNT > 999 is unsupported." +msgstr "COUNT > 999 non pris en charge." + +#: api/serializers.py:2955 +msgid "rrule parsing failed validation." +msgstr "L'analyse rrule n'a pas pu être validée." + +#: api/serializers.py:2973 +msgid "" +"A summary of the new and changed values when an object is created, updated, " +"or deleted" +msgstr "" +"Un récapitulatif des valeurs nouvelles et modifiées lorsqu'un objet est " +"créé, mis à jour ou supprimé" + +#: api/serializers.py:2975 +msgid "" +"For create, update, and delete events this is the object type that was " +"affected. For associate and disassociate events this is the object type " +"associated or disassociated with object2." +msgstr "" +"Pour créer, mettre à jour et supprimer des événements, il s'agit du type " +"d'objet qui a été affecté. Pour associer et dissocier des événements, il " +"s'agit du type d'objet associé à ou dissocié de object2." + +#: api/serializers.py:2978 +msgid "" +"Unpopulated for create, update, and delete events. For associate and " +"disassociate events this is the object type that object1 is being associated " +"with." +msgstr "" +"Laisser vide pour créer, mettre à jour et supprimer des événements. Pour " +"associer et dissocier des événements, il s'agit du type d'objet auquel " +"object1 est associé." + +#: api/serializers.py:2981 +msgid "The action taken with respect to the given object(s)." +msgstr "Action appliquée par rapport à l'objet ou aux objets donnés." + +#: api/serializers.py:3081 +msgid "Unable to login with provided credentials." +msgstr "Connexion impossible avec les informations d'identification fournies." + +#: api/serializers.py:3083 +msgid "Must include \"username\" and \"password\"." +msgstr "Elles doivent inclure le nom d'utilisateur et le mot de passe." + +#: api/views.py:96 +msgid "Your license does not allow use of the activity stream." +msgstr "Votre licence ne permet pas l'utilisation du flux d'activité." + +#: api/views.py:106 +msgid "Your license does not permit use of system tracking." +msgstr "Votre licence ne permet pas l'utilisation du suivi du systÚme." + +#: api/views.py:116 +msgid "Your license does not allow use of workflows." +msgstr "Votre licence ne permet pas l'utilisation de workflows." + +#: api/views.py:124 +#: templates/rest_framework/api.html:28 +msgid "REST API" +msgstr "API REST" + +#: api/views.py:131 +#: templates/rest_framework/api.html:4 +msgid "Ansible Tower REST API" +msgstr "API REST Ansible Tower" + +#: api/views.py:147 +msgid "Version 1" +msgstr "Version 1" + +#: api/views.py:198 +msgid "Ping" +msgstr "Ping" + +#: api/views.py:227 +#: conf/apps.py:12 +msgid "Configuration" +msgstr "Configuration" + +#: api/views.py:280 +msgid "Invalid license data" +msgstr "Données de licence non valides" + +#: api/views.py:282 +msgid "Missing 'eula_accepted' property" +msgstr "Propriété 'eula_accepted' manquante" + +#: api/views.py:286 +msgid "'eula_accepted' value is invalid" +msgstr "La valeur 'eula_accepted' n'est pas valide" + +#: api/views.py:289 +msgid "'eula_accepted' must be True" +msgstr "La valeur 'eula_accepted' doit être True" + +#: api/views.py:296 +msgid "Invalid JSON" +msgstr "Syntaxe JSON non valide" + +#: api/views.py:304 +msgid "Invalid License" +msgstr "Licence non valide" + +#: api/views.py:314 +msgid "Invalid license" +msgstr "Licence non valide" + +#: api/views.py:322 +#, python-format +msgid "Failed to remove license (%s)" +msgstr "Suppression de la licence (%s) impossible" + +#: api/views.py:327 +msgid "Dashboard" +msgstr "Tableau de bord" + +#: api/views.py:433 +msgid "Dashboard Jobs Graphs" +msgstr "Graphiques de tâches du tableau de bord" + +#: api/views.py:469 +#, python-format +msgid "Unknown period \"%s\"" +msgstr "Période \"%s\" inconnue" + +#: api/views.py:483 +msgid "Schedules" +msgstr "Calendriers" + +#: api/views.py:502 +msgid "Schedule Jobs List" +msgstr "Listes des tâches de planification" + +#: api/views.py:711 +msgid "Your Tower license only permits a single organization to exist." +msgstr "Votre licence Tower permet l'existence d'une seule organisation." + +#: api/views.py:932 +#: api/views.py:1284 +msgid "Role 'id' field is missing." +msgstr "Le champ \"id\" du rÃŽle est manquant." + +#: api/views.py:938 +#: api/views.py:4182 +msgid "You cannot assign an Organization role as a child role for a Team." +msgstr "" +"Vous ne pouvez pas attribuer un rÃŽle Organisation en tant que rÃŽle enfant " +"pour une équipe." + +#: api/views.py:942 +#: api/views.py:4196 +msgid "You cannot grant system-level permissions to a team." +msgstr "" +"Vous ne pouvez pas accorder de permissions au niveau systÚme à une équipe." + +#: api/views.py:949 +#: api/views.py:4188 +msgid "" +"You cannot grant credential access to a team when the Organization field " +"isn't set, or belongs to a different organization" +msgstr "" +"Vous ne pouvez pas accorder d'accÚs par informations d'identification à une " +"équipe lorsque le champ Organisation n'est pas défini ou qu'elle appartient " +"à une organisation différente" + +#: api/views.py:1039 +msgid "Cannot delete project." +msgstr "Suppression du projet impossible." + +#: api/views.py:1068 +msgid "Project Schedules" +msgstr "Calendriers des projets" + +#: api/views.py:1168 +#: api/views.py:2252 +#: api/views.py:3225 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "" +"Impossible de supprimer les ressources de tâche lorsqu'une tâche de workflow " +"associée est en cours d'exécution." + +#: api/views.py:1244 +msgid "Me" +msgstr "Moi-même" + +#: api/views.py:1288 +#: api/views.py:4137 +msgid "You may not perform any action with your own admin_role." +msgstr "Vous ne pouvez pas effectuer d'action avec votre propre admin_role." + +#: api/views.py:1294 +#: api/views.py:4141 +msgid "You may not change the membership of a users admin_role" +msgstr "" +"Vous ne pouvez pas modifier l'appartenance de l'admin_role d'un utilisateur" + +#: api/views.py:1299 +#: api/views.py:4146 +msgid "" +"You cannot grant credential access to a user not in the credentials' " +"organization" +msgstr "" +"Vous ne pouvez pas accorder d'accÚs par informations d'identification à un " +"utilisateur ne figurant pas dans l'organisation d'informations " +"d'identification." + +#: api/views.py:1303 +#: api/views.py:4150 +msgid "You cannot grant private credential access to another user" +msgstr "" +"Vous ne pouvez pas accorder d'accÚs privé par informations d'identification " +"à un autre utilisateur" + +#: api/views.py:1401 +#, python-format +msgid "Cannot change %s." +msgstr "Impossible de modifier %s." + +#: api/views.py:1407 +msgid "Cannot delete user." +msgstr "Impossible de supprimer l'utilisateur." + +#: api/views.py:1553 +msgid "Cannot delete inventory script." +msgstr "Impossible de supprimer le script d'inventaire." + +#: api/views.py:1788 +msgid "Fact not found." +msgstr "Fait introuvable." + +#: api/views.py:2108 +msgid "Inventory Source List" +msgstr "Liste des sources d'inventaire" + +#: api/views.py:2136 +msgid "Cannot delete inventory source." +msgstr "Impossible de supprimer la source d'inventaire." + +#: api/views.py:2144 +msgid "Inventory Source Schedules" +msgstr "Calendriers des sources d'inventaire" + +#: api/views.py:2173 +msgid "Notification Templates can only be assigned when source is one of {}." +msgstr "" +"Les modÚles de notification ne peuvent être attribués que lorsque la source " +"est l'une des {}." + +#: api/views.py:2380 +msgid "Job Template Schedules" +msgstr "Calendriers des modÚles de tâche" + +#: api/views.py:2399 +#: api/views.py:2409 +msgid "Your license does not allow adding surveys." +msgstr "Votre licence ne permet pas l'ajout de questionnaires." + +#: api/views.py:2416 +msgid "'name' missing from survey spec." +msgstr "'name' manquant dans la spécification du questionnaire." + +#: api/views.py:2418 +msgid "'description' missing from survey spec." +msgstr "'description' manquante dans la spécification du questionnaire." + +#: api/views.py:2420 +msgid "'spec' missing from survey spec." +msgstr "'spec' manquante dans la spécification du questionnaire." + +#: api/views.py:2422 +msgid "'spec' must be a list of items." +msgstr "'spec' doit être une liste d'éléments" + +#: api/views.py:2424 +msgid "'spec' doesn't contain any items." +msgstr "'spec' ne contient aucun élément." + +#: api/views.py:2429 +#, python-format +msgid "Survey question %s is not a json object." +msgstr "La question %s n'est pas un objet json." + +#: api/views.py:2431 +#, python-format +msgid "'type' missing from survey question %s." +msgstr "'type' est manquant dans la question %s." + +#: api/views.py:2433 +#, python-format +msgid "'question_name' missing from survey question %s." +msgstr "'question_name' est manquant dans la question %s." + +#: api/views.py:2435 +#, python-format +msgid "'variable' missing from survey question %s." +msgstr "'variable' est manquant dans la question %s." + +#: api/views.py:2437 +#, python-format +msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." +msgstr "'variable' '%(item)s' en double dans la question %(survey)s." + +#: api/views.py:2442 +#, python-format +msgid "'required' missing from survey question %s." +msgstr "'required' est manquant dans la question %s." + +#: api/views.py:2641 +msgid "No matching host could be found!" +msgstr "Aucun hÃŽte correspondant n'a été trouvé." + +#: api/views.py:2644 +msgid "Multiple hosts matched the request!" +msgstr "Plusieurs hÃŽtes correspondent à la requête." + +#: api/views.py:2649 +msgid "Cannot start automatically, user input required!" +msgstr "" +"Impossible de démarrer automatiquement, saisie de l'utilisateur obligatoire." + +#: api/views.py:2656 +msgid "Host callback job already pending." +msgstr "La tâche de rappel de l'hÃŽte est déjà en attente." + +#: api/views.py:2669 +msgid "Error starting job!" +msgstr "Erreur lors du démarrage de la tâche." + +#: api/views.py:2995 +msgid "Workflow Job Template Schedules" +msgstr "Calendriers des modÚles de tâche Workflow" + +#: api/views.py:3131 +#: api/views.py:3853 +msgid "Superuser privileges needed." +msgstr "PrivilÚges de superutilisateur requis." + +#: api/views.py:3161 +msgid "System Job Template Schedules" +msgstr "Calendriers des modÚles de tâche SystÚme" + +#: api/views.py:3344 +msgid "Job Host Summaries List" +msgstr "Liste récapitulative des hÃŽtes de la tâche" + +#: api/views.py:3386 +msgid "Job Event Children List" +msgstr "Liste des enfants d'événement de la tâche" + +#: api/views.py:3395 +msgid "Job Event Hosts List" +msgstr "Liste des hÃŽtes d'événement de la tâche" + +#: api/views.py:3404 +msgid "Job Events List" +msgstr "Liste des événements de la tâche" + +#: api/views.py:3436 +msgid "Job Plays List" +msgstr "Liste des activités de lecture de la tâche" + +#: api/views.py:3513 +msgid "Job Play Tasks List" +msgstr "Liste des activités de lecture de la tâche" + +#: api/views.py:3529 +msgid "Job not found." +msgstr "Tâche introuvable." + +#: api/views.py:3533 +msgid "'event_id' not provided." +msgstr "'event_id' non défini." + +#: api/views.py:3537 +msgid "Parent event not found." +msgstr "Événement parent introuvable." + +#: api/views.py:3809 +msgid "Ad Hoc Command Events List" +msgstr "Liste d'événements de la commande ad hoc" + +#: api/views.py:3963 +#, python-format +msgid "Error generating stdout download file: %s" +msgstr "Erreur lors de la génération du fichier de téléchargement stdout : %s" + +#: api/views.py:4009 +msgid "Delete not allowed while there are pending notifications" +msgstr "Suppression non autorisée tant que des notifications sont en attente" + +#: api/views.py:4016 +msgid "NotificationTemplate Test" +msgstr "Test de modÚle de notification" + +#: api/views.py:4131 +msgid "User 'id' field is missing." +msgstr "Le champ \"id\" de l'utilisateur est manquant." + +#: api/views.py:4174 +msgid "Team 'id' field is missing." +msgstr "Le champ \"id\" de l'équipe est manquant." + +#: conf/conf.py:20 +msgid "Bud Frogs" +msgstr "Bud Frogs" + +#: conf/conf.py:21 +msgid "Bunny" +msgstr "Bunny" + +#: conf/conf.py:22 +msgid "Cheese" +msgstr "Cheese" + +#: conf/conf.py:23 +msgid "Daemon" +msgstr "Daemon" + +#: conf/conf.py:24 +msgid "Default Cow" +msgstr "Default Cow" + +#: conf/conf.py:25 +msgid "Dragon" +msgstr "Dragon" + +#: conf/conf.py:26 +msgid "Elephant in Snake" +msgstr "Elephant in Snake" + +#: conf/conf.py:27 +msgid "Elephant" +msgstr "Elephant" + +#: conf/conf.py:28 +msgid "Eyes" +msgstr "Eyes" + +#: conf/conf.py:29 +msgid "Hello Kitty" +msgstr "Hello Kitty" + +#: conf/conf.py:30 +msgid "Kitty" +msgstr "Kitty" + +#: conf/conf.py:31 +msgid "Luke Koala" +msgstr "Luke Koala" + +#: conf/conf.py:32 +msgid "Meow" +msgstr "Meow" + +#: conf/conf.py:33 +msgid "Milk" +msgstr "Milk" + +#: conf/conf.py:34 +msgid "Moofasa" +msgstr "Moofasa" + +#: conf/conf.py:35 +msgid "Moose" +msgstr "Moose" + +#: conf/conf.py:36 +msgid "Ren" +msgstr "Ren" + +#: conf/conf.py:37 +msgid "Sheep" +msgstr "Sheep" + +#: conf/conf.py:38 +msgid "Small Cow" +msgstr "Small Cow" + +#: conf/conf.py:39 +msgid "Stegosaurus" +msgstr "Stegosaurus" + +#: conf/conf.py:40 +msgid "Stimpy" +msgstr "Stimpy" + +#: conf/conf.py:41 +msgid "Super Milker" +msgstr "Super Milker" + +#: conf/conf.py:42 +msgid "Three Eyes" +msgstr "Three Eyes" + +#: conf/conf.py:43 +msgid "Turkey" +msgstr "Turkey" + +#: conf/conf.py:44 +msgid "Turtle" +msgstr "Turtle" + +#: conf/conf.py:45 +msgid "Tux" +msgstr "Tux" + +#: conf/conf.py:46 +msgid "Udder" +msgstr "Udder" + +#: conf/conf.py:47 +msgid "Vader Koala" +msgstr "Vader Koala" + +#: conf/conf.py:48 +msgid "Vader" +msgstr "Vader" + +#: conf/conf.py:49 +msgid "WWW" +msgstr "WWW" + +#: conf/conf.py:52 +msgid "Cow Selection" +msgstr "Sélection cow" + +#: conf/conf.py:53 +msgid "Select which cow to use with cowsay when running jobs." +msgstr "" +"Sélectionnez quel cow utiliser avec cowsay lors de l'exécution de tâches." + +#: conf/conf.py:54 +#: conf/conf.py:75 +msgid "Cows" +msgstr "Cows" + +#: conf/conf.py:73 +msgid "Example Read-Only Setting" +msgstr "Exemple de paramÚtre en lecture seule" + +#: conf/conf.py:74 +msgid "Example setting that cannot be changed." +msgstr "L'exemple de paramÚtre ne peut pas être modifié." + +#: conf/conf.py:93 +msgid "Example Setting" +msgstr "Exemple de paramÚtre" + +#: conf/conf.py:94 +msgid "Example setting which can be different for each user." +msgstr "Exemple de paramÚtre qui peut être différent pour chaque utilisateur." + +#: conf/conf.py:95 +#: conf/registry.py:67 +#: conf/views.py:46 +msgid "User" +msgstr "Utilisateur" + +#: conf/fields.py:38 +msgid "Enter a valid URL" +msgstr "Entez une URL valide" + +#: conf/license.py:19 +msgid "Your Tower license does not allow that." +msgstr "Votre licence Tower ne vous y autorise pas." + +#: conf/management/commands/migrate_to_database_settings.py:41 +msgid "Only show which settings would be commented/migrated." +msgstr "" +"Afficher seulement les paramÚtres qui pourraient être commentés/migrés." + +#: conf/management/commands/migrate_to_database_settings.py:48 +msgid "" +"Skip over settings that would raise an error when commenting/migrating." +msgstr "" +"Ignorer les paramÚtres qui pourraient provoquer une erreur lors de la saisie " +"de commentaires/de la migration." + +#: conf/management/commands/migrate_to_database_settings.py:55 +msgid "Skip commenting out settings in files." +msgstr "Ignorer la saisie de commentaires de paramÚtres dans les fichiers." + +#: conf/management/commands/migrate_to_database_settings.py:61 +msgid "Backup existing settings files with this suffix." +msgstr "Sauvegardez les fichiers de paramÚtres existants avec ce suffixe." + +#: conf/registry.py:55 +msgid "All" +msgstr "Tous" + +#: conf/registry.py:56 +msgid "Changed" +msgstr "Modifié" + +#: conf/registry.py:68 +msgid "User-Defaults" +msgstr "ParamÚtres utilisateur par défaut" + +#: conf/views.py:38 +msgid "Setting Categories" +msgstr "Catégories de paramÚtre" + +#: conf/views.py:61 +msgid "Setting Detail" +msgstr "Détails du paramÚtre" + +#: main/access.py:255 +#, python-format +msgid "Bad data found in related field %s." +msgstr "Données incorrectes trouvées dans le champ %s associé." + +#: main/access.py:296 +msgid "License is missing." +msgstr "La licence est manquante." + +#: main/access.py:298 +msgid "License has expired." +msgstr "La licence est arrivée à expiration." + +#: main/access.py:303 +#, python-format +msgid "License count of %s instances has been reached." +msgstr "Le nombre de licences d'instances %s a été atteint." + +#: main/access.py:305 +#, python-format +msgid "License count of %s instances has been exceeded." +msgstr "Le nombre de licences d'instances %s a été dépassé." + +#: main/access.py:307 +msgid "Host count exceeds available instances." +msgstr "Le nombre d'hÃŽtes dépasse celui des instances disponibles." + +#: main/access.py:311 +#, python-format +msgid "Feature %s is not enabled in the active license." +msgstr "La fonctionnalité %s n'est pas activée dans la licence active." + +#: main/access.py:313 +msgid "Features not found in active license." +msgstr "Fonctionnalités introuvables dans la licence active." + +#: main/access.py:507 +#: main/access.py:574 +#: main/access.py:694 +#: main/access.py:957 +#: main/access.py:1198 +#: main/access.py:1587 +msgid "Resource is being used by running jobs" +msgstr "La ressource est utilisée par des tâches en cours d'exécution" + +#: main/access.py:618 +msgid "Unable to change inventory on a host." +msgstr "Impossible de modifier l'inventaire sur un hÃŽte." + +#: main/access.py:630 +#: main/access.py:675 +msgid "Cannot associate two items from different inventories." +msgstr "Impossible d'associer deux éléments d'inventaires différents." + +#: main/access.py:663 +msgid "Unable to change inventory on a group." +msgstr "Impossible de modifier l'inventaire sur un groupe." + +#: main/access.py:877 +msgid "Unable to change organization on a team." +msgstr "Impossible de modifier l'organisation d'une équipe." + +#: main/access.py:890 +msgid "The {} role cannot be assigned to a team" +msgstr "Le rÃŽle {} ne peut pas être attribué à une équipe" + +#: main/access.py:892 +msgid "The admin_role for a User cannot be assigned to a team" +msgstr "L'admin_role d'un utilisateur ne peut pas être attribué à une équipe" + +#: main/apps.py:9 +msgid "Main" +msgstr "Principal" + +#: main/conf.py:17 +msgid "Enable Activity Stream" +msgstr "Activer le flux d'activité" + +#: main/conf.py:18 +msgid "Enable capturing activity for the Tower activity stream." +msgstr "Activer la capture d'activités pour le flux d'activité Tower." + +#: main/conf.py:19 +#: main/conf.py:29 +#: main/conf.py:39 +#: main/conf.py:48 +#: main/conf.py:60 +#: main/conf.py:78 +#: main/conf.py:103 +msgid "System" +msgstr "SystÚme" + +#: main/conf.py:27 +msgid "Enable Activity Stream for Inventory Sync" +msgstr "Activer le flux d'activité pour la synchronisation des inventaires" + +#: main/conf.py:28 +msgid "" +"Enable capturing activity for the Tower activity stream when running " +"inventory sync." +msgstr "" +"Activer la capture d'activités pour le flux d'activité Tower lors de la " +"synchronisation des inventaires." + +#: main/conf.py:37 +msgid "All Users Visible to Organization Admins" +msgstr "" +"Tous les utilisateurs visibles pour les administrateurs de l'organisation" + +#: main/conf.py:38 +msgid "" +"Controls whether any Organization Admin can view all users, even those not " +"associated with their Organization." +msgstr "" +"ContrÃŽle si un administrateur d'organisation peut ou non afficher tous les " +"utilisateurs, même ceux qui ne sont pas associés à son organisation." + +#: main/conf.py:46 +msgid "Enable Tower Administrator Alerts" +msgstr "Activer les alertes administrateur de Tower" + +#: main/conf.py:47 +msgid "" +"Allow Tower to email Admin users for system events that may require " +"attention." +msgstr "" +"Autoriser Tower à alerter les administrateurs par email concernant des " +"événements systÚme susceptibles de mériter leur attention." + +#: main/conf.py:57 +msgid "Base URL of the Tower host" +msgstr "URL de base pour l'hÃŽte Tower" + +#: main/conf.py:58 +msgid "" +"This setting is used by services like notifications to render a valid url to " +"the Tower host." +msgstr "" +"Ce paramÚtre est utilisé par des services sous la forme de notifications " +"permettant de rendre valide une URL pour l'hÃŽte Tower." + +#: main/conf.py:67 +msgid "Remote Host Headers" +msgstr "En-têtes d'hÃŽte distant" + +#: main/conf.py:68 +msgid "" +"HTTP headers and meta keys to search to determine remote host name or IP. " +"Add additional items to this list, such as \"HTTP_X_FORWARDED_FOR\", if " +"behind a reverse proxy.\n" +"\n" +"Note: The headers will be searched in order and the first found remote host " +"name or IP will be used.\n" +"\n" +"In the below example 8.8.8.7 would be the chosen IP address.\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" +msgstr "" +"En-têtes HTTP et méta-clés à rechercher afin de déterminer le nom ou " +"l'adresse IP d'un hÃŽte distant. Ajoutez des éléments supplémentaires à cette " +"liste, tels que \"HTTP_X_FORWARDED_FOR\", en présence d'un proxy inverse.\n" +"\n" +"Remarque : les en-têtes seront recherchés dans l'ordre, et le premier nom ou " +"la premiÚre adresse IP d'hÃŽte distant trouvé(e) sera utilisé(e).\n" +"\n" +"Dans l'exemple ci-dessous 8.8.8.7 est l'adresse IP choisie. \n" +"X-Forwarded-For : 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"HÃŽte : 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" + +#: main/conf.py:99 +msgid "Tower License" +msgstr "Licence Tower" + +#: main/conf.py:100 +msgid "" +"The license controls which features and functionality are enabled in Tower. " +"Use /api/v1/config/ to update or change the license." +msgstr "" +"La licence détermine les fonctionnalités et les fonctions qui sont activées " +"dans Tower. Utilisez /api/v1/config/ pour mettre à jour ou modifier la " +"licence." + +#: main/conf.py:110 +msgid "Ansible Modules Allowed for Ad Hoc Jobs" +msgstr "Modules Ansible autorisés pour des tâches ad hoc" + +#: main/conf.py:111 +msgid "List of modules allowed to be used by ad-hoc jobs." +msgstr "Liste des modules que des tâches ad hoc sont autorisées à utiliser." + +#: main/conf.py:112 +#: main/conf.py:121 +#: main/conf.py:130 +#: main/conf.py:139 +#: main/conf.py:148 +#: main/conf.py:158 +#: main/conf.py:168 +#: main/conf.py:178 +#: main/conf.py:187 +#: main/conf.py:199 +#: main/conf.py:211 +#: main/conf.py:223 +msgid "Jobs" +msgstr "Tâches" + +#: main/conf.py:119 +msgid "Enable job isolation" +msgstr "Activer l'isolement des tâches" + +#: main/conf.py:120 +msgid "" +"Isolates an Ansible job from protected parts of the Tower system to prevent " +"exposing sensitive information." +msgstr "" +"Permet d'isoler une tâche Ansible des parties protégées du systÚme Tower " +"pour éviter l'exposition d'informations sensibles." + +#: main/conf.py:128 +msgid "Job isolation execution path" +msgstr "Chemin d'exécution pour l'isolement des tâches" + +#: main/conf.py:129 +msgid "" +"Create temporary working directories for isolated jobs in this location." +msgstr "" +"Créez des répertoires de travail temporaires pour les tâches isolées à cet " +"emplacement." + +#: main/conf.py:137 +msgid "Paths to hide from isolated jobs" +msgstr "Chemins à dissimuler des tâches isolées" + +#: main/conf.py:138 +msgid "Additional paths to hide from isolated processes." +msgstr "Chemins supplémentaires à dissimuler des processus isolés." + +#: main/conf.py:146 +msgid "Paths to expose to isolated jobs" +msgstr "Chemins à exposer aux tâches isolées" + +#: main/conf.py:147 +msgid "" +"Whitelist of paths that would otherwise be hidden to expose to isolated jobs." +"" +msgstr "" +"Liste blanche des chemins qui seraient autrement dissimulés de façon à ne " +"pas être exposés aux tâches isolées." + +#: main/conf.py:156 +msgid "Standard Output Maximum Display Size" +msgstr "Taille d'affichage maximale pour une sortie standard" + +#: main/conf.py:157 +msgid "" +"Maximum Size of Standard Output in bytes to display before requiring the " +"output be downloaded." +msgstr "" +"Taille maximale d'une sortie standard en octets à afficher avant de demander " +"le téléchargement de la sortie." + +#: main/conf.py:166 +msgid "Job Event Standard Output Maximum Display Size" +msgstr "" +"Taille d'affichage maximale pour une sortie standard d'événement de tâche" + +#: main/conf.py:167 +msgid "" +"Maximum Size of Standard Output in bytes to display for a single job or ad " +"hoc command event. `stdout` will end with `
` when truncated." +msgstr "" +"Taille maximale de la sortie standard en octets à afficher pour une seule " +"tâche ou pour un seul événement de commande ad hoc. `stdout` se terminera " +"par `...` quand il sera tronqué." + +#: main/conf.py:176 +msgid "Maximum Scheduled Jobs" +msgstr "Nombre max. de tâches planifiées" + +#: main/conf.py:177 +msgid "" +"Maximum number of the same job template that can be waiting to run when " +"launching from a schedule before no more are created." +msgstr "" +"Nombre maximal du même modÚle de tâche qui peut être mis en attente " +"d'exécution lors de son lancement à partir d'un calendrier, avant que " +"d'autres ne soient créés." + +#: main/conf.py:185 +msgid "Ansible Callback Plugins" +msgstr "Plug-ins de rappel Ansible" + +#: main/conf.py:186 +msgid "" +"List of paths to search for extra callback plugins to be used when running " +"jobs." +msgstr "" +"Liste des chemins servant à rechercher d'autres plug-ins de rappel qui " +"serviront lors de l'exécution de tâches." + +#: main/conf.py:196 +msgid "Default Job Timeout" +msgstr "Délai d'attente par défaut des tâches" + +#: main/conf.py:197 +msgid "" +"Maximum time to allow jobs to run. Use value of 0 to indicate that no " +"timeout should be imposed. A timeout set on an individual job template will " +"override this." +msgstr "" +"Délai maximal d'exécution des tâches. Utilisez la valeur 0 pour indiquer " +"qu'aucun délai ne doit être imposé. Un délai d'attente défini sur celui d'un " +"modÚle de tâche précis écrasera cette valeur." + +#: main/conf.py:208 +msgid "Default Inventory Update Timeout" +msgstr "Délai d'attente par défaut pour la mise à jour d'inventaire" + +#: main/conf.py:209 +msgid "" +"Maximum time to allow inventory updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual inventory " +"source will override this." +msgstr "" +"Délai maximal d'exécution des mises à jour d'inventaire. Utilisez la valeur " +"0 pour indiquer qu'aucun délai ne doit être imposé. Un délai d'attente " +"défini sur celui d'une source d'inventaire précise écrasera cette valeur." + +#: main/conf.py:220 +msgid "Default Project Update Timeout" +msgstr "Délai d'attente par défaut pour la mise à jour de projet" + +#: main/conf.py:221 +msgid "" +"Maximum time to allow project updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual project " +"will override this." +msgstr "" +"Délai maximal d'exécution des mises à jour de projet. Utilisez la valeur 0 " +"pour indiquer qu'aucun délai ne doit être imposé. Un délai d'attente défini " +"sur celui d'un projet précis écrasera cette valeur." + +#: main/conf.py:231 +msgid "Logging Aggregator Receiving Host" +msgstr "Agrégateur de journalisation - HÃŽte destinataire" + +#: main/conf.py:232 +msgid "External host maintain a log collector to send logs to" +msgstr "" +"L'hÃŽte externe conserve un collecteur de journaux à qui envoyer des journaux" + +#: main/conf.py:233 +#: main/conf.py:242 +#: main/conf.py:252 +#: main/conf.py:261 +#: main/conf.py:271 +#: main/conf.py:286 +#: main/conf.py:297 +#: main/conf.py:306 +msgid "Logging" +msgstr "Journalisation" + +#: main/conf.py:240 +msgid "Logging Aggregator Receiving Port" +msgstr "Agrégateur de journalisation - Port destinataire" + +#: main/conf.py:241 +msgid "Port that the log collector is listening on" +msgstr "Port sur lequel le collecteur de journaux écoute" + +#: main/conf.py:250 +msgid "Logging Aggregator Type: Logstash, Loggly, Datadog, etc" +msgstr "Type d'agrégateur de journalisation : Logstash, Loggly, Datadog, etc" + +#: main/conf.py:251 +msgid "The type of log aggregator service to format messages for" +msgstr "" +"Type de service d'agrégation de journaux pour lequel mettre en forme les " +"messages" + +#: main/conf.py:259 +msgid "Logging Aggregator Username to Authenticate With" +msgstr "" +"Nom d'utilisateur de l'agrégateur de journalisation avec lequel " +"s'authentifier" + +#: main/conf.py:260 +msgid "Username for Logstash or others (basic auth)" +msgstr "Nom d'utilisateur pour Logstash ou autres (authentification de base)" + +#: main/conf.py:269 +msgid "Logging Aggregator Password to Authenticate With" +msgstr "" +"Mot de passe de l'agrégateur de journalisation avec lequel s'authentifier" + +#: main/conf.py:270 +msgid "Password for Logstash or others (basic auth)" +msgstr "Mot de passe pour Logstash ou autres (authentification de base)" + +#: main/conf.py:278 +msgid "Loggers to send data to the log aggregator from" +msgstr "" +"Journaliseurs à partir duquel envoyer des données à l'agrégateur de journaux" + +#: main/conf.py:279 +msgid "" +"List of loggers that will send HTTP logs to the collector, these can include " +"any or all of: \n" +"activity_stream - logs duplicate to records entered in activity stream\n" +"job_events - callback data from Ansible job events\n" +"system_tracking - data generated from scan jobs\n" +"Sending generic Tower logs must be configured through local_settings." +"pyinstead of this mechanism." +msgstr "" +"Liste des journaliseurs qui enverront des journaux HTTP au collecteur " +"notamment (tous les types ou certains seulement) : \n" +"activity_stream - journaux en double pour les enregistrements entrés dans le " +"flux d'activité\n" +"job_events - données de rappel issues d'événements de tâche Ansible\n" +"system_tracking - données générées par des tâches de scan\n" +"L'envoi de journaux Tower génériques doit être configuré via local_settings." +"py sans l'utilisation de ce mécanisme." + +#: main/conf.py:293 +msgid "" +"Flag denoting to send individual messages for each fact in system tracking" +msgstr "" +"Marqueur indiquant l'envoi de messages distincts pour chaque fait dans le " +"suivi du systÚme" + +#: main/conf.py:294 +msgid "" +"If not set, the data from system tracking will be sent inside of a single " +"dictionary, but if set, separate requests will be sent for each package, " +"service, etc. that is found in the scan." +msgstr "" +"Si aucun n'est défini, les données de suivi du systÚme seront envoyées à " +"l'intérieur d'un seul dictionnaire. Si un marqueur est défini, des demandes " +"distinctes sont envoyées pour chaque paquetage, service, etc., détecté dans " +"le scan." + +#: main/conf.py:304 +msgid "Flag denoting whether to use the external logger system" +msgstr "" +"Marqueur indiquant s'il faut ou non utiliser le systÚme de journalisation " +"externe" + +#: main/conf.py:305 +msgid "" +"If not set, only normal settings data will be used to configure loggers." +msgstr "" +"Si aucun n'est défini, seules les données de paramÚtres normales seront " +"utilisées pour configurer les journaliseurs." + +#: main/models/activity_stream.py:22 +msgid "Entity Created" +msgstr "Entité créée" + +#: main/models/activity_stream.py:23 +msgid "Entity Updated" +msgstr "Entité mise à jour" + +#: main/models/activity_stream.py:24 +msgid "Entity Deleted" +msgstr "Entité supprimée" + +#: main/models/activity_stream.py:25 +msgid "Entity Associated with another Entity" +msgstr "Entité associée à une autre entité" + +#: main/models/activity_stream.py:26 +msgid "Entity was Disassociated with another Entity" +msgstr "Entité dissociée d'une autre entité" + +#: main/models/ad_hoc_commands.py:96 +msgid "No valid inventory." +msgstr "Aucun inventaire valide." + +#: main/models/ad_hoc_commands.py:103 +#: main/models/jobs.py:163 +msgid "You must provide a machine / SSH credential." +msgstr "Vous devez fournir des informations d'identification machine / SSH." + +#: main/models/ad_hoc_commands.py:114 +#: main/models/ad_hoc_commands.py:122 +msgid "Invalid type for ad hoc command" +msgstr "Type non valide pour la commande ad hoc" + +#: main/models/ad_hoc_commands.py:117 +msgid "Unsupported module for ad hoc commands." +msgstr "Module non pris en charge pour les commandes ad hoc." + +#: main/models/ad_hoc_commands.py:125 +#, python-format +msgid "No argument passed to %s module." +msgstr "Aucun argument transmis au module %s." + +#: main/models/ad_hoc_commands.py:220 +#: main/models/jobs.py:767 +msgid "Host Failed" +msgstr "Échec de l'hÃŽte" + +#: main/models/ad_hoc_commands.py:221 +#: main/models/jobs.py:768 +msgid "Host OK" +msgstr "HÃŽte OK" + +#: main/models/ad_hoc_commands.py:222 +#: main/models/jobs.py:771 +msgid "Host Unreachable" +msgstr "HÃŽte inaccessible" + +#: main/models/ad_hoc_commands.py:227 +#: main/models/jobs.py:770 +msgid "Host Skipped" +msgstr "HÃŽte ignoré" + +#: main/models/ad_hoc_commands.py:237 +#: main/models/jobs.py:798 +msgid "Debug" +msgstr "Déboguer" + +#: main/models/ad_hoc_commands.py:238 +#: main/models/jobs.py:799 +msgid "Verbose" +msgstr "Verbeux" + +#: main/models/ad_hoc_commands.py:239 +#: main/models/jobs.py:800 +msgid "Deprecated" +msgstr "ObsolÚte" + +#: main/models/ad_hoc_commands.py:240 +#: main/models/jobs.py:801 +msgid "Warning" +msgstr "Avertissement" + +#: main/models/ad_hoc_commands.py:241 +#: main/models/jobs.py:802 +msgid "System Warning" +msgstr "Avertissement systÚme" + +#: main/models/ad_hoc_commands.py:242 +#: main/models/jobs.py:803 +#: main/models/unified_jobs.py:62 +msgid "Error" +msgstr "Erreur" + +#: main/models/base.py:45 +#: main/models/base.py:51 +#: main/models/base.py:56 +msgid "Run" +msgstr "Exécuter" + +#: main/models/base.py:46 +#: main/models/base.py:52 +#: main/models/base.py:57 +msgid "Check" +msgstr "Vérifier" + +#: main/models/base.py:47 +msgid "Scan" +msgstr "Scanner" + +#: main/models/base.py:61 +msgid "Read Inventory" +msgstr "Lire l'inventaire" + +#: main/models/base.py:62 +msgid "Edit Inventory" +msgstr "Modifier l'inventaire" + +#: main/models/base.py:63 +msgid "Administrate Inventory" +msgstr "Administrer l'inventaire" + +#: main/models/base.py:64 +msgid "Deploy To Inventory" +msgstr "Déployer dans l'inventaire" + +#: main/models/base.py:65 +msgid "Deploy To Inventory (Dry Run)" +msgstr "Déployer dans l'inventaire (test uniquement)" + +#: main/models/base.py:66 +msgid "Scan an Inventory" +msgstr "Scanner un inventaire" + +#: main/models/base.py:67 +msgid "Create a Job Template" +msgstr "Créer un modÚle de tâche" + +#: main/models/credential.py:33 +msgid "Machine" +msgstr "Machine" + +#: main/models/credential.py:34 +msgid "Network" +msgstr "Réseau" + +#: main/models/credential.py:35 +msgid "Source Control" +msgstr "ContrÃŽle de la source" + +#: main/models/credential.py:36 +msgid "Amazon Web Services" +msgstr "Amazon Web Services" + +#: main/models/credential.py:37 +msgid "Rackspace" +msgstr "Rackspace" + +#: main/models/credential.py:38 +#: main/models/inventory.py:713 +msgid "VMware vCenter" +msgstr "VMware vCenter" + +#: main/models/credential.py:39 +#: main/models/inventory.py:714 +msgid "Red Hat Satellite 6" +msgstr "Red Hat Satellite 6" + +#: main/models/credential.py:40 +#: main/models/inventory.py:715 +msgid "Red Hat CloudForms" +msgstr "Red Hat CloudForms" + +#: main/models/credential.py:41 +#: main/models/inventory.py:710 +msgid "Google Compute Engine" +msgstr "Google Compute Engine" + +#: main/models/credential.py:42 +#: main/models/inventory.py:711 +msgid "Microsoft Azure Classic (deprecated)" +msgstr "Microsoft Azure Classic (obsolÚte)" + +#: main/models/credential.py:43 +#: main/models/inventory.py:712 +msgid "Microsoft Azure Resource Manager" +msgstr "Microsoft Azure Resource Manager" + +#: main/models/credential.py:44 +#: main/models/inventory.py:716 +msgid "OpenStack" +msgstr "OpenStack" + +#: main/models/credential.py:48 +msgid "None" +msgstr "Aucun" + +#: main/models/credential.py:49 +msgid "Sudo" +msgstr "Sudo" + +#: main/models/credential.py:50 +msgid "Su" +msgstr "Su" + +#: main/models/credential.py:51 +msgid "Pbrun" +msgstr "Pbrun" + +#: main/models/credential.py:52 +msgid "Pfexec" +msgstr "Pfexec" + +#: main/models/credential.py:101 +msgid "Host" +msgstr "HÃŽte" + +#: main/models/credential.py:102 +msgid "The hostname or IP address to use." +msgstr "Nom d'hÃŽte ou adresse IP à utiliser." + +#: main/models/credential.py:108 +msgid "Username" +msgstr "Nom d'utilisateur" + +#: main/models/credential.py:109 +msgid "Username for this credential." +msgstr "Nom d'utilisateur pour ces informations d'identification." + +#: main/models/credential.py:115 +msgid "Password" +msgstr "Mot de passe" + +#: main/models/credential.py:116 +msgid "" +"Password for this credential (or \"ASK\" to prompt the user for machine " +"credentials)." +msgstr "" +"Mot de passe pour ces informations d'identification (ou \"ASK\" pour " +"demander à l'utilisateur les informations d'identification de la machine)." + +#: main/models/credential.py:123 +msgid "Security Token" +msgstr "Token de sécurité" + +#: main/models/credential.py:124 +msgid "Security Token for this credential" +msgstr "Token de sécurité pour ces informations d'identification" + +#: main/models/credential.py:130 +msgid "Project" +msgstr "Projet" + +#: main/models/credential.py:131 +msgid "The identifier for the project." +msgstr "Identifiant du projet." + +#: main/models/credential.py:137 +msgid "Domain" +msgstr "Domaine" + +#: main/models/credential.py:138 +msgid "The identifier for the domain." +msgstr "Identifiant du domaine." + +#: main/models/credential.py:143 +msgid "SSH private key" +msgstr "Clé privée SSH" + +#: main/models/credential.py:144 +msgid "RSA or DSA private key to be used instead of password." +msgstr "Clé privée RSA ou DSA à utiliser au lieu du mot de passe." + +#: main/models/credential.py:150 +msgid "SSH key unlock" +msgstr "Déverrouillage de la clé SSH" + +#: main/models/credential.py:151 +msgid "" +"Passphrase to unlock SSH private key if encrypted (or \"ASK\" to prompt the " +"user for machine credentials)." +msgstr "" +"Phrase de passe servant à déverrouiller la clé privée SSH si elle est " +"chiffrée (ou \"ASK\" pour demander à l'utilisateur les informations " +"d'identification de la machine)." + +#: main/models/credential.py:159 +msgid "Privilege escalation method." +msgstr "Méthode d'élévation des privilÚges." + +#: main/models/credential.py:165 +msgid "Privilege escalation username." +msgstr "Nom d'utilisateur pour l'élévation des privilÚges" + +#: main/models/credential.py:171 +msgid "Password for privilege escalation method." +msgstr "Mot de passe pour la méthode d'élévation des privilÚges." + +#: main/models/credential.py:177 +msgid "Vault password (or \"ASK\" to prompt the user)." +msgstr "Mot de passe Vault (ou \"ASK\" pour le demander à l'utilisateur)." + +#: main/models/credential.py:181 +msgid "Whether to use the authorize mechanism." +msgstr "Indique s'il faut ou non utiliser le mécanisme d'autorisation." + +#: main/models/credential.py:187 +msgid "Password used by the authorize mechanism." +msgstr "Mot de passe utilisé par le mécanisme d'autorisation." + +#: main/models/credential.py:193 +msgid "Client Id or Application Id for the credential" +msgstr "" +"ID du client ou de l'application pour les informations d'identification" + +#: main/models/credential.py:199 +msgid "Secret Token for this credential" +msgstr "Token secret pour ces informations d'identification" + +#: main/models/credential.py:205 +msgid "Subscription identifier for this credential" +msgstr "ID d'abonnement pour ces informations d'identification" + +#: main/models/credential.py:211 +msgid "Tenant identifier for this credential" +msgstr "ID de tenant pour ces informations d'identification" + +#: main/models/credential.py:281 +msgid "Host required for VMware credential." +msgstr "HÃŽte requis pour les informations d'identification VMware." + +#: main/models/credential.py:283 +msgid "Host required for OpenStack credential." +msgstr "HÃŽte requis pour les informations d'identification OpenStack." + +#: main/models/credential.py:292 +msgid "Access key required for AWS credential." +msgstr "Clé d'accÚs requise pour les informations d'identification AWS." + +#: main/models/credential.py:294 +msgid "Username required for Rackspace credential." +msgstr "" +"Nom d'utilisateur requis pour les informations d'identification Rackspace." + +#: main/models/credential.py:297 +msgid "Username required for VMware credential." +msgstr "" +"Nom d'utilisateur requis pour les informations d'identification VMware." + +#: main/models/credential.py:299 +msgid "Username required for OpenStack credential." +msgstr "" +"Nom d'utilisateur requis pour les informations d'identification OpenStack." + +#: main/models/credential.py:305 +msgid "Secret key required for AWS credential." +msgstr "Clé secrÚte requise pour les informations d'identification AWS." + +#: main/models/credential.py:307 +msgid "API key required for Rackspace credential." +msgstr "Clé API requise pour les informations d'identification Rackspace." + +#: main/models/credential.py:309 +msgid "Password required for VMware credential." +msgstr "Mot de passe requis pour les informations d'identification VMware." + +#: main/models/credential.py:311 +msgid "Password or API key required for OpenStack credential." +msgstr "" +"Mot de passe ou clé API requis(e) pour les informations d'identification " +"OpenStack." + +#: main/models/credential.py:317 +msgid "Project name required for OpenStack credential." +msgstr "" +"Nom de projet requis pour les informations d'identification OpenStack." + +#: main/models/credential.py:344 +msgid "SSH key unlock must be set when SSH key is encrypted." +msgstr "" +"Le déverrouillage de la clé SSH doit être défini lorsque la clé SSH est " +"chiffrée." + +#: main/models/credential.py:350 +msgid "Credential cannot be assigned to both a user and team." +msgstr "" +"Les informations d'identification ne peuvent pas être attribuées à la fois à " +"un utilisateur et une équipe." + +#: main/models/fact.py:21 +msgid "Host for the facts that the fact scan captured." +msgstr "HÃŽte pour les faits que le scan de faits a capturés." + +#: main/models/fact.py:26 +msgid "Date and time of the corresponding fact scan gathering time." +msgstr "" +"Date et heure du scan de faits correspondant au moment de la collecte des " +"faits." + +#: main/models/fact.py:29 +msgid "" +"Arbitrary JSON structure of module facts captured at timestamp for a single " +"host." +msgstr "" +"Structure JSON arbitraire des faits de module capturés au moment de " +"l'horodatage pour un seul hÃŽte." + +#: main/models/inventory.py:45 +msgid "inventories" +msgstr "inventaires" + +#: main/models/inventory.py:52 +msgid "Organization containing this inventory." +msgstr "Organisation contenant cet inventaire." + +#: main/models/inventory.py:58 +msgid "Inventory variables in JSON or YAML format." +msgstr "Variables d'inventaire au format JSON ou YAML." + +#: main/models/inventory.py:63 +msgid "Flag indicating whether any hosts in this inventory have failed." +msgstr "Marqueur indiquant si les hÃŽtes de cet inventaire ont échoué." + +#: main/models/inventory.py:68 +msgid "Total number of hosts in this inventory." +msgstr "Nombre total d'hÃŽtes dans cet inventaire." + +#: main/models/inventory.py:73 +msgid "Number of hosts in this inventory with active failures." +msgstr "Nombre d'hÃŽtes dans cet inventaire avec des échecs non résolus." + +#: main/models/inventory.py:78 +msgid "Total number of groups in this inventory." +msgstr "Nombre total de groupes dans cet inventaire." + +#: main/models/inventory.py:83 +msgid "Number of groups in this inventory with active failures." +msgstr "Nombre de groupes dans cet inventaire avec des échecs non résolus." + +#: main/models/inventory.py:88 +msgid "" +"Flag indicating whether this inventory has any external inventory sources." +msgstr "" +"Marqueur indiquant si cet inventaire contient des sources d'inventaire " +"externes." + +#: main/models/inventory.py:93 +msgid "" +"Total number of external inventory sources configured within this inventory." +msgstr "" +"Nombre total de sources d'inventaire externes configurées dans cet " +"inventaire." + +#: main/models/inventory.py:98 +msgid "Number of external inventory sources in this inventory with failures." +msgstr "" +"Nombre total de sources d'inventaire externes en échec dans cet inventaire." + +#: main/models/inventory.py:339 +msgid "Is this host online and available for running jobs?" +msgstr "Cet hÃŽte est-il en ligne et disponible pour exécuter des tâches ?" + +#: main/models/inventory.py:345 +msgid "" +"The value used by the remote inventory source to uniquely identify the host" +msgstr "" +"Valeur utilisée par la source d'inventaire distante pour identifier l'hÃŽte " +"de façon unique" + +#: main/models/inventory.py:350 +msgid "Host variables in JSON or YAML format." +msgstr "Variables d'hÃŽte au format JSON ou YAML." + +#: main/models/inventory.py:372 +msgid "Flag indicating whether the last job failed for this host." +msgstr "Marqueur indiquant si la derniÚre tâche a échoué pour cet hÃŽte." + +#: main/models/inventory.py:377 +msgid "" +"Flag indicating whether this host was created/updated from any external " +"inventory sources." +msgstr "" +"Marqueur indiquant si cet hÃŽte a été créé/mis à jour à partir de sources " +"d'inventaire externes." + +#: main/models/inventory.py:383 +msgid "Inventory source(s) that created or modified this host." +msgstr "Sources d'inventaire qui ont créé ou modifié cet hÃŽte." + +#: main/models/inventory.py:474 +msgid "Group variables in JSON or YAML format." +msgstr "Variables de groupe au format JSON ou YAML." + +#: main/models/inventory.py:480 +msgid "Hosts associated directly with this group." +msgstr "HÃŽtes associés directement à ce groupe." + +#: main/models/inventory.py:485 +msgid "Total number of hosts directly or indirectly in this group." +msgstr "" +"Nombre total d'hÃŽtes associés directement ou indirectement à ce groupe." + +#: main/models/inventory.py:490 +msgid "Flag indicating whether this group has any hosts with active failures." +msgstr "" +"Marqueur indiquant si ce groupe possÚde ou non des hÃŽtes avec des échecs non " +"résolus." + +#: main/models/inventory.py:495 +msgid "Number of hosts in this group with active failures." +msgstr "Nombre d'hÃŽtes dans ce groupe avec des échecs non résolus." + +#: main/models/inventory.py:500 +msgid "Total number of child groups contained within this group." +msgstr "Nombre total de groupes enfants compris dans ce groupe." + +#: main/models/inventory.py:505 +msgid "Number of child groups within this group that have active failures." +msgstr "Nombre de groupes enfants dans ce groupe avec des échecs non résolus." + +#: main/models/inventory.py:510 +msgid "" +"Flag indicating whether this group was created/updated from any external " +"inventory sources." +msgstr "" +"Marqueur indiquant si ce groupe a été créé/mis à jour à partir de sources " +"d'inventaire externes." + +#: main/models/inventory.py:516 +msgid "Inventory source(s) that created or modified this group." +msgstr "Sources d'inventaire qui ont créé ou modifié ce groupe." + +#: main/models/inventory.py:706 +#: main/models/projects.py:42 +#: main/models/unified_jobs.py:386 +msgid "Manual" +msgstr "Manuel" + +#: main/models/inventory.py:707 +msgid "Local File, Directory or Script" +msgstr "Fichier local, répertoire ou script" + +#: main/models/inventory.py:708 +msgid "Rackspace Cloud Servers" +msgstr "Serveurs cloud Rackspace" + +#: main/models/inventory.py:709 +msgid "Amazon EC2" +msgstr "Amazon EC2" + +#: main/models/inventory.py:717 +msgid "Custom Script" +msgstr "Script personnalisé" + +#: main/models/inventory.py:828 +msgid "Inventory source variables in YAML or JSON format." +msgstr "Variables de source d'inventaire au format JSON ou YAML." + +#: main/models/inventory.py:847 +msgid "" +"Comma-separated list of filter expressions (EC2 only). Hosts are imported " +"when ANY of the filters match." +msgstr "" +"Liste d'expressions de filtre séparées par des virgules (EC2 uniquement). " +"Les hÃŽtes sont importés lorsque l'UN des filtres correspondent." + +#: main/models/inventory.py:853 +msgid "Limit groups automatically created from inventory source (EC2 only)." +msgstr "" +"Limiter automatiquement les groupes créés à partir de la source d'inventaire " +"(EC2 uniquement)." + +#: main/models/inventory.py:857 +msgid "Overwrite local groups and hosts from remote inventory source." +msgstr "" +"Écraser les groupes locaux et les hÃŽtes de la source d'inventaire distante." + +#: main/models/inventory.py:861 +msgid "Overwrite local variables from remote inventory source." +msgstr "Écraser les variables locales de la source d'inventaire distante." + +#: main/models/inventory.py:893 +msgid "Availability Zone" +msgstr "Zone de disponibilité" + +#: main/models/inventory.py:894 +msgid "Image ID" +msgstr "ID d'image" + +#: main/models/inventory.py:895 +msgid "Instance ID" +msgstr "ID d'instance" + +#: main/models/inventory.py:896 +msgid "Instance Type" +msgstr "Type d'instance" + +#: main/models/inventory.py:897 +msgid "Key Name" +msgstr "Nom de la clé" + +#: main/models/inventory.py:898 +msgid "Region" +msgstr "Région" + +#: main/models/inventory.py:899 +msgid "Security Group" +msgstr "Groupe de sécurité" + +#: main/models/inventory.py:900 +msgid "Tags" +msgstr "Balises" + +#: main/models/inventory.py:901 +msgid "VPC ID" +msgstr "ID VPC" + +#: main/models/inventory.py:902 +msgid "Tag None" +msgstr "Ne rien baliser" + +#: main/models/inventory.py:973 +#, python-format +msgid "" +"Cloud-based inventory sources (such as %s) require credentials for the " +"matching cloud service." +msgstr "" +"Les sources d'inventaire cloud (telles que% s) requiÚrent des informations " +"d'identification pour le service cloud correspondant." + +#: main/models/inventory.py:980 +msgid "Credential is required for a cloud source." +msgstr "" +"Les informations d'identification sont requises pour une source cloud." + +#: main/models/inventory.py:1005 +#, python-format +msgid "Invalid %(source)s region%(plural)s: %(region)s" +msgstr "Région %(source)s non valide%(plural)s : %(region)s" + +#: main/models/inventory.py:1031 +#, python-format +msgid "Invalid filter expression%(plural)s: %(filter)s" +msgstr "Expression de filtre non valide %(plural)s : %(filter)s" + +#: main/models/inventory.py:1050 +#, python-format +msgid "Invalid group by choice%(plural)s: %(choice)s" +msgstr "Choix de regroupement non valide %(plural)s : %(choice)s" + +#: main/models/inventory.py:1198 +#, python-format +msgid "" +"Unable to configure this item for cloud sync. It is already managed by %s." +msgstr "" +"Impossible de configurer cet élément pour la synchronisation dans le cloud. " +"Il est déjà géré par %s." + +#: main/models/inventory.py:1293 +msgid "Inventory script contents" +msgstr "Contenus des scripts d'inventaire" + +#: main/models/inventory.py:1298 +msgid "Organization owning this inventory script" +msgstr "Organisation propriétaire de ce script d'inventaire." + +#: main/models/jobs.py:171 +msgid "You must provide a network credential." +msgstr "Vous devez fournir des informations d'identification réseau." + +#: main/models/jobs.py:179 +msgid "" +"Must provide a credential for a cloud provider, such as Amazon Web Services " +"or Rackspace." +msgstr "" +"Entrez les informations d'identification d'un fournisseur de services cloud " +"comme Amazon Web Services ou Rackspace." + +#: main/models/jobs.py:271 +msgid "Job Template must provide 'inventory' or allow prompting for it." +msgstr "" +"Le modÚle de tâche doit fournir un inventaire ou permettre d'en demander un." + +#: main/models/jobs.py:275 +msgid "Job Template must provide 'credential' or allow prompting for it." +msgstr "" +"Le modÚle de tâche doit fournir des informations d'identification ou " +"permettre d'en demander." + +#: main/models/jobs.py:364 +msgid "Cannot override job_type to or from a scan job." +msgstr "Impossible de remplacer job_type vers ou depuis une tâche de scan." + +#: main/models/jobs.py:367 +msgid "Inventory cannot be changed at runtime for scan jobs." +msgstr "" +"L'inventaire ne peut pas être modifié à l'exécution pour les tâches de scan." + +#: main/models/jobs.py:433 +#: main/models/projects.py:243 +msgid "SCM Revision" +msgstr "Révision SCM" + +#: main/models/jobs.py:434 +msgid "The SCM Revision from the Project used for this job, if available" +msgstr "Révision SCM du projet utilisé pour cette tâche, le cas échéant" + +#: main/models/jobs.py:442 +msgid "" +"The SCM Refresh task used to make sure the playbooks were available for the " +"job run" +msgstr "" +"Activité d'actualisation du SCM qui permet de s'assurer que les playbooks " +"étaient disponibles pour l'exécution de la tâche" + +#: main/models/jobs.py:666 +msgid "job host summaries" +msgstr "récapitulatifs des hÃŽtes pour la tâche" + +#: main/models/jobs.py:769 +msgid "Host Failure" +msgstr "Échec de l'hÃŽte" + +#: main/models/jobs.py:772 +#: main/models/jobs.py:786 +msgid "No Hosts Remaining" +msgstr "Aucun hÃŽte restant" + +#: main/models/jobs.py:773 +msgid "Host Polling" +msgstr "Interrogation de l'hÃŽte" + +#: main/models/jobs.py:774 +msgid "Host Async OK" +msgstr "Désynchronisation des hÃŽtes OK" + +#: main/models/jobs.py:775 +msgid "Host Async Failure" +msgstr "Échec de désynchronisation des hÃŽtes" + +#: main/models/jobs.py:776 +msgid "Item OK" +msgstr "Élément OK" + +#: main/models/jobs.py:777 +msgid "Item Failed" +msgstr "Échec de l'élément" + +#: main/models/jobs.py:778 +msgid "Item Skipped" +msgstr "Élément ignoré" + +#: main/models/jobs.py:779 +msgid "Host Retry" +msgstr "Nouvel essai de l'hÃŽte" + +#: main/models/jobs.py:781 +msgid "File Difference" +msgstr "Écart entre les fichiers" + +#: main/models/jobs.py:782 +msgid "Playbook Started" +msgstr "Playbook démarré" + +#: main/models/jobs.py:783 +msgid "Running Handlers" +msgstr "Descripteurs d'exécution" + +#: main/models/jobs.py:784 +msgid "Including File" +msgstr "Ajout de fichier" + +#: main/models/jobs.py:785 +msgid "No Hosts Matched" +msgstr "Aucun hÃŽte correspondant" + +#: main/models/jobs.py:787 +msgid "Task Started" +msgstr "Tâche démarrée" + +#: main/models/jobs.py:789 +msgid "Variables Prompted" +msgstr "Variables demandées" + +#: main/models/jobs.py:790 +msgid "Gathering Facts" +msgstr "Collecte des faits" + +#: main/models/jobs.py:791 +msgid "internal: on Import for Host" +msgstr "interne : à l'importation pour l'hÃŽte" + +#: main/models/jobs.py:792 +msgid "internal: on Not Import for Host" +msgstr "interne : à la non-importation pour l'hÃŽte" + +#: main/models/jobs.py:793 +msgid "Play Started" +msgstr "ScÚne démarrée" + +#: main/models/jobs.py:794 +msgid "Playbook Complete" +msgstr "Playbook terminé" + +#: main/models/jobs.py:1240 +msgid "Remove jobs older than a certain number of days" +msgstr "Supprimer les tâches plus anciennes qu'un certain nombre de jours" + +#: main/models/jobs.py:1241 +msgid "Remove activity stream entries older than a certain number of days" +msgstr "" +"Supprimer les entrées du flux d'activité plus anciennes qu'un certain nombre " +"de jours" + +#: main/models/jobs.py:1242 +msgid "Purge and/or reduce the granularity of system tracking data" +msgstr "Purger et/ou réduire la granularité des données de suivi du systÚme" + +#: main/models/label.py:29 +msgid "Organization this label belongs to." +msgstr "Organisation à laquelle appartient ce libellé." + +#: main/models/notifications.py:31 +msgid "Email" +msgstr "Email" + +#: main/models/notifications.py:32 +msgid "Slack" +msgstr "Slack" + +#: main/models/notifications.py:33 +msgid "Twilio" +msgstr "Twilio" + +#: main/models/notifications.py:34 +msgid "Pagerduty" +msgstr "Pagerduty" + +#: main/models/notifications.py:35 +msgid "HipChat" +msgstr "HipChat" + +#: main/models/notifications.py:36 +msgid "Webhook" +msgstr "Webhook" + +#: main/models/notifications.py:37 +msgid "IRC" +msgstr "IRC" + +#: main/models/notifications.py:127 +#: main/models/unified_jobs.py:57 +msgid "Pending" +msgstr "En attente" + +#: main/models/notifications.py:128 +#: main/models/unified_jobs.py:60 +msgid "Successful" +msgstr "Réussi" + +#: main/models/notifications.py:129 +#: main/models/unified_jobs.py:61 +msgid "Failed" +msgstr "Échec" + +#: main/models/organization.py:157 +msgid "Execute Commands on the Inventory" +msgstr "Exécuter des commandes sur l'inventaire" + +#: main/models/organization.py:211 +msgid "Token not invalidated" +msgstr "Token non invalidé" + +#: main/models/organization.py:212 +msgid "Token is expired" +msgstr "Token arrivé à expiration" + +#: main/models/organization.py:213 +msgid "Maximum per-user sessions reached" +msgstr "Nombre maximum de sessions par utilisateur atteint." + +#: main/models/organization.py:216 +msgid "Invalid token" +msgstr "Token non valide" + +#: main/models/organization.py:233 +msgid "Reason the auth token was invalidated." +msgstr "" +"Raison pour laquelle le token d'authentification a été rendu non valide." + +#: main/models/organization.py:272 +msgid "Invalid reason specified" +msgstr "Raison de non validité spécifiée" + +#: main/models/projects.py:43 +msgid "Git" +msgstr "Git" + +#: main/models/projects.py:44 +msgid "Mercurial" +msgstr "Mercurial" + +#: main/models/projects.py:45 +msgid "Subversion" +msgstr "Subversion" + +#: main/models/projects.py:71 +msgid "" +"Local path (relative to PROJECTS_ROOT) containing playbooks and related " +"files for this project." +msgstr "" +"Chemin local (relatif à PROJECTS_ROOT) contenant des playbooks et des " +"fichiers associés pour ce projet." + +#: main/models/projects.py:80 +msgid "SCM Type" +msgstr "Type de SCM" + +#: main/models/projects.py:81 +msgid "Specifies the source control system used to store the project." +msgstr "" +"Spécifie le systÚme de contrÃŽle des sources utilisé pour stocker le projet." + +#: main/models/projects.py:87 +msgid "SCM URL" +msgstr "URL du SCM" + +#: main/models/projects.py:88 +msgid "The location where the project is stored." +msgstr "Emplacement où le projet est stocké." + +#: main/models/projects.py:94 +msgid "SCM Branch" +msgstr "Branche SCM" + +#: main/models/projects.py:95 +msgid "Specific branch, tag or commit to checkout." +msgstr "Branche, balise ou validation spécifique à valider." + +#: main/models/projects.py:99 +msgid "Discard any local changes before syncing the project." +msgstr "Ignorez les modifications locales avant de synchroniser le projet." + +#: main/models/projects.py:103 +msgid "Delete the project before syncing." +msgstr "Supprimez le projet avant la synchronisation." + +#: main/models/projects.py:116 +msgid "The amount of time to run before the task is canceled." +msgstr "Délai écoulé avant que la tâche ne soit annulée." + +#: main/models/projects.py:130 +msgid "Invalid SCM URL." +msgstr "URL du SCM incorrecte." + +#: main/models/projects.py:133 +msgid "SCM URL is required." +msgstr "L'URL du SCM est requise." + +#: main/models/projects.py:142 +msgid "Credential kind must be 'scm'." +msgstr "Le type d'informations d'identification doit être 'scm'." + +#: main/models/projects.py:157 +msgid "Invalid credential." +msgstr "Informations d'identification non valides." + +#: main/models/projects.py:229 +msgid "Update the project when a job is launched that uses the project." +msgstr "Mettez à jour le projet lorsqu'une tâche qui l'utilise est lancée." + +#: main/models/projects.py:234 +msgid "" +"The number of seconds after the last project update ran that a newproject " +"update will be launched as a job dependency." +msgstr "" +"Délai écoulé (en secondes) entre la derniÚre mise à jour du projet et le " +"lancement d'une nouvelle mise à jour en tant que dépendance de la tâche." + +#: main/models/projects.py:244 +msgid "The last revision fetched by a project update" +msgstr "DerniÚre révision récupérée par une mise à jour du projet" + +#: main/models/projects.py:251 +msgid "Playbook Files" +msgstr "Fichiers de playbook" + +#: main/models/projects.py:252 +msgid "List of playbooks found in the project" +msgstr "Liste des playbooks trouvés dans le projet" + +#: main/models/rbac.py:122 +msgid "roles" +msgstr "rÃŽles" + +#: main/models/rbac.py:438 +msgid "role_ancestors" +msgstr "role_ancestors" + +#: main/models/schedules.py:69 +msgid "Enables processing of this schedule by Tower." +msgstr "Active le traitement de ce calendrier par Tower." + +#: main/models/schedules.py:75 +msgid "The first occurrence of the schedule occurs on or after this time." +msgstr "" +"La premiÚre occurrence du calendrier se produit à ce moment précis ou " +"ultérieurement." + +#: main/models/schedules.py:81 +msgid "" +"The last occurrence of the schedule occurs before this time, aftewards the " +"schedule expires." +msgstr "" +"La derniÚre occurrence du calendrier se produit avant ce moment précis. " +"Passé ce délai, le calendrier arrive à expiration." + +#: main/models/schedules.py:85 +msgid "A value representing the schedules iCal recurrence rule." +msgstr "Valeur représentant la rÚgle de récurrence iCal des calendriers." + +#: main/models/schedules.py:91 +msgid "The next time that the scheduled action will run." +msgstr "La prochaine fois que l'action planifiée s'exécutera." + +#: main/models/unified_jobs.py:56 +msgid "New" +msgstr "Nouveau" + +#: main/models/unified_jobs.py:58 +msgid "Waiting" +msgstr "En attente" + +#: main/models/unified_jobs.py:59 +msgid "Running" +msgstr "En cours d'exécution" + +#: main/models/unified_jobs.py:63 +msgid "Canceled" +msgstr "Annulé" + +#: main/models/unified_jobs.py:67 +msgid "Never Updated" +msgstr "Jamais mis à jour" + +#: main/models/unified_jobs.py:71 +#: ui/templates/ui/index.html:85 +#: ui/templates/ui/index.html.py:104 +msgid "OK" +msgstr "OK" + +#: main/models/unified_jobs.py:72 +msgid "Missing" +msgstr "Manquant" + +#: main/models/unified_jobs.py:76 +msgid "No External Source" +msgstr "Aucune source externe" + +#: main/models/unified_jobs.py:83 +msgid "Updating" +msgstr "Mise à jour en cours" + +#: main/models/unified_jobs.py:387 +msgid "Relaunch" +msgstr "Relancer" + +#: main/models/unified_jobs.py:388 +msgid "Callback" +msgstr "Rappeler" + +#: main/models/unified_jobs.py:389 +msgid "Scheduled" +msgstr "Planifié" + +#: main/models/unified_jobs.py:390 +msgid "Dependency" +msgstr "Dépendance" + +#: main/models/unified_jobs.py:391 +msgid "Workflow" +msgstr "Workflow" + +#: main/models/unified_jobs.py:437 +msgid "The Tower node the job executed on." +msgstr "Nœud Tower sur lequel la tâche s'est exécutée." + +#: main/models/unified_jobs.py:463 +msgid "The date and time the job was queued for starting." +msgstr "" +"Date et heure auxquelles la tâche a été mise en file d'attente pour le " +"démarrage." + +#: main/models/unified_jobs.py:469 +msgid "The date and time the job finished execution." +msgstr "Date et heure de fin d'exécution de la tâche." + +#: main/models/unified_jobs.py:475 +msgid "Elapsed time in seconds that the job ran." +msgstr "Délai écoulé (en secondes) pendant lequel la tâche s'est exécutée." + +#: main/models/unified_jobs.py:497 +msgid "" +"A status field to indicate the state of the job if it wasn't able to run and " +"capture stdout" +msgstr "" +"Champ d'état indiquant l'état de la tâche si elle n'a pas pu s'exécuter et " +"capturer stdout" + +#: main/notifications/base.py:17 +#: main/notifications/email_backend.py:28 +msgid "{} #{} had status {} on Ansible Tower, view details at {}\n" +"\n" +msgstr "{} #{} était à l'état {} sur Ansible Tower, voir les détails sur {}\n" +"\n" + +#: main/notifications/hipchat_backend.py:46 +msgid "Error sending messages: {}" +msgstr "Erreur lors de l'envoi de messages : {}" + +#: main/notifications/hipchat_backend.py:48 +msgid "Error sending message to hipchat: {}" +msgstr "Erreur lors de l'envoi d'un message à hipchat : {}" + +#: main/notifications/irc_backend.py:54 +msgid "Exception connecting to irc server: {}" +msgstr "Exception lors de la connexion au serveur irc : {}" + +#: main/notifications/pagerduty_backend.py:39 +msgid "Exception connecting to PagerDuty: {}" +msgstr "Exception lors de la connexion à PagerDuty : {}" + +#: main/notifications/pagerduty_backend.py:48 +#: main/notifications/slack_backend.py:52 +#: main/notifications/twilio_backend.py:46 +msgid "Exception sending messages: {}" +msgstr "Exception lors de l'envoi de messages : {}" + +#: main/notifications/twilio_backend.py:36 +msgid "Exception connecting to Twilio: {}" +msgstr "Exception lors de la connexion à Twilio : {}" + +#: main/notifications/webhook_backend.py:38 +#: main/notifications/webhook_backend.py:40 +msgid "Error sending notification webhook: {}" +msgstr "Erreur lors de l'envoi d'un webhook de notification : {}" + +#: main/tasks.py:139 +msgid "Ansible Tower host usage over 90%" +msgstr "Utilisation d'hÃŽtes Ansible Tower supérieure à 90 %" + +#: main/tasks.py:144 +msgid "Ansible Tower license will expire soon" +msgstr "La licence Ansible Tower expirera bientÃŽt" + +#: main/tasks.py:197 +msgid "status_str must be either succeeded or failed" +msgstr "status_str doit être une réussite ou un échec" + +#: main/utils/common.py:88 +#, python-format +msgid "Unable to convert \"%s\" to boolean" +msgstr "Impossible de convertir \"% s\" en booléen" + +#: main/utils/common.py:242 +#, python-format +msgid "Unsupported SCM type \"%s\"" +msgstr "Type de SCM \"%s\" non pris en charge" + +#: main/utils/common.py:249 +#: main/utils/common.py:261 +#: main/utils/common.py:280 +#, python-format +msgid "Invalid %s URL" +msgstr "URL %s non valide." + +#: main/utils/common.py:251 +#: main/utils/common.py:289 +#, python-format +msgid "Unsupported %s URL" +msgstr "URL %s non prise en charge" + +#: main/utils/common.py:291 +#, python-format +msgid "Unsupported host \"%s\" for file:// URL" +msgstr "HÃŽte \"%s\" non pris en charge pour le fichier ://URL" + +#: main/utils/common.py:293 +#, python-format +msgid "Host is required for %s URL" +msgstr "L'hÃŽte est requis pour l'URL %s" + +#: main/utils/common.py:311 +#, python-format +msgid "Username must be \"git\" for SSH access to %s." +msgstr "Le nom d'utilisateur doit être \"git\" pour l'accÚs SSH à %s." + +#: main/utils/common.py:317 +#, python-format +msgid "Username must be \"hg\" for SSH access to %s." +msgstr "Le nom d'utilisateur doit être \"hg\" pour l'accÚs SSH à %s." + +#: main/validators.py:60 +#, python-format +msgid "Invalid certificate or key: %r..." +msgstr "Certificat ou clé non valide : %r..." + +#: main/validators.py:74 +#, python-format +msgid "Invalid private key: unsupported type \"%s\"" +msgstr "Clé privée non valide : type \"%s\" non pris en charge" + +#: main/validators.py:78 +#, python-format +msgid "Unsupported PEM object type: \"%s\"" +msgstr "Type d'objet PEM non pris en charge : \"%s\"" + +#: main/validators.py:103 +msgid "Invalid base64-encoded data" +msgstr "Données codées en base64 non valides" + +#: main/validators.py:122 +msgid "Exactly one private key is required." +msgstr "Une clé privée uniquement est nécessaire." + +#: main/validators.py:124 +msgid "At least one private key is required." +msgstr "Une clé privée au moins est nécessaire." + +#: main/validators.py:126 +#, python-format +msgid "" +"At least %(min_keys)d private keys are required, only %(key_count)d provided." +"" +msgstr "" +"%(min_keys)d clés privées au moins sont requises, mais %(key_count)d " +"uniquement ont été fournies." + +#: main/validators.py:129 +#, python-format +msgid "Only one private key is allowed, %(key_count)d provided." +msgstr "Une seule clé privée est autorisée, %(key_count)d ont été fournies." + +#: main/validators.py:131 +#, python-format +msgid "" +"No more than %(max_keys)d private keys are allowed, %(key_count)d provided." +msgstr "" +"Pas plus de %(max_keys)d clés privées sont autorisées, %(key_count)d ont été " +"fournies." + +#: main/validators.py:136 +msgid "Exactly one certificate is required." +msgstr "Un certificat uniquement est nécessaire." + +#: main/validators.py:138 +msgid "At least one certificate is required." +msgstr "Un certificat au moins est nécessaire." + +#: main/validators.py:140 +#, python-format +msgid "" +"At least %(min_certs)d certificates are required, only %(cert_count)d " +"provided." +msgstr "" +"%(min_certs)d certificats au moins sont requis, mais %(cert_count)d " +"uniquement ont été fournis." + +#: main/validators.py:143 +#, python-format +msgid "Only one certificate is allowed, %(cert_count)d provided." +msgstr "Un seul certificat est autorisé, %(cert_count)d ont été fournis." + +#: main/validators.py:145 +#, python-format +msgid "" +"No more than %(max_certs)d certificates are allowed, %(cert_count)d provided." +"" +msgstr "" +"Pas plus de %(max_certs)d certificats sont autorisés, %(cert_count)d ont été " +"fournis." + +#: main/views.py:20 +msgid "API Error" +msgstr "Erreur API" + +#: main/views.py:49 +msgid "Bad Request" +msgstr "Requête incorrecte" + +#: main/views.py:50 +msgid "The request could not be understood by the server." +msgstr "La requête n'a pas pu être comprise par le serveur." + +#: main/views.py:57 +msgid "Forbidden" +msgstr "Interdiction" + +#: main/views.py:58 +msgid "You don't have permission to access the requested resource." +msgstr "Vous n'êtes pas autorisé à accéder à la ressource demandée." + +#: main/views.py:65 +msgid "Not Found" +msgstr "Introuvable" + +#: main/views.py:66 +msgid "The requested resource could not be found." +msgstr "Impossible de trouver la ressource demandée." + +#: main/views.py:73 +msgid "Server Error" +msgstr "Erreur serveur" + +#: main/views.py:74 +msgid "A server error has occurred." +msgstr "Une erreur serveur s'est produite." + +#: settings/defaults.py:593 +msgid "Chicago" +msgstr "Chicago" + +#: settings/defaults.py:594 +msgid "Dallas/Ft. Worth" +msgstr "Dallas/Ft. Worth" + +#: settings/defaults.py:595 +msgid "Northern Virginia" +msgstr "Virginie du Nord" + +#: settings/defaults.py:596 +msgid "London" +msgstr "Londres" + +#: settings/defaults.py:597 +msgid "Sydney" +msgstr "Sydney" + +#: settings/defaults.py:598 +msgid "Hong Kong" +msgstr "Hong Kong" + +#: settings/defaults.py:625 +msgid "US East (Northern Virginia)" +msgstr "Est des États-Unis (Virginie du Nord)" + +#: settings/defaults.py:626 +msgid "US East (Ohio)" +msgstr "Est des États-Unis (Ohio)" + +#: settings/defaults.py:627 +msgid "US West (Oregon)" +msgstr "Ouest des États-Unis (Oregon)" + +#: settings/defaults.py:628 +msgid "US West (Northern California)" +msgstr "Ouest des États-Unis (Nord de la Californie)" + +#: settings/defaults.py:629 +msgid "EU (Frankfurt)" +msgstr "UE (Francfort)" + +#: settings/defaults.py:630 +msgid "EU (Ireland)" +msgstr "UE (Irlande)" + +#: settings/defaults.py:631 +msgid "Asia Pacific (Singapore)" +msgstr "Asie-Pacifique (Singapour)" + +#: settings/defaults.py:632 +msgid "Asia Pacific (Sydney)" +msgstr "Asie-Pacifique (Sydney)" + +#: settings/defaults.py:633 +msgid "Asia Pacific (Tokyo)" +msgstr "Asie-Pacifique (Tokyo)" + +#: settings/defaults.py:634 +msgid "Asia Pacific (Seoul)" +msgstr "Asie-Pacifique (Séoul)" + +#: settings/defaults.py:635 +msgid "Asia Pacific (Mumbai)" +msgstr "Asie-Pacifique (Mumbai)" + +#: settings/defaults.py:636 +msgid "South America (Sao Paulo)" +msgstr "Amérique du Sud (Sao Paulo)" + +#: settings/defaults.py:637 +msgid "US West (GovCloud)" +msgstr "Ouest des États-Unis (GovCloud)" + +#: settings/defaults.py:638 +msgid "China (Beijing)" +msgstr "Chine (Pékin)" + +#: settings/defaults.py:687 +msgid "US East (B)" +msgstr "Est des États-Unis (B)" + +#: settings/defaults.py:688 +msgid "US East (C)" +msgstr "Est des États-Unis (C)" + +#: settings/defaults.py:689 +msgid "US East (D)" +msgstr "Est des États-Unis (D)" + +#: settings/defaults.py:690 +msgid "US Central (A)" +msgstr "Centre des États-Unis (A)" + +#: settings/defaults.py:691 +msgid "US Central (B)" +msgstr "Centre des États-Unis (B)" + +#: settings/defaults.py:692 +msgid "US Central (C)" +msgstr "Centre des États-Unis (C)" + +#: settings/defaults.py:693 +msgid "US Central (F)" +msgstr "Centre des États-Unis (F)" + +#: settings/defaults.py:694 +msgid "Europe West (B)" +msgstr "Europe de l'Ouest (B)" + +#: settings/defaults.py:695 +msgid "Europe West (C)" +msgstr "Europe de l'Ouest (C)" + +#: settings/defaults.py:696 +msgid "Europe West (D)" +msgstr "Europe de l'Ouest (D)" + +#: settings/defaults.py:697 +msgid "Asia East (A)" +msgstr "Asie de l'Est (A)" + +#: settings/defaults.py:698 +msgid "Asia East (B)" +msgstr "Asie de l'Est (B)" + +#: settings/defaults.py:699 +msgid "Asia East (C)" +msgstr "Asie de l'Est (C)" + +#: settings/defaults.py:723 +msgid "US Central" +msgstr "Centre des États-Unis" + +#: settings/defaults.py:724 +msgid "US East" +msgstr "Est des États-Unis" + +#: settings/defaults.py:725 +msgid "US East 2" +msgstr "Est des États-Unis 2" + +#: settings/defaults.py:726 +msgid "US North Central" +msgstr "Centre-Nord des États-Unis" + +#: settings/defaults.py:727 +msgid "US South Central" +msgstr "Centre-Sud des États-Unis" + +#: settings/defaults.py:728 +msgid "US West" +msgstr "Ouest des États-Unis" + +#: settings/defaults.py:729 +msgid "Europe North" +msgstr "Europe du Nord" + +#: settings/defaults.py:730 +msgid "Europe West" +msgstr "Europe de l'Ouest" + +#: settings/defaults.py:731 +msgid "Asia Pacific East" +msgstr "Asie-Pacifique Est" + +#: settings/defaults.py:732 +msgid "Asia Pacific Southeast" +msgstr "Asie-Pacifique Sud-Est" + +#: settings/defaults.py:733 +msgid "Japan East" +msgstr "Est du Japon" + +#: settings/defaults.py:734 +msgid "Japan West" +msgstr "Ouest du Japon" + +#: settings/defaults.py:735 +msgid "Brazil South" +msgstr "Sud du Brésil" + +#: sso/apps.py:9 +msgid "Single Sign-On" +msgstr "Single Sign-On" + +#: sso/conf.py:27 +msgid "" +"Mapping to organization admins/users from social auth accounts. This setting\n" +"controls which users are placed into which Tower organizations based on\n" +"their username and email address. Dictionary keys are organization names.\n" +"organizations will be created if not present if the license allows for\n" +"multiple organizations, otherwise the single default organization is used\n" +"regardless of the key. Values are dictionaries defining the options for\n" +"each organization's membership. For each organization it is possible to\n" +"specify which users are automatically users of the organization and also\n" +"which users can administer the organization. \n" +"\n" +"- admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated.\n" +" If True, all users using social auth will automatically be added as admins\n" +" of the organization.\n" +" If False, no social auth users will be automatically added as admins of\n" +" the organization.\n" +" If a string or list of strings, specifies the usernames and emails for\n" +" users who will be added to the organization. Strings in the format\n" +" \"//\" will be interpreted as JavaScript regular " +"expressions and\n" +" may also be used instead of string literals; only \"i\" and \"m\" are " +"supported\n" +" for flags.\n" +"- remove_admins: True/False. Defaults to True.\n" +" If True, a user who does not match will be removed from the organization's\n" +" administrative list.\n" +"- users: None, True/False, string or list of strings. Same rules apply as " +"for\n" +" admins.\n" +"- remove_users: True/False. Defaults to True. Same rules as apply for \n" +" remove_admins." +msgstr "" +"Mappage avec des administrateurs/utilisateurs d'organisation appartenant à " +"des comptes d'authentification sociale. Ce paramÚtre\n" +"contrÃŽle les utilisateurs qui sont placés dans les organisations Tower en " +"fonction de\n" +"leur nom d'utilisateur et adresse électronique. Les clés de dictionnaire " +"sont des noms d'organisation.\n" +"Des organisations seront créées si elles ne sont pas présentes dans le cas " +"où la licence autoriserait\n" +"plusieurs organisations, sinon l'organisation par défaut est utilisée\n" +"indépendamment de la clé. Les valeurs sont des dictionnaires définissant les " +"options\n" +"d'appartenance de chaque organisation. Pour chaque organisation, il est " +"possible de\n" +"préciser les utilisateurs qui sont automatiquement utilisateurs de " +"l'organisation et\n" +"ceux qui peuvent administrer l'organisation. \n" +"\n" +"- admins : None, True/False, chaîne ou liste de chaînes.\n" +" Si défini sur None, les administrateurs de l'organisation ne sont pas mis à " +"jour.\n" +" Si défini sur True, tous les utilisateurs se servant de l'authentification " +"sociale sont automatiquement ajoutés en tant qu'administrateurs\n" +" de l'organisation.\n" +" Si défini sur False, aucun utilisateur d'authentification sociale n'est " +"automatiquement ajouté en tant qu'administrateur de\n" +" l'organisation.\n" +" Si une chaîne ou une liste de chaînes est entrée, elle spécifie les noms " +"d'utilisateur et les adresses électroniques des\n" +" utilisateurs qui seront ajoutés à l'organisation. Les chaînes au format\n" +" \"//\" sont interprétées comme des expressions JavaScript " +"normales et\n" +" peuvent également être utilisées à la place de littéraux de chaîne ; seuls " +"\"i\" et \"m\" sont pris en charge\n" +" pour les marqueurs.\n" +"- remove_admins : True/False. Par défaut défini sur True.\n" +" Si défini sur True, l'utilisateur qui ne correspond pas est supprimé de la " +"liste administrative\n" +" de l'organisation.\n" +"- users : None, True/False, chaîne ou liste de chaînes. Les mêmes rÚgles " +"s'appliquent que pour\n" +" admins.\n" +"- remove_users : True/False. Par défaut défini sur True. Les mêmes rÚgles " +"s'appliquent que pour \n" +" remove_admins." + +#: sso/conf.py:76 +msgid "" +"Mapping of team members (users) from social auth accounts. Keys are team\n" +"names (will be created if not present). Values are dictionaries of options\n" +"for each team's membership, where each can contain the following parameters:\n" +"\n" +"- organization: string. The name of the organization to which the team\n" +" belongs. The team will be created if the combination of organization and\n" +" team name does not exist. The organization will first be created if it\n" +" does not exist. If the license does not allow for multiple organizations,\n" +" the team will always be assigned to the single default organization.\n" +"- users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all social auth users will be added/removed as team\n" +" members.\n" +" If a string or list of strings, specifies expressions used to match users.\n" +" User will be added as a team member if the username or email matches.\n" +" Strings in the format \"//\" will be interpreted as " +"JavaScript\n" +" regular expressions and may also be used instead of string literals; only " +"\"i\"\n" +" and \"m\" are supported for flags.\n" +"- remove: True/False. Defaults to True. If True, a user who does not match\n" +" the rules above will be removed from the team." +msgstr "" +"Mappage des membres d'équipe (utilisateurs) de compte d'authentification " +"sociale. Les clés sont des \n" +"noms d'équipe (seront créés s'ils ne sont pas présents). Les valeurs sont " +"des dictionnaires d'options\n" +"d'appartenance à chaque équipe, où chacune peut contenir les paramÚtres " +"suivants :\n" +"\n" +"-organization : chaîne. Nom de l'organisation à laquelle l'équipe\n" +" appartient. Une équipe est créée si la combinaison nom de l'organisation/" +"nom de \n" +"l'équipe n'existe pas. L'organisation sera d'abord créée \n" +"si elle n'existe pas. Si la licence n'autorise pas plusieurs organisations, \n" +"l'équipe est toujours attribuée à l'organisation par défaut. \n" +"- users : None, True/False, chaîne ou liste de chaînes.\n" +" Si défini sur None, les membres de l'équipe ne sont pas mis à jour.\n" +" Si défini sur True/False, tous les utilisateurs d'authentification sociale " +"sont ajoutés/supprimés en tant que membres\n" +" d'équipe.\n" +" Si une chaîne ou une liste de chaînes est entrée, elle spécifie les " +"expressions utilisées pour comparer les utilisateurs. \n" +"L'utilisateur est ajouté en tant que membre d'équipe si son nom " +"d'utilisateur ou son adresse électronique correspond.\n" +" Les chaînes au format \"//\" sont interprétées comme des " +"expressions JavaScript\n" +" normales et peuvent également être utilisées à la place de littéraux de " +"chaîne ; Seuls \"i\"\n" +" et \"m\" sont pris en charge pour les marqueurs.\n" +"- remove : True/False. Par défaut défini sur True. Si défini sur True, tout " +"utilisateur qui ne correspond\n" +" pas aux rÚgles ci-dessus est supprimé de l'équipe." + +#: sso/conf.py:119 +msgid "Authentication Backends" +msgstr "Backends d'authentification" + +#: sso/conf.py:120 +msgid "" +"List of authentication backends that are enabled based on license features " +"and other authentication settings." +msgstr "" +"Liste des backends d'authentification activés en fonction des " +"caractéristiques des licences et d'autres paramÚtres d'authentification." + +#: sso/conf.py:133 +msgid "Social Auth Organization Map" +msgstr "Authentification sociale - Mappage des organisations" + +#: sso/conf.py:145 +msgid "Social Auth Team Map" +msgstr "Authentification sociale - Mappage des équipes" + +#: sso/conf.py:157 +msgid "Social Auth User Fields" +msgstr "Authentification sociale - Champs d'utilisateurs" + +#: sso/conf.py:158 +msgid "" +"When set to an empty list `[]`, this setting prevents new user accounts from " +"being created. Only users who have previously logged in using social auth or " +"have a user account with a matching email address will be able to login." +msgstr "" +"Lorsqu'il est défini sur une liste vide `[]`, ce paramÚtre empêche la " +"création de nouveaux comptes d'utilisateur. Seuls les utilisateurs ayant " +"déjà ouvert une session au moyen de l'authentification sociale ou disposant " +"d'un compte utilisateur avec une adresse électronique correspondante " +"pourront se connecter." + +#: sso/conf.py:176 +msgid "LDAP Server URI" +msgstr "URI du serveur LDAP" + +#: sso/conf.py:177 +msgid "" +"URI to connect to LDAP server, such as \"ldap://ldap.example.com:389\" (non-" +"SSL) or \"ldaps://ldap.example.com:636\" (SSL). Multiple LDAP servers may be " +"specified by separating with spaces or commas. LDAP authentication is " +"disabled if this parameter is empty." +msgstr "" +"URI de connexion au serveur LDAP, tel que \"ldap://ldap.exemple.com:389\" " +"(non SSL) ou \"ldaps://ldap.exemple.com:636\" (SSL). Plusieurs serveurs LDAP " +"peuvent être définis en les séparant par des espaces ou des virgules. " +"L'authentification LDAP est désactivée si ce paramÚtre est vide." + +#: sso/conf.py:181 +#: sso/conf.py:199 +#: sso/conf.py:211 +#: sso/conf.py:223 +#: sso/conf.py:239 +#: sso/conf.py:258 +#: sso/conf.py:279 +#: sso/conf.py:295 +#: sso/conf.py:314 +#: sso/conf.py:331 +#: sso/conf.py:347 +#: sso/conf.py:362 +#: sso/conf.py:379 +#: sso/conf.py:417 +#: sso/conf.py:458 +msgid "LDAP" +msgstr "LDAP" + +#: sso/conf.py:193 +msgid "LDAP Bind DN" +msgstr "ND de la liaison LDAP" + +#: sso/conf.py:194 +msgid "" +"DN (Distinguished Name) of user to bind for all search queries. Normally in " +"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " +"specified as \"DOMAIN\\username\" for Active Directory. This is the system " +"user account we will use to login to query LDAP for other user information." +msgstr "" +"ND (nom distinctif) de l'utilisateur à lier pour toutes les requêtes de " +"recherche. Normalement, au format \"CN = Certains utilisateurs, OU = " +"Utilisateurs, DC = exemple, DC = com\" mais peut aussi être entré au format " +"\"DOMAINE\\nom d'utilisateur\" pour Active Directory. Il s'agit du compte " +"utilisateur systÚme que nous utiliserons pour nous connecter afin " +"d'interroger LDAP et obtenir d'autres informations utilisateur." + +#: sso/conf.py:209 +msgid "LDAP Bind Password" +msgstr "Mot de passe de la liaison LDAP" + +#: sso/conf.py:210 +msgid "Password used to bind LDAP user account." +msgstr "Mot de passe utilisé pour lier le compte utilisateur LDAP." + +#: sso/conf.py:221 +msgid "LDAP Start TLS" +msgstr "LDAP - Lancer TLS" + +#: sso/conf.py:222 +msgid "Whether to enable TLS when the LDAP connection is not using SSL." +msgstr "Pour activer ou non TLS lorsque la connexion LDAP n'utilise pas SSL." + +#: sso/conf.py:232 +msgid "LDAP Connection Options" +msgstr "Options de connexion à LDAP" + +#: sso/conf.py:233 +msgid "" +"Additional options to set for the LDAP connection. LDAP referrals are " +"disabled by default (to prevent certain LDAP queries from hanging with AD). " +"Option names should be strings (e.g. \"OPT_REFERRALS\"). Refer to https://" +"www.python-ldap.org/doc/html/ldap.html#options for possible options and " +"values that can be set." +msgstr "" +"Options supplémentaires à définir pour la connexion LDAP. Les références " +"LDAP sont désactivées par défaut (pour empêcher certaines requêtes LDAP de " +"se bloquer avec AD). Les noms d'options doivent être des chaînes (par " +"exemple \"OPT_REFERRALS\"). Reportez-vous à https://www.python-ldap.org/doc/" +"html/ldap.html#options afin de connaître les options possibles et les " +"valeurs que vous pouvez définir." + +#: sso/conf.py:251 +msgid "LDAP User Search" +msgstr "Recherche d'utilisateurs LDAP" + +#: sso/conf.py:252 +msgid "" +"LDAP search query to find users. Any user that matches the given pattern " +"will be able to login to Tower. The user should also be mapped into an " +"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " +"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"possible. See python-ldap documentation as linked at the top of this section." +"" +msgstr "" +"Requête de recherche LDAP servant à retrouver des utilisateurs. Tout " +"utilisateur qui correspond au modÚle donné pourra se connecter à Tower. " +"L'utilisateur doit également être mappé dans une organisation Tower (tel que " +"défini dans le paramÚtre AUTH_LDAP_ORGANIZATION_MAP). Si plusieurs requêtes " +"de recherche doivent être prises en charge, l'utilisation de \"LDAPUnion\" " +"est possible. Se reporter à la documentation sur python-ldap en suivant le " +"lien indiqué en haut de cette section." + +#: sso/conf.py:273 +msgid "LDAP User DN Template" +msgstr "ModÚle de ND pour les utilisateurs LDAP" + +#: sso/conf.py:274 +msgid "" +"Alternative to user search, if user DNs are all of the same format. This " +"approach will be more efficient for user lookups than searching if it is " +"usable in your organizational environment. If this setting has a value it " +"will be used instead of AUTH_LDAP_USER_SEARCH." +msgstr "" +"Autre méthode de recherche d'utilisateurs, si les ND d'utilisateur se " +"présentent tous au même format. Cette approche est plus efficace qu'une " +"recherche d'utilisateurs si vous pouvez l'utiliser dans votre environnement " +"organisationnel. Si ce paramÚtre est défini, sa valeur sera utilisée à la " +"place de AUTH_LDAP_USER_SEARCH." + +#: sso/conf.py:289 +msgid "LDAP User Attribute Map" +msgstr "Mappe des attributs d'utilisateurs LDAP" + +#: sso/conf.py:290 +msgid "" +"Mapping of LDAP user schema to Tower API user attributes (key is user " +"attribute name, value is LDAP attribute name). The default setting is valid " +"for ActiveDirectory but users with other LDAP configurations may need to " +"change the values (not the keys) of the dictionary/hash-table." +msgstr "" +"Mappage du schéma utilisateur LDAP avec les attributs utilisateur d'API " +"Tower (la clé est le nom de l'attribut utilisateur, la valeur est le nom de " +"l'attribut LDAP). Le paramÚtre par défaut est valide pour ActiveDirectory, " +"mais les utilisateurs ayant d'autres configurations LDAP peuvent être amenés " +"à modifier les valeurs (et non les clés) du dictionnaire/de la table de " +"hachage." + +#: sso/conf.py:309 +msgid "LDAP Group Search" +msgstr "Recherche de groupes LDAP" + +#: sso/conf.py:310 +msgid "" +"Users in Tower are mapped to organizations based on their membership in LDAP " +"groups. This setting defines the LDAP search query to find groups. Note that " +"this, unlike the user search above, does not support LDAPSearchUnion." +msgstr "" +"Les utilisateurs de Tower sont mappés à des organisations en fonction de " +"leur appartenance à des groupes LDAP. Ce paramÚtre définit la requête de " +"recherche LDAP servant à rechercher des groupes. Notez que cette méthode, " +"contrairement à la recherche d'utilisateurs LDAP, ne prend pas en charge " +"LDAPSearchUnion." + +#: sso/conf.py:327 +msgid "LDAP Group Type" +msgstr "Type de groupe LDAP" + +#: sso/conf.py:328 +msgid "" +"The group type may need to be changed based on the type of the LDAP server. " +"Values are listed at: http://pythonhosted.org/django-auth-ldap/groups." +"html#types-of-groups" +msgstr "" +"Il convient parfois de modifier le type de groupe en fonction du type de " +"serveur LDAP. Les valeurs sont répertoriées à l'adresse suivante : http://" +"pythonhosted.org/django-auth-ldap/groups.html#types-of-groups" + +#: sso/conf.py:342 +msgid "LDAP Require Group" +msgstr "Groupe LDAP obligatoire" + +#: sso/conf.py:343 +msgid "" +"Group DN required to login. If specified, user must be a member of this " +"group to login via LDAP. If not set, everyone in LDAP that matches the user " +"search will be able to login via Tower. Only one require group is supported." +msgstr "" +"Le NDD du groupe d'utilisateurs qui doit se connecter. S'il est spécifié, " +"l'utilisateur doit être membre de ce groupe pour pouvoir se connecter via " +"LDAP. S'il n'est pas défini, tout utilisateur LDAP qui correspond à la " +"recherche d'utilisateurs pourra se connecter via Tower. Un seul groupe est " +"pris en charge." + +#: sso/conf.py:358 +msgid "LDAP Deny Group" +msgstr "Groupe LDAP refusé" + +#: sso/conf.py:359 +msgid "" +"Group DN denied from login. If specified, user will not be allowed to login " +"if a member of this group. Only one deny group is supported." +msgstr "" +"NDD du groupe dont la connexion est refusée. S'il est spécifié, " +"l'utilisateur n'est pas autorisé à se connecter s'il est membre de ce groupe." +" Un seul groupe refusé est pris en charge." + +#: sso/conf.py:372 +msgid "LDAP User Flags By Group" +msgstr "Marqueurs d'utilisateur LDAP par groupe" + +#: sso/conf.py:373 +msgid "" +"User profile flags updated from group membership (key is user attribute " +"name, value is group DN). These are boolean fields that are matched based " +"on whether the user is a member of the given group. So far only " +"is_superuser is settable via this method. This flag is set both true and " +"false at login time based on current LDAP settings." +msgstr "" +"Marqueurs de profil utilisateur mis à jour selon l'appartenance au groupe " +"(la clé est le nom de l'attribut utilisateur, la valeur est le NDD du " +"groupe). Il s'agit de champs booléens qui sont associés selon que " +"l'utilisateur est ou non membre du groupe donné. Jusqu'à présent, seul " +"is_superuser peut être défini avec cette méthode. Ce marqueur est défini à " +"la fois sur True et False au moment de la connexion, en fonction des " +"paramÚtres LDAP actifs." + +#: sso/conf.py:391 +msgid "LDAP Organization Map" +msgstr "Mappe d'organisations LDAP" + +#: sso/conf.py:392 +msgid "" +"Mapping between organization admins/users and LDAP groups. This controls " +"what users are placed into what Tower organizations relative to their LDAP " +"group memberships. Keys are organization names. Organizations will be " +"created if not present. Values are dictionaries defining the options for " +"each organization's membership. For each organization it is possible to " +"specify what groups are automatically users of the organization and also " +"what groups can administer the organization.\n" +"\n" +" - admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated based on LDAP values.\n" +" If True, all users in LDAP will automatically be added as admins of the " +"organization.\n" +" If False, no LDAP users will be automatically added as admins of the " +"organization.\n" +" If a string or list of strings, specifies the group DN(s) that will be " +"added of the organization if they match any of the specified groups.\n" +" - remove_admins: True/False. Defaults to True.\n" +" If True, a user who is not an member of the given groups will be removed " +"from the organization's administrative list.\n" +" - users: None, True/False, string or list of strings. Same rules apply as " +"for admins.\n" +" - remove_users: True/False. Defaults to True. Same rules apply as for " +"remove_admins." +msgstr "" +"Mappage entre les administrateurs/utilisateurs de l'organisation et les " +"groupes LDAP. Ce paramÚtre détermine les utilisateurs qui sont placés dans " +"les organisations Tower par rapport à leurs appartenances à un groupe LDAP. " +"Les clés sont les noms d'organisation. Les organisations seront créées si " +"elles ne sont pas présentes. Les valeurs sont des dictionnaires définissant " +"les options d'appartenance à chaque organisation. Pour chaque organisation, " +"il est possible de spécifier les groupes qui sont automatiquement des " +"utilisateurs de l'organisation et ceux qui peuvent administrer " +"l'organisation.\n" +"\n" +" - admins : None, True/False, chaîne ou liste de chaînes.\n" +"Si défini sur None, les administrateurs de l'organisation ne sont pas mis à " +"jour en fonction des valeurs LDAP.\n" +" Si défini sur True, tous les utilisateurs LDAP sont automatiquement ajoutés " +"en tant qu'administrateurs de l'organisation.\n" +" Si défini sur False, aucun utilisateur LDAP n'est automatiquement ajouté en " +"tant qu'administrateur de l'organisation.\n" +" Si une chaîne ou une liste de chaînes est entrée, elle spécifie le ou les " +"NDD de groupe qui seront ajoutés à l'organisation s'ils correspondent à l'un " +"des groupes spécifiés.\n" +" - remove_admins : True/False. Par défaut défini sur True.\n" +" Si défini sur True, tout utilisateur qui n'est pas membre des groupes " +"donnés est supprimé de la liste administrative de l'organisation.\n" +" - users : None, True/False, chaîne ou liste de chaînes. Les mêmes rÚgles " +"s'appliquent que pour admins.\n" +" - remove_users : True/False. Par défaut défini sur True. Les mêmes rÚgles " +"s'appliquent que pour remove_admins." + +#: sso/conf.py:440 +msgid "LDAP Team Map" +msgstr "Mappe d'équipes LDAP" + +#: sso/conf.py:441 +msgid "" +"Mapping between team members (users) and LDAP groups. Keys are team names " +"(will be created if not present). Values are dictionaries of options for " +"each team's membership, where each can contain the following parameters:\n" +"\n" +" - organization: string. The name of the organization to which the team " +"belongs. The team will be created if the combination of organization and " +"team name does not exist. The organization will first be created if it does " +"not exist.\n" +" - users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all LDAP users will be added/removed as team members.\n" +" If a string or list of strings, specifies the group DN(s). User will be " +"added as a team member if the user is a member of ANY of these groups.\n" +"- remove: True/False. Defaults to True. If True, a user who is not a member " +"of the given groups will be removed from the team." +msgstr "" +"Mappage entre les membres d'équipe (utilisateurs) et les groupes LDAP. Les " +"clés sont des noms d'équipe (seront créés s'ils ne sont pas présents). Les " +"valeurs sont des dictionnaires d'options d'appartenance à chaque équipe, où " +"chacune peut contenir les paramÚtres suivants :\n" +"\n" +" - organization : chaîne. Nom de l'organisation à laquelle l'équipe " +"appartient. Une équipe est créée si la combinaison nom de l'organisation/nom " +"de l'équipe n'existe pas. L'organisation sera d'abord créée si elle n'existe " +"pas.\n" +" - users : None, True/False, chaîne ou liste de chaînes.\n" +" Si défini sur None, les membres de l'équipe ne sont pas mis à jour.\n" +" Si défini sur True/False, tous les utilisateurs LDAP seront ajoutés/" +"supprimés en tant que membres d'équipe.\n" +" Si une chaîne ou une liste de chaînes est entrée, elle spécifie les NDD des " +"groupes. L'utilisateur est ajouté en tant que membre d'équipe s'il est " +"membre de l'UN de ces groupes.\n" +"- remove : True/False. Par défaut défini sur True. Si défini sur True, tout " +"utilisateur qui n'est pas membre des groupes donnés est supprimé de l'équipe." +"" + +#: sso/conf.py:484 +msgid "RADIUS Server" +msgstr "Serveur RADIUS" + +#: sso/conf.py:485 +msgid "" +"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this " +"setting is empty." +msgstr "" +"Nom d'hÃŽte/IP du serveur RADIUS. L'authentification RADIUS est désactivée si " +"ce paramÚtre est vide." + +#: sso/conf.py:487 +#: sso/conf.py:501 +#: sso/conf.py:513 +msgid "RADIUS" +msgstr "RADIUS" + +#: sso/conf.py:499 +msgid "RADIUS Port" +msgstr "Port RADIUS" + +#: sso/conf.py:500 +msgid "Port of RADIUS server." +msgstr "Port du serveur RADIUS." + +#: sso/conf.py:511 +msgid "RADIUS Secret" +msgstr "Secret RADIUS" + +#: sso/conf.py:512 +msgid "Shared secret for authenticating to RADIUS server." +msgstr "Secret partagé pour l'authentification sur le serveur RADIUS." + +#: sso/conf.py:528 +msgid "Google OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour Google" + +#: sso/conf.py:529 +msgid "" +"Create a project at https://console.developers.google.com/ to obtain an " +"OAuth2 key and secret for a web application. Ensure that the Google+ API is " +"enabled. Provide this URL as the callback URL for your application." +msgstr "" +"Créez un projet sur https://console.developers.google.com/ afin d'obtenir " +"une clé OAuth2 et un secret pour une application Web. Assurez-vous que l'API " +"Google+ est activée. Entrez cette URL comme URL de rappel de votre " +"application." + +#: sso/conf.py:533 +#: sso/conf.py:544 +#: sso/conf.py:555 +#: sso/conf.py:568 +#: sso/conf.py:582 +#: sso/conf.py:594 +#: sso/conf.py:606 +msgid "Google OAuth2" +msgstr "OAuth2 pour Google" + +#: sso/conf.py:542 +msgid "Google OAuth2 Key" +msgstr "Clé OAuth2 pour Google" + +#: sso/conf.py:543 +msgid "" +"The OAuth2 key from your web application at https://console.developers." +"google.com/." +msgstr "" +"Clé OAuth2 de votre application Web sur https://console.developers.google." +"com/." + +#: sso/conf.py:553 +msgid "Google OAuth2 Secret" +msgstr "Secret OAuth2 pour Google" + +#: sso/conf.py:554 +msgid "" +"The OAuth2 secret from your web application at https://console.developers." +"google.com/." +msgstr "" +"Secret OAuth2 de votre application Web sur https://console.developers.google." +"com/." + +#: sso/conf.py:565 +msgid "Google OAuth2 Whitelisted Domains" +msgstr "Domaines sur liste blanche OAuth2 pour Google" + +#: sso/conf.py:566 +msgid "" +"Update this setting to restrict the domains who are allowed to login using " +"Google OAuth2." +msgstr "" +"Mettez à jour ce paramÚtre pour limiter les domaines qui sont autorisés à se " +"connecter à l'aide de l'authentification OAuth2 avec un compte Google." + +#: sso/conf.py:577 +msgid "Google OAuth2 Extra Arguments" +msgstr "Arguments OAuth2 supplémentaires pour Google" + +#: sso/conf.py:578 +msgid "" +"Extra arguments for Google OAuth2 login. When only allowing a single domain " +"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " +"display any other accounts even if the user is logged in with multiple " +"Google accounts." +msgstr "" +"Arguments supplémentaires pour l'authentification OAuth2 avec un compte " +"Google. Lorsque vous autorisez un seul domaine à s'authentifier, définissez " +"ce paramÚtre sur {{\"hd\": \"votredomaine.com\"}. Google n'affichera aucun " +"autre compte même si l'utilisateur est connecté avec plusieurs comptes " +"Google." + +#: sso/conf.py:592 +msgid "Google OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour Google" + +#: sso/conf.py:604 +msgid "Google OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour Google" + +#: sso/conf.py:620 +msgid "GitHub OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour GitHub" + +#: sso/conf.py:621 +msgid "" +"Create a developer application at https://github.com/settings/developers to " +"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " +"URL as the callback URL for your application." +msgstr "" +"Créez une application de développeur sur https://github.com/settings/" +"developers pour obtenir une clé OAuth2 (ID client) et un secret (secret " +"client). Entrez cette URL comme URL de rappel de votre application." + +#: sso/conf.py:625 +#: sso/conf.py:636 +#: sso/conf.py:646 +#: sso/conf.py:658 +#: sso/conf.py:670 +msgid "GitHub OAuth2" +msgstr "OAuth2 pour GitHub" + +#: sso/conf.py:634 +msgid "GitHub OAuth2 Key" +msgstr "Clé OAuth2 pour GitHub" + +#: sso/conf.py:635 +msgid "The OAuth2 key (Client ID) from your GitHub developer application." +msgstr "Clé OAuth2 (ID client) de votre application de développeur GitHub." + +#: sso/conf.py:644 +msgid "GitHub OAuth2 Secret" +msgstr "Secret OAuth2 pour GitHub" + +#: sso/conf.py:645 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub developer application." +msgstr "" +"Secret OAuth2 (secret client) de votre application de développeur GitHub." + +#: sso/conf.py:656 +msgid "GitHub OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour GitHub" + +#: sso/conf.py:668 +msgid "GitHub OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour GitHub" + +#: sso/conf.py:684 +msgid "GitHub Organization OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour les organisations GitHub" + +#: sso/conf.py:685 +#: sso/conf.py:760 +msgid "" +"Create an organization-owned application at https://github.com/organizations/" +"/settings/applications and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" +"Créez une application appartenant à une organisation sur https://github.com/" +"organizations//settings/applications et obtenez une clé OAuth2 (ID " +"client) et un secret (secret client). Entrez cette URL comme URL de rappel " +"de votre application." + +#: sso/conf.py:689 +#: sso/conf.py:700 +#: sso/conf.py:710 +#: sso/conf.py:722 +#: sso/conf.py:733 +#: sso/conf.py:745 +msgid "GitHub Organization OAuth2" +msgstr "OAuth2 pour les organisations GitHub" + +#: sso/conf.py:698 +msgid "GitHub Organization OAuth2 Key" +msgstr "Clé OAuth2 pour les organisations GitHub" + +#: sso/conf.py:699 +#: sso/conf.py:774 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "Clé OAuth2 (ID client) de votre application d'organisation GitHub." + +#: sso/conf.py:708 +msgid "GitHub Organization OAuth2 Secret" +msgstr "Secret OAuth2 pour les organisations GitHub" + +#: sso/conf.py:709 +#: sso/conf.py:784 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" +"Secret OAuth2 (secret client) de votre application d'organisation GitHub." + +#: sso/conf.py:719 +msgid "GitHub Organization Name" +msgstr "Nom de l'organisation GitHub" + +#: sso/conf.py:720 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" +"Nom de votre organisation GitHub, tel qu'utilisé dans l'URL de votre " +"organisation : https://github.com//." + +#: sso/conf.py:731 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour les organisations GitHub" + +#: sso/conf.py:743 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour les organisations GitHub" + +#: sso/conf.py:759 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour les équipes GitHub" + +#: sso/conf.py:764 +#: sso/conf.py:775 +#: sso/conf.py:785 +#: sso/conf.py:797 +#: sso/conf.py:808 +#: sso/conf.py:820 +msgid "GitHub Team OAuth2" +msgstr "OAuth2 pour les équipes GitHub" + +#: sso/conf.py:773 +msgid "GitHub Team OAuth2 Key" +msgstr "Clé OAuth2 pour les équipes GitHub" + +#: sso/conf.py:783 +msgid "GitHub Team OAuth2 Secret" +msgstr "Secret OAuth2 pour les équipes GitHub" + +#: sso/conf.py:794 +msgid "GitHub Team ID" +msgstr "ID d'équipe GitHub" + +#: sso/conf.py:795 +msgid "" +"Find the numeric team ID using the Github API: http://fabian-kostadinov." +"github.io/2015/01/16/how-to-find-a-github-team-id/." +msgstr "" +"Recherchez votre ID d'équipe numérique à l'aide de l'API Github : http://" +"fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/." + +#: sso/conf.py:806 +msgid "GitHub Team OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour les équipes GitHub" + +#: sso/conf.py:818 +msgid "GitHub Team OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour les équipes GitHub" + +#: sso/conf.py:834 +msgid "Azure AD OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour Azure AD" + +#: sso/conf.py:835 +msgid "" +"Register an Azure AD application as described by https://msdn.microsoft.com/" +"en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" +"Enregistrez une application AD Azure selon la procédure décrite sur https://" +"msdn.microsoft.com/en-us/library/azure/dn132599.aspx et obtenez une clé " +"OAuth2 (ID client) et un secret (secret client). Entrez cette URL comme URL " +"de rappel de votre application." + +#: sso/conf.py:839 +#: sso/conf.py:850 +#: sso/conf.py:860 +#: sso/conf.py:872 +#: sso/conf.py:884 +msgid "Azure AD OAuth2" +msgstr "OAuth2 pour Azure AD" + +#: sso/conf.py:848 +msgid "Azure AD OAuth2 Key" +msgstr "Clé OAuth2 pour Azure AD" + +#: sso/conf.py:849 +msgid "The OAuth2 key (Client ID) from your Azure AD application." +msgstr "Clé OAuth2 (ID client) de votre application Azure AD." + +#: sso/conf.py:858 +msgid "Azure AD OAuth2 Secret" +msgstr "Secret OAuth2 pour Azure AD" + +#: sso/conf.py:859 +msgid "The OAuth2 secret (Client Secret) from your Azure AD application." +msgstr "Secret OAuth2 (secret client) de votre application Azure AD." + +#: sso/conf.py:870 +msgid "Azure AD OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour Azure AD" + +#: sso/conf.py:882 +msgid "Azure AD OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour Azure AD" + +#: sso/conf.py:903 +msgid "SAML Service Provider Callback URL" +msgstr "URL de rappel du fournisseur de services SAML" + +#: sso/conf.py:904 +msgid "" +"Register Tower as a service provider (SP) with each identity provider (IdP) " +"you have configured. Provide your SP Entity ID and this callback URL for " +"your application." +msgstr "" +"Enregistrez Tower en tant que fournisseur de services (SP) auprÚs de chaque " +"fournisseur d'identité (IdP) que vous avez configuré. Entrez votre ID " +"d'entité SP et cette URL de rappel pour votre application." + +#: sso/conf.py:907 +#: sso/conf.py:921 +#: sso/conf.py:934 +#: sso/conf.py:948 +#: sso/conf.py:962 +#: sso/conf.py:980 +#: sso/conf.py:1002 +#: sso/conf.py:1021 +#: sso/conf.py:1041 +#: sso/conf.py:1075 +#: sso/conf.py:1088 +msgid "SAML" +msgstr "SAML" + +#: sso/conf.py:918 +msgid "SAML Service Provider Metadata URL" +msgstr "URL de métadonnées du fournisseur de services SAML" + +#: sso/conf.py:919 +msgid "" +"If your identity provider (IdP) allows uploading an XML metadata file, you " +"can download one from this URL." +msgstr "" +"Si votre fournisseur d'identité (IdP) permet de télécharger un fichier de " +"métadonnées XML, vous pouvez le faire à partir de cette URL." + +#: sso/conf.py:931 +msgid "SAML Service Provider Entity ID" +msgstr "ID d'entité du fournisseur de services SAML" + +#: sso/conf.py:932 +msgid "" +"The application-defined unique identifier used as the audience of the SAML " +"service provider (SP) configuration." +msgstr "" +"Identifiant unique défini par l'application utilisé comme audience dans la " +"configuration du fournisseur de services (SP) SAML." + +#: sso/conf.py:945 +msgid "SAML Service Provider Public Certificate" +msgstr "Certificat public du fournisseur de services SAML" + +#: sso/conf.py:946 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"certificate content here." +msgstr "" +"Créez une paire de clés pour que Tower puisse être utilisé comme fournisseur " +"de services (SP) et entrez le contenu du certificat ici." + +#: sso/conf.py:959 +msgid "SAML Service Provider Private Key" +msgstr "Clé privée du fournisseur de services SAML" + +#: sso/conf.py:960 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"private key content here." +msgstr "" +"Créez une paire de clés pour que Tower puisse être utilisé comme fournisseur " +"de services (SP) et entrez le contenu de la clé privée ici." + +#: sso/conf.py:978 +msgid "SAML Service Provider Organization Info" +msgstr "Infos organisationnelles du fournisseur de services SAML" + +#: sso/conf.py:979 +msgid "Configure this setting with information about your app." +msgstr "" +"Configurez ce paramÚtre en vous servant des informations de votre " +"application." + +#: sso/conf.py:1000 +msgid "SAML Service Provider Technical Contact" +msgstr "Contact technique du fournisseur de services SAML" + +#: sso/conf.py:1001 +#: sso/conf.py:1020 +msgid "Configure this setting with your contact information." +msgstr "Configurez ce paramÚtre en vous servant de vos coordonnées." + +#: sso/conf.py:1019 +msgid "SAML Service Provider Support Contact" +msgstr "Contact support du fournisseur de services SAML" + +#: sso/conf.py:1034 +msgid "SAML Enabled Identity Providers" +msgstr "Fournisseurs d'identité compatibles SAML" + +#: sso/conf.py:1035 +msgid "" +"Configure the Entity ID, SSO URL and certificate for each identity provider " +"(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " +"data using attribute names that differ from the default OIDs (https://github." +"com/omab/python-social-auth/blob/master/social/backends/saml.py#L16). " +"Attribute names may be overridden for each IdP." +msgstr "" +"Configurez l'ID d'entité, l'URL SSO et le certificat pour chaque fournisseur " +"d'identité (IdP) utilisé. Plusieurs IdP SAML sont pris en charge. Certains " +"IdP peuvent fournir des données utilisateur à l'aide de noms d'attributs qui " +"diffÚrent des OID par défaut (https://github.com/omab/python-social-auth/" +"blob/master/social/backends/saml.py#L16). Les noms d'attributs peuvent être " +"remplacés pour chaque IdP." + +#: sso/conf.py:1073 +msgid "SAML Organization Map" +msgstr "Mappe d'organisations SAML" + +#: sso/conf.py:1086 +msgid "SAML Team Map" +msgstr "Mappe d'équipes SAML" + +#: sso/fields.py:123 +#, python-brace-format +msgid "Invalid connection option(s): {invalid_options}." +msgstr "Option(s) de connexion non valide(s) : {invalid_options}." + +#: sso/fields.py:182 +msgid "Base" +msgstr "Base" + +#: sso/fields.py:183 +msgid "One Level" +msgstr "Un niveau" + +#: sso/fields.py:184 +msgid "Subtree" +msgstr "Sous-arborescence" + +#: sso/fields.py:202 +#, python-brace-format +msgid "Expected a list of three items but got {length} instead." +msgstr "" +"Une liste de trois éléments était attendue, mais {length} a été obtenu à la " +"place." + +#: sso/fields.py:203 +#, python-brace-format +msgid "Expected an instance of LDAPSearch but got {input_type} instead." +msgstr "" +"Une instance de LDAPSearch était attendue, mais {input_type} a été obtenu à " +"la place." + +#: sso/fields.py:239 +#, python-brace-format +msgid "" +"Expected an instance of LDAPSearch or LDAPSearchUnion but got {input_type} " +"instead." +msgstr "" +"Une instance de LDAPSearch ou de LDAPSearchUnion était attendue, mais " +"{input_type} a été obtenu à la place." + +#: sso/fields.py:266 +#, python-brace-format +msgid "Invalid user attribute(s): {invalid_attrs}." +msgstr "Attribut(s) d'utilisateur non valide(s) : {invalid_attrs}." + +#: sso/fields.py:283 +#, python-brace-format +msgid "Expected an instance of LDAPGroupType but got {input_type} instead." +msgstr "" +"Une instance de LDAPGroupType était attendue, mais {input_type} a été obtenu " +"à la place." + +#: sso/fields.py:308 +#, python-brace-format +msgid "Invalid user flag: \"{invalid_flag}\"." +msgstr "Marqueur d'utilisateur non valide : \"{invalid_flag}\"." + +#: sso/fields.py:324 +#: sso/fields.py:491 +#, python-brace-format +msgid "" +"Expected None, True, False, a string or list of strings but got {input_type} " +"instead." +msgstr "" +"Les valeurs None, True, False, une chaîne ou une liste de chaînes étaient " +"attendues, mais {input_type} a été obtenu à la place." + +#: sso/fields.py:360 +#, python-brace-format +msgid "Missing key(s): {missing_keys}." +msgstr "Clé(s) manquante(s) : {missing_keys}." + +#: sso/fields.py:361 +#, python-brace-format +msgid "Invalid key(s): {invalid_keys}." +msgstr "Clé(s) non valide(s) : {invalid_keys}." + +#: sso/fields.py:410 +#: sso/fields.py:527 +#, python-brace-format +msgid "Invalid key(s) for organization map: {invalid_keys}." +msgstr "Clé(s) non valide(s) pour la mappe d'organisations : {invalid_keys}." + +#: sso/fields.py:428 +#, python-brace-format +msgid "Missing required key for team map: {invalid_keys}." +msgstr "Clé obligatoire manquante pour la mappe d'équipes : {invalid_keys}." + +#: sso/fields.py:429 +#: sso/fields.py:546 +#, python-brace-format +msgid "Invalid key(s) for team map: {invalid_keys}." +msgstr "Clé(s) non valide(s) pour la mappe d'équipes : {invalid_keys}." + +#: sso/fields.py:545 +#, python-brace-format +msgid "Missing required key for team map: {missing_keys}." +msgstr "Clé obligatoire manquante pour la mappe d'équipes : {missing_keys}." + +#: sso/fields.py:563 +#, python-brace-format +msgid "Missing required key(s) for org info record: {missing_keys}." +msgstr "" +"Clé(s) obligatoire(s) manquante(s) pour l'enregistrement des infos organis. :" +" {missing_keys}." + +#: sso/fields.py:576 +#, python-brace-format +msgid "Invalid language code(s) for org info: {invalid_lang_codes}." +msgstr "" +"Code(s) langage non valide(s) pour les infos organis. : {invalid_lang_codes}." +"" + +#: sso/fields.py:595 +#, python-brace-format +msgid "Missing required key(s) for contact: {missing_keys}." +msgstr "Clé(s) obligatoire(s) manquante(s) pour le contact : {missing_keys}." + +#: sso/fields.py:607 +#, python-brace-format +msgid "Missing required key(s) for IdP: {missing_keys}." +msgstr "Clé(s) obligatoire(s) manquante(s) pour l'IdP : {missing_keys}." + +#: sso/pipeline.py:24 +#, python-brace-format +msgid "An account cannot be found for {0}" +msgstr "Impossible de trouver un compte pour {0}" + +#: sso/pipeline.py:30 +msgid "Your account is inactive" +msgstr "Votre compte est inactif" + +#: sso/validators.py:19 +#: sso/validators.py:44 +#, python-format +msgid "DN must include \"%%(user)s\" placeholder for username: %s" +msgstr "" +"Le NDD doit inclure l'espace réservé \"%% (user)s\" pour le nom " +"d'utilisateur : % s" + +#: sso/validators.py:26 +#, python-format +msgid "Invalid DN: %s" +msgstr "NDD non valide : %s" + +#: sso/validators.py:56 +#, python-format +msgid "Invalid filter: %s" +msgstr "Filtre incorrect : %s" + +#: templates/error.html:4 +#: ui/templates/ui/index.html:8 +msgid "Ansible Tower" +msgstr "Ansible Tower" + +#: templates/rest_framework/api.html:39 +msgid "Ansible Tower API Guide" +msgstr "Guide pour les API d'Ansible Tower" + +#: templates/rest_framework/api.html:40 +msgid "Back to Ansible Tower" +msgstr "Retour à Ansible Tower" + +#: templates/rest_framework/api.html:41 +msgid "Resize" +msgstr "Redimensionner" + +#: templates/rest_framework/base.html:78 +#: templates/rest_framework/base.html:92 +#, python-format +msgid "Make a GET request on the %(name)s resource" +msgstr "Appliquez une requête GET sur la ressource %(name)s" + +#: templates/rest_framework/base.html:80 +msgid "Specify a format for the GET request" +msgstr "Spécifiez un format pour la requête GET" + +#: templates/rest_framework/base.html:86 +#, python-format +msgid "" +"Make a GET request on the %(name)s resource with the format set to " +"`%(format)s`" +msgstr "" +"Appliquez une requête GET sur la ressource %(name)s avec un format défini " +"sur`%(format)s`" + +#: templates/rest_framework/base.html:100 +#, python-format +msgid "Make an OPTIONS request on the %(name)s resource" +msgstr "Appliquez une requête OPTIONS sur la ressource %(name)s" + +#: templates/rest_framework/base.html:106 +#, python-format +msgid "Make a DELETE request on the %(name)s resource" +msgstr "Appliquez une requête DELETE sur la ressource %(name)s" + +#: templates/rest_framework/base.html:113 +msgid "Filters" +msgstr "Filtres" + +#: templates/rest_framework/base.html:172 +#: templates/rest_framework/base.html:186 +#, python-format +msgid "Make a POST request on the %(name)s resource" +msgstr "Appliquez une requête POST sur la ressource %(name)s" + +#: templates/rest_framework/base.html:216 +#: templates/rest_framework/base.html:230 +#, python-format +msgid "Make a PUT request on the %(name)s resource" +msgstr "Appliquez une requête PUT sur la ressource %(name)s" + +#: templates/rest_framework/base.html:233 +#, python-format +msgid "Make a PATCH request on the %(name)s resource" +msgstr "Appliquez une requête PATCH sur la ressource %(name)s" + +#: ui/apps.py:9 +#: ui/conf.py:22 +#: ui/conf.py:38 +#: ui/conf.py:53 +msgid "UI" +msgstr "IU" + +#: ui/conf.py:16 +msgid "Off" +msgstr "Désactivé" + +#: ui/conf.py:17 +msgid "Anonymous" +msgstr "Anonyme" + +#: ui/conf.py:18 +msgid "Detailed" +msgstr "Détaillé" + +#: ui/conf.py:20 +msgid "Analytics Tracking State" +msgstr "État du suivi analytique" + +#: ui/conf.py:21 +msgid "Enable or Disable Analytics Tracking." +msgstr "Activez ou désactivez le suivi analytique." + +#: ui/conf.py:31 +msgid "Custom Login Info" +msgstr "Infos de connexion personnalisées" + +#: ui/conf.py:32 +msgid "" +"If needed, you can add specific information (such as a legal notice or a " +"disclaimer) to a text box in the login modal using this setting. Any content " +"added must be in plain text, as custom HTML or other markup languages are " +"not supported. If multiple paragraphs of text are needed, new lines " +"(paragraphs) must be escaped as `\\n` within the block of text." +msgstr "" +"Si nécessaire, vous pouvez ajouter des informations particuliÚres (telles " +"qu'une mention légale ou une clause de non-responsabilité) à une zone de " +"texte dans la fenêtre modale de connexion, grâce à ce paramÚtre. Tout " +"contenu ajouté doit l'être en texte brut, dans la mesure où le langage HTML " +"personnalisé et les autres langages de balisage ne sont pas pris en charge. " +"Si plusieurs paragraphes de texte sont nécessaires, les nouvelles lignes " +"(paragraphes) doivent être échappées sous la forme `\\n` dans le bloc de " +"texte." + +#: ui/conf.py:48 +msgid "Custom Logo" +msgstr "Logo personnalisé" + +#: ui/conf.py:49 +msgid "" +"To set up a custom logo, provide a file that you create. For the custom logo " +"to look its best, use a `.png` file with a transparent background. GIF, PNG " +"and JPEG formats are supported." +msgstr "" +"Pour configurer un logo personnalisé, chargez un fichier que vous avez créé. " +"Pour optimiser l'affichage du logo personnalisé, utilisez un fichier `.png` " +"avec un fond transparent. Les formats GIF, PNG et JPEG sont pris en charge." + +#: ui/fields.py:29 +msgid "" +"Invalid format for custom logo. Must be a data URL with a base64-encoded " +"GIF, PNG or JPEG image." +msgstr "" +"Format de logo personnalisé non valide. Entrez une URL de données avec une " +"image GIF, PNG ou JPEG codée en base64." + +#: ui/fields.py:30 +msgid "Invalid base64-encoded data in data URL." +msgstr "Données codées en base64 non valides dans l'URL de données" + +#: ui/templates/ui/index.html:49 +msgid "" +"Your session will expire in 60 seconds, would you like to continue?" +msgstr "" +"Votre session expirera dans 60 secondes, voulez-vous continuer ?" + +#: ui/templates/ui/index.html:64 +msgid "CANCEL" +msgstr "ANNULER" + +#: ui/templates/ui/index.html:116 +msgid "Set how many days of data should be retained." +msgstr "" +"Définissez le nombre de jours pendant lesquels les données doivent être " +"conservées." + +#: ui/templates/ui/index.html:122 +msgid "" +"Please enter an integer that is not " +"negative that is lower than 9999." +msgstr "" +"Entrez un entier non négatif et inférieur à 9999." + +#: ui/templates/ui/index.html:127 +msgid "" +"For facts collected older than the time period specified, save one fact scan " +"(snapshot) per time window (frequency). For example, facts older than 30 " +"days are purged, while one weekly fact scan is kept.\n" +"
\n" +"
CAUTION: Setting both numerical variables to \"0\" " +"will delete all facts.\n" +"
\n" +"
" +msgstr "" +"Pour les faits collectés en amont de la période spécifiée, enregistrez un " +"scan des faits (instantané) par fenêtre temporelle (fréquence). Par exemple, " +"les faits antérieurs à 30 jours sont purgés, tandis qu'un scan de faits " +"hebdomadaire est conservé.\n" +"
\n" +"
ATTENTION : le paramétrage des deux variables numériques sur \"0\" " +"supprime l'ensemble des faits.\n" +"
\n" +"
" + +#: ui/templates/ui/index.html:136 +msgid "Select a time period after which to remove old facts" +msgstr "" +"Sélectionnez un intervalle de temps aprÚs lequel les faits anciens pourront " +"être supprimés" + +#: ui/templates/ui/index.html:150 +msgid "" +"Please enter an integer " +"that is not negative " +"that is lower than 9999." +msgstr "" +"Entrez un entier non négatif et inférieur à 9999." + +#: ui/templates/ui/index.html:155 +msgid "Select a frequency for snapshot retention" +msgstr "Sélectionnez une fréquence pour la conservation des instantanés" + +#: ui/templates/ui/index.html:169 +msgid "" +"Please enter an integer that is not negative that is " +"lower than 9999." +msgstr "" +"Entrez un entier non négatif et " +"inférieur à 9999." + +#: ui/templates/ui/index.html:175 +msgid "working..." +msgstr "en cours..." + diff --git a/awx/locale/ja/LC_MESSAGES/ansible-tower-ui.po b/awx/locale/ja/LC_MESSAGES/ansible-tower-ui.po new file mode 100644 index 0000000000..31e33bf0d2 --- /dev/null +++ b/awx/locale/ja/LC_MESSAGES/ansible-tower-ui.po @@ -0,0 +1,2803 @@ +# asasaki , 2017. #zanata +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" +"MIME-Version: 1.0\n" +"PO-Revision-Date: 2017-01-10 10:27+0000\n" +"Last-Translator: asasaki \n" +"Language-Team: Japanese\n" +"Language: ja\n" +"X-Generator: Zanata 3.9.6\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#: client/src/notifications/notificationTemplates.form.js:371 +msgid "%s or %s" +msgstr "%s たたは %s" + +#: client/src/controllers/Projects.js:397 +#: client/src/controllers/Projects.js:679 +msgid "" +"%sNote:%s Mercurial does not support password authentication for SSH. Do not " +"put the username and key in the URL. If using Bitbucket and SSH, do not " +"supply your Bitbucket username." +msgstr "" +"%s泚:%s Mercurial は SSH のパスワヌド認蚌をサポヌトしたせん。ナヌザヌ名およびキヌを URL " +"に入れないでください。Bitbucket および SSH を䜿甚しおいる堎合は、Bitbucket ナヌザヌ名を入力しないでください。" + +#: client/src/controllers/Projects.js:384 +#: client/src/controllers/Projects.js:666 +msgid "" +"%sNote:%s When using SSH protocol for GitHub or Bitbucket, enter an SSH key " +"only, do not enter a username (other than git). Additionally, GitHub and " +"Bitbucket do not support password authentication when using SSH. GIT read " +"only protocol (git://) does not use username or password information." +msgstr "" +"%s泚:%s GitHub たたは Bitbucket の SSH プロトコルを䜿甚しおいる堎合、SSH キヌのみを入力し、ナヌザヌ名 (git 以倖) " +"を入力しないでください。たた、GitHub および Bitbucket は、SSH の䜿甚時のパスワヌド認蚌をサポヌトしたせん。GIT " +"の読み取り専甚プロトコル (git://) はナヌザヌ名たたはパスワヌド情報を䜿甚したせん。" + +#: client/src/forms/Credentials.js:287 +msgid "(defaults to %s)" +msgstr "(%s にデフォルト蚭定)" + +#: client/src/organizations/list/organizations-list.partial.html:15 +msgid "+ ADD" +msgstr "+ 远加" + +#: client/src/controllers/Users.js:185 +msgid "A value is required" +msgstr "倀が必芁" + +#: client/src/forms/Credentials.js:442 +#: client/src/forms/Inventories.js:153 +#: client/src/forms/JobTemplates.js:414 +#: client/src/forms/Organizations.js:75 +#: client/src/forms/Projects.js:237 +#: client/src/forms/Teams.js:86 +#: client/src/forms/Workflows.js:127 +#: client/src/inventory-scripts/inventory-scripts.list.js:45 +#: client/src/lists/Credentials.js:59 +#: client/src/lists/Inventories.js:68 +#: client/src/lists/Projects.js:67 +#: client/src/lists/Teams.js:50 +#: client/src/lists/Templates.js:62 +#: client/src/lists/Users.js:58 +#: client/src/notifications/notificationTemplates.list.js:52 +msgid "ADD" +msgstr "远加" + +#: client/src/notifications/notifications.list.js:68 +msgid "ADD NOTIFICATION TEMPLATE" +msgstr "通知テンプレヌトの远加" + +#: client/src/forms/Credentials.js:199 +msgid "API Key" +msgstr "API キヌ" + +#: client/src/notifications/notificationTemplates.form.js:248 +msgid "API Service/Integration Key" +msgstr "API サヌビス/統合キヌ" + +#: client/src/notifications/shared/type-change.service.js:52 +msgid "API Token" +msgstr "API トヌクン" + +#: client/src/setup-menu/setup-menu.partial.html:59 +msgid "About Tower" +msgstr "Tower に぀いお" + +#: client/src/forms/Credentials.js:92 +msgid "Access Key" +msgstr "アクセスキヌ" + +#: client/src/notifications/notificationTemplates.form.js:226 +msgid "Account SID" +msgstr "アカりント SID" + +#: client/src/notifications/notificationTemplates.form.js:184 +msgid "Account Token" +msgstr "アカりントトヌクン" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:20 +#: client/src/shared/list-generator/list-generator.factory.js:538 +msgid "Actions" +msgstr "アクション" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:17 +#: client/src/lists/Templates.js:40 +msgid "Activity" +msgstr "アクティビティヌ" + +#: client/src/configuration/system-form/configuration-system.controller.js:81 +msgid "Activity Stream" +msgstr "アクティビティヌストリヌム" + +#: client/src/forms/Inventories.js:104 +#: client/src/forms/Inventories.js:150 +#: client/src/forms/Organizations.js:72 +#: client/src/forms/Teams.js:83 +#: client/src/forms/Workflows.js:124 +msgid "Add" +msgstr "远加" + +#: client/src/lists/Credentials.js:17 +msgid "Add Credentials" +msgstr "認蚌情報の远加" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:12 +msgid "Add Existing Hosts" +msgstr "既存ホストの远加" + +#: client/src/lists/Inventories.js:15 +msgid "Add Inventories" +msgstr "むンベントリヌの远加" + +#: client/src/notifications/notifications.list.js:63 +msgid "Add Notification" +msgstr "通知の远加" + +#: client/src/lists/Projects.js:15 +msgid "Add Project" +msgstr "プロゞェクトの远加" + +#: client/src/forms/JobTemplates.js:459 +#: client/src/forms/Workflows.js:172 +#: client/src/shared/form-generator.js:1707 +msgid "Add Survey" +msgstr "Survey の远加" + +#: client/src/lists/Teams.js:15 +msgid "Add Team" +msgstr "チヌムの远加" + +#: client/src/lists/Users.js:25 +msgid "Add Users" +msgstr "ナヌザヌの远加" + +#: client/src/forms/Credentials.js:440 +#: client/src/forms/Inventories.js:151 +#: client/src/forms/JobTemplates.js:412 +#: client/src/forms/Organizations.js:73 +#: client/src/forms/Projects.js:235 +msgid "Add a permission" +msgstr "パヌミッションの远加" + +#: client/src/setup-menu/setup-menu.partial.html:23 +msgid "" +"Add passwords, SSH keys, etc. for Tower to use when launching jobs against " +"machines, or when syncing inventories or projects." +msgstr "" +"マシンに察しおゞョブを起動する際やむンベントリヌたたはプロゞェクトの同期時に䜿甚する Tower のパスワヌド、SSH キヌなどを远加したす。" + +#: client/src/forms/Teams.js:84 +msgid "Add user to team" +msgstr "ナヌザヌのチヌムぞの远加" + +#: client/src/shared/form-generator.js:1450 +msgid "Admin" +msgstr "管理者" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:37 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:43 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:65 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:74 +msgid "All" +msgstr "すべお" + +#: client/src/portal-mode/portal-mode-jobs.partial.html:7 +msgid "All Jobs" +msgstr "すべおのゞョブ" + +#: client/src/forms/JobTemplates.js:299 +#: client/src/forms/JobTemplates.js:306 +msgid "Allow Provisioning Callbacks" +msgstr "プロビゞョニングコヌルバックの蚱可" + +#: client/src/setup-menu/setup-menu.partial.html:11 +msgid "Allow others to sign into Tower and own the content they create." +msgstr "他のナヌザヌが Tower にサむンむンし、独自に䜜成するコンテンツを所有できるようにしたす。" + +#: client/src/forms/WorkflowMaker.js:50 +msgid "Always" +msgstr "垞時" + +#: client/src/controllers/Projects.js:220 +msgid "" +"An SCM update does not appear to be running for project: %s. Click the " +"%sRefresh%s button to view the latest status." +msgstr "SCM 曎新がプロゞェクトに察しお実行されおいないようです: %s。%s曎新%s ボタンをクリックしお最新のステヌタスを衚瀺しおください。" + +#: client/src/controllers/Projects.js:162 +msgid "Are you sure you want to delete the project below?" +msgstr "以䞋のプロゞェクトを削陀しおもよろしいですか?" + +#: client/src/controllers/Users.js:102 +msgid "Are you sure you want to delete the user below?" +msgstr "以䞋のナヌザヌを削陀しおもよろしいですか?" + +#: client/src/controllers/Projects.js:647 +msgid "Are you sure you want to remove the %s below from %s?" +msgstr "%s から以䞋の %s を削陀しおもよろしいですか?" + +#: client/src/forms/Credentials.js:233 +#: client/src/forms/Credentials.js:271 +#: client/src/forms/Credentials.js:310 +#: client/src/forms/Credentials.js:395 +msgid "Ask at runtime?" +msgstr "実行時に確認したすか?" + +#: client/src/shared/form-generator.js:1452 +msgid "Auditor" +msgstr "監査者" + +#: client/src/forms/Credentials.js:73 +msgid "" +"Authentication for network device access. This can include SSH keys, " +"usernames, passwords, and authorize information. Network credentials are " +"used when submitting jobs to run playbooks against network devices." +msgstr "" +"ネットワヌクデバむスアクセスの認蚌です。これには、SSH " +"キヌ、ナヌザヌ名、パスワヌド、および承認情報が含たれるこずがありたす。ネットワヌク認蚌情報は、ネットワヌクデバむスに察しお Playbook " +"を実行するためのゞョブの送信時に䜿甚されたす。" + +#: client/src/forms/Credentials.js:69 +msgid "" +"Authentication for remote machine access. This can include SSH keys, " +"usernames, passwords, and sudo information. Machine credentials are used " +"when submitting jobs to run playbooks against remote hosts." +msgstr "" +"リモヌトマシンアクセスの認蚌です。これには、SSH キヌ、ナヌザヌ名、パスワヌド、および sudo " +"情報が含たれるこずがありたす。マシン認蚌情報は、リモヌトホストに察しお Playbook を実行するためのゞョブの送信時に䜿甚されたす。" + +#: client/src/forms/Credentials.js:341 +msgid "Authorize" +msgstr "承認" + +#: client/src/forms/Credentials.js:349 +msgid "Authorize Password" +msgstr "パスワヌドの承認" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:101 +msgid "Azure AD" +msgstr "Azure AD" + +#: client/src/forms/Projects.js:80 +msgid "" +"Base path used for locating playbooks. Directories found inside this path " +"will be listed in the playbook directory drop-down. Together the base path " +"and selected playbook directory provide the full path used to locate " +"playbooks." +msgstr "" +"Playbook を芋぀けるために䜿甚されるベヌスパスです。このパス内にあるディレクトリヌは Playbook " +"ディレクトリヌのドロップダりンに䞀芧衚瀺されたす。ベヌスパスず遞択された Playbook ディレクトリヌは、Playbook " +"を芋぀けるために䜿甚される完党なパスを提䟛したす。" + +#: client/src/forms/JobTemplates.js:293 +msgid "Become Privilege Escalation" +msgstr "Become (暩限昇栌)" + +#: client/src/license/license.partial.html:104 +msgid "Browse" +msgstr "参照" + +#: client/src/app.js:317 +msgid "CREDENTIALS" +msgstr "認蚌情報" + +#: client/src/forms/Projects.js:194 +msgid "Cache Timeout" +msgstr "キャッシュタむムアりト" + +#: client/src/forms/Projects.js:183 +msgid "Cache Timeout%s (seconds)%s" +msgstr "キャッシュタむムアりト%s (seconds)%s" + +#: client/src/controllers/Projects.js:156 +#: client/src/controllers/Users.js:95 +msgid "Call to %s failed. DELETE returned status:" +msgstr "%s の呌び出しに倱敗したした。DELETE で返されたステヌタス:" + +#: client/src/controllers/Projects.js:201 +#: client/src/controllers/Projects.js:217 +msgid "Call to %s failed. GET status:" +msgstr "%s の呌び出しに倱敗したした。GET ステヌタス:" + +#: client/src/controllers/Projects.js:641 +msgid "Call to %s failed. POST returned status:" +msgstr "%s の呌び出しに倱敗したした。POST で返されたステヌタス:" + +#: client/src/controllers/Projects.js:180 +msgid "Call to %s failed. POST status:" +msgstr "%s の呌び出しに倱敗したした。POST ステヌタス:" + +#: client/src/controllers/Projects.js:226 +msgid "Call to get project failed. GET status:" +msgstr "プロゞェクトを取埗するための呌び出しに倱敗したした。GET ステヌタス:" + +#: client/src/configuration/configuration.controller.js:434 +#: client/src/shared/form-generator.js:1695 +msgid "Cancel" +msgstr "取り消し" + +#: client/src/controllers/Projects.js:196 +msgid "Cancel Not Allowed" +msgstr "取り消しは蚱可されおいたせん" + +#: client/src/lists/Projects.js:121 +msgid "Cancel the SCM update" +msgstr "SCM 曎新の取り消し" + +#: client/src/controllers/Projects.js:53 +msgid "Canceled. Click for details" +msgstr "取り消されたした。クリックしお詳现を確認しおください。" + +#: client/src/forms/Projects.js:82 +msgid "Change %s under \"Configure Tower\" to change this location." +msgstr "この堎所を倉曎するために「Tower の蚭定」䞋の %s を倉曎したす。" + +#: client/src/shared/form-generator.js:1084 +msgid "Choose a %s" +msgstr "%s の遞択" + +#: client/src/license/license.partial.html:97 +msgid "" +"Choose your license file, agree to the End User License Agreement, and click " +"submit." +msgstr "ラむセンスファむルを遞択し、䜿甚蚱諟契玄曞に同意した埌に「送信」をクリックしたす。" + +#: client/src/forms/Projects.js:151 +msgid "Clean" +msgstr "クリヌニング" + +#: client/src/lists/Inventories.js:18 +msgid "" +"Click on a row to select it, and click Finished when done. Click the %s " +"button to create a new inventory." +msgstr "行をクリックしおこれを遞択し、終了したら「終了」をクリックしたす。%s ボタンをクリックしお新芏むンベントリヌを䜜成したす。" + +#: client/src/lists/Teams.js:18 +msgid "" +"Click on a row to select it, and click Finished when done. Click the %s " +"button to create a new team." +msgstr "行をクリックしおこれを遞択し、終了したら「終了」をクリックしたす。%s ボタンをクリックしお新芏チヌムを䜜成したす。" + +#: client/src/lists/Templates.js:19 +msgid "" +"Click on a row to select it, and click Finished when done. Use the %s button " +"to create a new job template." +msgstr "行をクリックしおこれを遞択し、終了したら「終了」をクリックしたす。%s ボタンをクリックしお新芏ゞョブテンプレヌトを䜜成したす。" + +#: client/src/forms/Credentials.js:319 +msgid "Client ID" +msgstr "クラむアント ID" + +#: client/src/notifications/notificationTemplates.form.js:259 +msgid "Client Identifier" +msgstr "クラむアント識別子" + +#: client/src/forms/Credentials.js:328 +msgid "Client Secret" +msgstr "クラむアントシヌクレット" + +#: client/src/shared/form-generator.js:1699 +msgid "Close" +msgstr "閉じる" + +#: client/src/forms/JobTemplates.js:164 +#: client/src/forms/JobTemplates.js:176 +msgid "Cloud Credential" +msgstr "クラりド認蚌情報" + +#: client/src/helpers/Credentials.js:158 +msgid "CloudForms Host" +msgstr "CloudForms ホスト" + +#: client/src/notifications/notificationTemplates.form.js:295 +msgid "Color can be one of %s." +msgstr "色を %s のいずれかにするこずができたす。" + +#: client/src/lists/CompletedJobs.js:18 +msgid "Completed Jobs" +msgstr "完了したゞョブ" + +#: client/src/management-jobs/card/card.partial.html:32 +msgid "Configure Notifications" +msgstr "通知の蚭定" + +#: client/src/forms/Users.js:82 +msgid "Confirm Password" +msgstr "パスワヌドの確認" + +#: client/src/configuration/configuration.controller.js:441 +msgid "Confirm Reset" +msgstr "リセットの確認" + +#: client/src/configuration/configuration.controller.js:450 +msgid "Confirm factory reset" +msgstr "出荷時の蚭定ぞのリセットの確認" + +#: client/src/forms/JobTemplates.js:255 +#: client/src/forms/JobTemplates.js:273 +#: client/src/forms/WorkflowMaker.js:141 +#: client/src/forms/WorkflowMaker.js:156 +msgid "" +"Consult the Ansible documentation for further details on the usage of tags." +msgstr "タグの䜿甚法に぀いおの詳现は、Ansible ドキュメントを参照しおください。" + +#: client/src/forms/JobTemplates.js:241 +msgid "" +"Control the level of output ansible will produce as the playbook executes." +msgstr "Playbook の実行時に Ansible が生成する出力のレベルを制埡したす。" + +#: client/src/lists/Templates.js:100 +msgid "Copy" +msgstr "コピヌ" + +#: client/src/lists/Templates.js:103 +msgid "Copy template" +msgstr "テンプレヌトのコピヌ" + +#: client/src/forms/Credentials.js:18 +msgid "Create Credential" +msgstr "認蚌情報の䜜成" + +#: client/src/lists/Users.js:52 +msgid "Create New" +msgstr "新芏䜜成" + +#: client/src/lists/Credentials.js:57 +msgid "Create a new credential" +msgstr "新芏認蚌情報の䜜成" + +#: client/src/inventory-scripts/inventory-scripts.list.js:43 +msgid "Create a new custom inventory" +msgstr "新芏カスタムむンベントリヌの䜜成" + +#: client/src/lists/Inventories.js:66 +msgid "Create a new inventory" +msgstr "新芏むンベントリヌの䜜成" + +#: client/src/notifications/notificationTemplates.list.js:50 +#: client/src/notifications/notifications.list.js:66 +msgid "Create a new notification template" +msgstr "新芏通知テンプレヌトの䜜成" + +#: client/src/organizations/list/organizations-list.partial.html:16 +msgid "Create a new organization" +msgstr "新芏組織の䜜成" + +#: client/src/lists/Projects.js:65 +msgid "Create a new project" +msgstr "新芏プロゞェクトの䜜成" + +#: client/src/lists/Teams.js:48 +msgid "Create a new team" +msgstr "新芏チヌムの䜜成" + +#: client/src/lists/Templates.js:60 +msgid "Create a new template" +msgstr "新芏テンプレヌトの䜜成" + +#: client/src/lists/Users.js:56 +msgid "Create a new user" +msgstr "新芏ナヌザヌの䜜成" + +#: client/src/setup-menu/setup-menu.partial.html:35 +msgid "Create and edit scripts to dynamically load hosts from any source." +msgstr "任意の゜ヌスからホストを動的にロヌドするためのスクリプトを䜜成し、線集したす。" + +#: client/src/setup-menu/setup-menu.partial.html:42 +msgid "" +"Create templates for sending notifications with Email, HipChat, Slack, and " +"SMS." +msgstr "メヌル、HipChat、Slack、および SMS での通知を送信するためのテンプレヌトを䜜成したす。" + +#: client/src/forms/JobTemplates.js:154 +#: client/src/forms/WorkflowMaker.js:60 +#: client/src/forms/WorkflowMaker.js:69 +msgid "Credential" +msgstr "認蚌情報" + +#: client/src/lists/Credentials.js:18 +#: client/src/lists/Credentials.js:19 +#: client/src/setup-menu/setup-menu.partial.html:22 +msgid "Credentials" +msgstr "認蚌情報" + +#: client/src/inventory-scripts/inventory-scripts.form.js:50 +#: client/src/inventory-scripts/inventory-scripts.form.js:60 +msgid "Custom Script" +msgstr "カスタムスクリプト" + +#: client/src/app.js:409 +msgid "DASHBOARD" +msgstr "ダッシュボヌド" + +#: client/src/controllers/Projects.js:649 +#: client/src/controllers/Users.js:104 +msgid "DELETE" +msgstr "削陀" + +#: client/src/controllers/Projects.js:161 +#: client/src/controllers/Projects.js:646 +#: client/src/controllers/Users.js:101 +#: client/src/inventory-scripts/inventory-scripts.list.js:74 +#: client/src/lists/Credentials.js:90 +#: client/src/lists/Inventories.js:92 +#: client/src/lists/Teams.js:77 +#: client/src/lists/Templates.js:125 +#: client/src/lists/Users.js:87 +#: client/src/notifications/notificationTemplates.list.js:89 +msgid "Delete" +msgstr "削陀" + +#: client/src/lists/Credentials.js:92 +msgid "Delete credential" +msgstr "認蚌情報の削陀" + +#: client/src/lists/Inventories.js:94 +msgid "Delete inventory" +msgstr "むンベントリヌの削陀" + +#: client/src/inventory-scripts/inventory-scripts.list.js:76 +msgid "Delete inventory script" +msgstr "むンベントリヌスクリプトの削陀" + +#: client/src/notifications/notificationTemplates.list.js:91 +msgid "Delete notification" +msgstr "通知の削陀" + +#: client/src/forms/Projects.js:161 +msgid "Delete on Update" +msgstr "曎新時のデプロむ" + +#: client/src/lists/Teams.js:81 +msgid "Delete team" +msgstr "チヌムの削陀" + +#: client/src/lists/Templates.js:128 +msgid "Delete template" +msgstr "テンプレヌトの削陀" + +#: client/src/lists/CompletedJobs.js:82 +msgid "Delete the job" +msgstr "ゞョブの削陀" + +#: client/src/forms/Projects.js:163 +msgid "" +"Delete the local repository in its entirety prior to performing an update." +msgstr "曎新の実行前にロヌカルリポゞトリヌを完党に削陀したす。" + +#: client/src/lists/Projects.js:115 +msgid "Delete the project" +msgstr "プロゞェクトの削陀" + +#: client/src/lists/ScheduledJobs.js:80 +msgid "Delete the schedule" +msgstr "スケゞュヌルの削陀" + +#: client/src/lists/Users.js:91 +msgid "Delete user" +msgstr "ナヌザヌの削陀" + +#: client/src/forms/Projects.js:163 +msgid "" +"Depending on the size of the repository this may significantly increase the " +"amount of time required to complete an update." +msgstr "リポゞトリヌのサむズにより、曎新の完了たでに必芁な時間が倧幅に長くなる可胜性がありたす。" + +#: client/src/forms/Credentials.js:41 +#: client/src/forms/Inventories.js:37 +#: client/src/forms/JobTemplates.js:42 +#: client/src/forms/Organizations.js:33 +#: client/src/forms/Projects.js:38 +#: client/src/forms/Teams.js:34 +#: client/src/forms/Users.js:142 +#: client/src/forms/Users.js:167 +#: client/src/forms/Workflows.js:41 +#: client/src/inventory-scripts/inventory-scripts.form.js:32 +#: client/src/inventory-scripts/inventory-scripts.list.js:25 +#: client/src/lists/Credentials.js:34 +#: client/src/lists/PortalJobTemplates.js:29 +#: client/src/lists/Teams.js:30 +#: client/src/lists/Templates.js:36 +#: client/src/notifications/notificationTemplates.form.js:36 +msgid "Description" +msgstr "説明" + +#: client/src/notifications/notificationTemplates.form.js:138 +#: client/src/notifications/notificationTemplates.form.js:143 +#: client/src/notifications/notificationTemplates.form.js:155 +#: client/src/notifications/notificationTemplates.form.js:160 +#: client/src/notifications/notificationTemplates.form.js:372 +msgid "Destination Channels" +msgstr "送信先チャネル" + +#: client/src/notifications/notificationTemplates.form.js:367 +msgid "Destination Channels or Users" +msgstr "送信先チャネルたたはナヌザヌ" + +#: client/src/notifications/notificationTemplates.form.js:209 +#: client/src/notifications/notificationTemplates.form.js:214 +msgid "Destination SMS Number" +msgstr "送信先 SMS 番号" + +#: client/src/license/license.partial.html:5 +#: client/src/shared/form-generator.js:1481 +msgid "Details" +msgstr "詳现" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:70 +#: client/src/configuration/configuration.controller.js:170 +#: client/src/configuration/configuration.controller.js:232 +#: client/src/configuration/system-form/configuration-system.controller.js:49 +msgid "Discard changes" +msgstr "倉曎の砎棄" + +#: client/src/forms/Teams.js:148 +msgid "Dissasociate permission from team" +msgstr "チヌムからパヌミッションの関連付けを解陀" + +#: client/src/forms/Users.js:217 +msgid "Dissasociate permission from user" +msgstr "ナヌザヌからパヌミッションの関連付けを解陀" + +#: client/src/forms/Credentials.js:382 +#: client/src/helpers/Credentials.js:133 +msgid "Domain Name" +msgstr "ドメむン名" + +#: client/src/inventory-scripts/inventory-scripts.form.js:58 +msgid "" +"Drag and drop your custom inventory script file here or create one in the " +"field to import your custom inventory." +msgstr "" +"カスタムむンベントリヌのスクリプトファむルをここにドラッグアンドドロップするか、たたはこのフィヌルドにカスタムむンベントリヌをむンポヌトするためのファむルを䜜成したす。" + +#: client/src/forms/Projects.js:174 +msgid "" +"Each time a job runs using this project, perform an update to the local " +"repository prior to starting the job." +msgstr "このプロゞェクトでゞョブを実行する際は垞に、ゞョブの開始前にロヌカルリポゞトリヌに察しお曎新を実行したす。" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:63 +#: client/src/inventory-scripts/inventory-scripts.list.js:57 +#: client/src/lists/Credentials.js:71 +#: client/src/lists/Inventories.js:78 +#: client/src/lists/Teams.js:60 +#: client/src/lists/Templates.js:108 +#: client/src/lists/Users.js:68 +#: client/src/notifications/notificationTemplates.list.js:63 +#: client/src/notifications/notificationTemplates.list.js:72 +msgid "Edit" +msgstr "線集" + +#: client/src/forms/JobTemplates.js:466 +#: client/src/forms/Workflows.js:179 +#: client/src/shared/form-generator.js:1711 +msgid "Edit Survey" +msgstr "Survey の線集" + +#: client/src/lists/Credentials.js:73 +msgid "Edit credential" +msgstr "認蚌情報の線集" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:66 +msgid "Edit host" +msgstr "ホストの線集" + +#: client/src/lists/Inventories.js:80 +msgid "Edit inventory" +msgstr "むンベントリヌの線集" + +#: client/src/inventory-scripts/inventory-scripts.list.js:59 +msgid "Edit inventory script" +msgstr "むンベントリヌスクリプトの線集" + +#: client/src/notifications/notificationTemplates.list.js:74 +msgid "Edit notification" +msgstr "通知の線集" + +#: client/src/lists/Teams.js:64 +msgid "Edit team" +msgstr "チヌムの線集" + +#: client/src/lists/Templates.js:110 +msgid "Edit template" +msgstr "テンプレヌトの線集" + +#: client/src/lists/Projects.js:102 +msgid "Edit the project" +msgstr "プロゞェクトの線集" + +#: client/src/lists/ScheduledJobs.js:66 +msgid "Edit the schedule" +msgstr "スケゞュヌルの線集" + +#: client/src/lists/Users.js:72 +msgid "Edit user" +msgstr "ナヌザヌの線集" + +#: client/src/controllers/Projects.js:196 +msgid "" +"Either you do not have access or the SCM update process completed. Click the " +"%sRefresh%s button to view the latest status." +msgstr "アクセスがないか、たたは SCM 曎新プロセスが完了したした。%s曎新%s ボタンをクリックしお最新のステヌタスを衚瀺したす。" + +#: client/src/forms/Credentials.js:192 +#: client/src/forms/Users.js:42 +msgid "Email" +msgstr "メヌル" + +#: client/src/forms/JobTemplates.js:288 +msgid "Enable Privilege Escalation" +msgstr "暩限昇栌の有効化" + +#: client/src/forms/JobTemplates.js:303 +msgid "" +"Enables creation of a provisioning callback URL. Using the URL a host can " +"contact Tower and request a configuration update using this job template." +msgstr "" +"プロビゞョニングコヌルバック URL の䜜成を有効にしたす。この URL を䜿甚しおホストは Tower " +"に接続でき、このゞョブテンプレヌトを䜿甚しお接続の曎新を芁求できたす。" + +#: client/src/helpers/Credentials.js:306 +msgid "Encrypted credentials are not supported." +msgstr "暗号化された認蚌情報はサポヌトされおいたせん。" + +#: client/src/license/license.partial.html:108 +msgid "End User License Agreement" +msgstr "䜿甚蚱諟契玄曞" + +#: client/src/forms/Inventories.js:60 +msgid "" +"Enter inventory variables using either JSON or YAML syntax. Use the radio " +"button to toggle between the two." +msgstr "" +"JSON たたは YAML 構文のいずれかを䜿甚しおむンベントリヌ倉数を入力したす。ラゞオボタンを䜿甚しお 2 ぀の間の切り替えを行いたす。" + +#: client/src/helpers/Credentials.js:159 +msgid "" +"Enter the hostname or IP address for the virtual %s machine which is hosting " +"the CloudForm appliance." +msgstr "CloudForm アプラむアンスをホストしおいる仮想%sマシンのホスト名たたは IP アドレスを入力したす。" + +#: client/src/helpers/Credentials.js:150 +msgid "" +"Enter the hostname or IP address name which %scorresponds to your Red Hat " +"Satellite 6 server." +msgstr "Red Hat Satellite 6 サヌバヌに察応するホスト名%sたたは IP アドレスを入力したす。" + +#: client/src/helpers/Credentials.js:128 +msgid "" +"Enter the hostname or IP address which corresponds to your VMware vCenter." +msgstr "VMware vCenter に察応するホスト名たたは IP アドレスを入力したす。" + +#: client/src/configuration/configuration.controller.js:292 +#: client/src/configuration/configuration.controller.js:370 +#: client/src/configuration/configuration.controller.js:404 +#: client/src/configuration/configuration.controller.js:423 +#: client/src/controllers/Projects.js:133 +#: client/src/controllers/Projects.js:155 +#: client/src/controllers/Projects.js:180 +#: client/src/controllers/Projects.js:201 +#: client/src/controllers/Projects.js:216 +#: client/src/controllers/Projects.js:225 +#: client/src/controllers/Projects.js:363 +#: client/src/controllers/Projects.js:557 +#: client/src/controllers/Projects.js:623 +#: client/src/controllers/Projects.js:641 +#: client/src/controllers/Users.js:182 +#: client/src/controllers/Users.js:267 +#: client/src/controllers/Users.js:321 +#: client/src/controllers/Users.js:94 +#: client/src/helpers/Credentials.js:310 +#: client/src/helpers/Credentials.js:326 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:119 +msgid "Error!" +msgstr "゚ラヌ!" + +#: client/src/controllers/Projects.js:381 +#: client/src/controllers/Projects.js:664 +msgid "Example URLs for GIT SCM include:" +msgstr "GIT SCM のサンプル URL には以䞋が含たれたす:" + +#: client/src/controllers/Projects.js:394 +#: client/src/controllers/Projects.js:676 +msgid "Example URLs for Mercurial SCM include:" +msgstr "Mercurial SCM のサンプル URL には以䞋が含たれたす:" + +#: client/src/controllers/Projects.js:389 +#: client/src/controllers/Projects.js:671 +msgid "Example URLs for Subversion SCM include:" +msgstr "Subversion SCM のサンプル URL には以䞋が含たれたす:" + +#: client/src/license/license.partial.html:39 +msgid "Expires On" +msgstr "有効期限" + +#: client/src/forms/JobTemplates.js:352 +#: client/src/forms/JobTemplates.js:364 +#: client/src/forms/Workflows.js:72 +#: client/src/forms/Workflows.js:84 +msgid "Extra Variables" +msgstr "远加倉数" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:67 +msgid "FAILED" +msgstr "倱敗" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:80 +msgid "Failed" +msgstr "倱敗" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:44 +msgid "Failed Hosts" +msgstr "倱敗したホスト" + +#: client/src/controllers/Users.js:182 +msgid "Failed to add new user. POST returned status:" +msgstr "新芏ナヌザヌを远加できたせんでした。POST で返されたステヌタス:" + +#: client/src/helpers/Credentials.js:311 +msgid "Failed to create new Credential. POST status:" +msgstr "新芏の認蚌情報を䜜成できたせんでした。POST ステヌタス:" + +#: client/src/controllers/Projects.js:364 +msgid "Failed to create new project. POST returned status:" +msgstr "新芏プロゞェクトを䜜成できたせんでした。POST で返されたステヌタス:" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:120 +msgid "Failed to get third-party login types. Returned status:" +msgstr "サヌドパヌティヌのログむンタむプを取埗できたせんでした。返されたステヌタス:" + +#: client/src/controllers/Projects.js:558 +msgid "Failed to retrieve project: %s. GET status:" +msgstr "プロゞェクトを取埗できたせんでした: %s. GET ステヌタス:" + +#: client/src/controllers/Users.js:268 +#: client/src/controllers/Users.js:322 +msgid "Failed to retrieve user: %s. GET status:" +msgstr "ナヌザヌを取埗できたせんでした: %s. GET ステヌタス:" + +#: client/src/configuration/configuration.controller.js:371 +msgid "Failed to save settings. Returned status:" +msgstr "蚭定を保存できたせんでした。返されたステヌタス:" + +#: client/src/configuration/configuration.controller.js:405 +msgid "Failed to save toggle settings. Returned status:" +msgstr "トグルの蚭定を保存できたせんでした。返されたステヌタス:" + +#: client/src/helpers/Credentials.js:327 +msgid "Failed to update Credential. PUT status:" +msgstr "認蚌情報を曎新できたせんでした。PUT ステヌタス:" + +#: client/src/controllers/Projects.js:623 +msgid "Failed to update project: %s. PUT status:" +msgstr "プロゞェクトを曎新できたせんでした: %s. PUT ステヌタス:" + +#: client/src/notifications/notifications.list.js:49 +msgid "Failure" +msgstr "倱敗" + +#: client/src/lists/CompletedJobs.js:56 +#: client/src/lists/PortalJobs.js:37 +msgid "Finished" +msgstr "終了日時" + +#: client/src/forms/Users.js:28 +#: client/src/lists/Users.js:41 +msgid "First Name" +msgstr "名" + +#: client/src/helpers/Credentials.js:142 +msgid "For example, %s" +msgstr "䟋: %s" + +#: client/src/notifications/notificationTemplates.form.js:142 +#: client/src/notifications/notificationTemplates.form.js:159 +#: client/src/notifications/notificationTemplates.form.js:213 +#: client/src/notifications/notificationTemplates.form.js:333 +#: client/src/notifications/notificationTemplates.form.js:371 +#: client/src/notifications/notificationTemplates.form.js:98 +msgid "For example:" +msgstr "䟋:" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:54 +msgid "" +"For hosts that are part of an external inventory, this flag cannot be " +"changed. It will be set by the inventory sync process." +msgstr "倖郚むンベントリヌの䞀郚であるホストの堎合、このフラグを倉曎できたせん。これはむンベントリヌ同期プロセスで蚭定されたす。" + +#: client/src/forms/JobTemplates.js:223 +#: client/src/forms/WorkflowMaker.js:125 +msgid "" +"For more information and examples see %sthe Patterns topic at docs.ansible." +"com%s." +msgstr "詳现情報およびサンプルに぀いおは、docs.ansible.com の %sパタヌンのトピックを参照しおください%s。" + +#: client/src/forms/JobTemplates.js:199 +#: client/src/forms/JobTemplates.js:212 +msgid "Forks" +msgstr "フォヌク" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:102 +msgid "GitHub" +msgstr "GitHub" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:103 +msgid "GitHub Org" +msgstr "GitHub 組織" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:104 +msgid "GithHub Team" +msgstr "GithHub チヌム" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:105 +msgid "Google OAuth2" +msgstr "Google OAuth2" + +#: client/src/forms/Teams.js:118 +msgid "Granted Permissions" +msgstr "付䞎されたパヌミッション" + +#: client/src/forms/Users.js:183 +msgid "Granted permissions" +msgstr "付䞎されたパヌミッション" + +#: client/src/setup-menu/setup-menu.partial.html:5 +msgid "" +"Group all of your content to manage permissions across departments in your " +"company." +msgstr "䌚瀟内の耇数の郚眲のパヌミッションを管理するためにすべおのコンテンツを分類したす。" + +#: client/src/notifications/notificationTemplates.form.js:324 +msgid "HTTP Headers" +msgstr "HTTP ヘッダヌ" + +#: client/src/forms/Credentials.js:140 +#: client/src/notifications/notificationTemplates.form.js:72 +msgid "Host" +msgstr "ホスト" + +#: client/src/helpers/Credentials.js:131 +msgid "Host (Authentication URL)" +msgstr "ホスト (認蚌 URL)" + +#: client/src/forms/JobTemplates.js:326 +#: client/src/forms/JobTemplates.js:335 +msgid "Host Config Key" +msgstr "ホスト蚭定キヌ" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:55 +msgid "Host Enabled" +msgstr "有効なホスト" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:39 +msgid "Hosts" +msgstr "ホスト" + +#: client/src/license/license.partial.html:52 +msgid "Hosts Available" +msgstr "利甚可胜なホスト" + +#: client/src/license/license.partial.html:64 +msgid "Hosts Remaining" +msgstr "残りのホスト" + +#: client/src/license/license.partial.html:58 +msgid "Hosts Used" +msgstr "䜿甚されたホスト" + +#: client/src/license/license.partial.html:116 +msgid "I agree to the End User License Agreement" +msgstr "䜿甚蚱諟契玄曞に同意したす。" + +#: client/src/main-menu/main-menu.partial.html:104 +#: client/src/main-menu/main-menu.partial.html:27 +msgid "INVENTORIES" +msgstr "むンベントリヌ" + +#: client/src/notifications/notificationTemplates.form.js:356 +msgid "IRC Nick" +msgstr "IRC ニック" + +#: client/src/notifications/notificationTemplates.form.js:345 +msgid "IRC Server Address" +msgstr "IRC サヌバヌアドレス" + +#: client/src/notifications/shared/type-change.service.js:58 +msgid "IRC Server Password" +msgstr "IRC サヌバヌパスワヌド" + +#: client/src/notifications/shared/type-change.service.js:57 +msgid "IRC Server Port" +msgstr "IRC サヌバヌポヌト" + +#: client/src/forms/JobTemplates.js:291 +msgid "" +"If enabled, run this playbook as an administrator. This is the equivalent of " +"passing the %s option to the %s command." +msgstr "有効な堎合、この Playbook を管理者ずしお実行したす。これは %s オプションを %s コマンドに枡すこずに盞圓したす。" + +#: client/src/forms/Credentials.js:54 +msgid "" +"If no organization is given, the credential can only be used by the user " +"that creates the credential. Organization admins and system administrators " +"can assign an organization so that roles for the credential can be assigned " +"to users and teams in that organization." +msgstr "" +"組織が指定されない堎合、認蚌情報はそれを䜜成するナヌザヌのみに䜿甚されたす。組織管理者およびシステム管理者は組織を割り圓お、認蚌情報のロヌルを組織内のナヌザヌおよびチヌムに割り圓おられるようにしたす。" + +#: client/src/license/license.partial.html:70 +msgid "" +"If you are ready to upgrade, please contact us by clicking the button below" +msgstr "アップグレヌドの準備ができたしたら、以䞋のボタンをクリックしおお問い合わせください。" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:54 +msgid "" +"Indicates if a host is available and should be included in running jobs." +msgstr "ホストが利甚可胜かどうか、たた実行䞭のゞョブに組み蟌む必芁があるかどうかを瀺したす。" + +#: client/src/forms/JobTemplates.js:58 +msgid "" +"Instead, %s will check playbook syntax, test environment setup and report " +"problems." +msgstr "代わりに、%s は Playbook 構文、テスト環境セットアップおよびレポヌトの問題を怜査したす。" + +#: client/src/license/license.partial.html:11 +msgid "Invalid License" +msgstr "無効なラむセンス" + +#: client/src/license/license.controller.js:69 +#: client/src/license/license.controller.js:76 +msgid "Invalid file format. Please upload valid JSON." +msgstr "無効なファむル圢匏です。有効な JSON をアップロヌドしおください。" + +#: client/src/login/loginModal/loginModal.partial.html:34 +msgid "Invalid username and/or password. Please try again." +msgstr "無効なナヌザヌ名および/たたはパスワヌドです。やり盎しおください。" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:50 +#: client/src/lists/Inventories.js:16 +#: client/src/lists/Inventories.js:17 +msgid "Inventories" +msgstr "むンベントリヌ" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:41 +#: client/src/forms/JobTemplates.js:73 +#: client/src/forms/JobTemplates.js:86 +#: client/src/forms/WorkflowMaker.js:79 +#: client/src/forms/WorkflowMaker.js:89 +msgid "Inventory" +msgstr "むンベントリヌ" + +#: client/src/inventory-scripts/inventory-scripts.list.js:12 +#: client/src/setup-menu/setup-menu.partial.html:34 +msgid "Inventory Scripts" +msgstr "むンベントリヌスクリプト" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:46 +msgid "Inventory Sync" +msgstr "むンベントリヌ同期" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:55 +msgid "Inventory Sync Failures" +msgstr "むンベントリヌの同期の倱敗" + +#: client/src/forms/Inventories.js:67 +msgid "Inventory Variables" +msgstr "むンベントリヌ倉数" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:4 +msgid "JOB STATUS" +msgstr "ゞョブステヌタス" + +#: client/src/forms/JobTemplates.js:23 +msgid "JOB TEMPLATE" +msgstr "ゞョブテンプレヌト" + +#: client/src/app.js:429 +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:113 +#: client/src/main-menu/main-menu.partial.html:122 +#: client/src/main-menu/main-menu.partial.html:43 +msgid "JOBS" +msgstr "ゞョブ" + +#: client/src/forms/JobTemplates.js:248 +#: client/src/forms/JobTemplates.js:256 +#: client/src/forms/WorkflowMaker.js:134 +#: client/src/forms/WorkflowMaker.js:142 +msgid "Job Tags" +msgstr "ゞョブタグ" + +#: client/src/lists/Templates.js:65 +msgid "Job Template" +msgstr "ゞョブテンプレヌト" + +#: client/src/lists/PortalJobTemplates.js:15 +#: client/src/lists/PortalJobTemplates.js:16 +msgid "Job Templates" +msgstr "ゞョブテンプレヌト" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:32 +#: client/src/forms/JobTemplates.js:48 +#: client/src/forms/JobTemplates.js:62 +#: client/src/forms/WorkflowMaker.js:110 +#: client/src/forms/WorkflowMaker.js:99 +msgid "Job Type" +msgstr "ゞョブタむプ" + +#: client/src/lists/PortalJobs.js:15 +#: client/src/lists/PortalJobs.js:19 +#: client/src/partials/jobs.html:7 +msgid "Jobs" +msgstr "ゞョブ" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:106 +msgid "LDAP" +msgstr "LDAP" + +#: client/src/main-menu/main-menu.partial.html:83 +msgid "LOG OUT" +msgstr "ログアりト" + +#: client/src/notifications/notificationTemplates.form.js:270 +msgid "Label to be shown with notification" +msgstr "通知ず共に衚瀺されるラベル" + +#: client/src/forms/JobTemplates.js:340 +#: client/src/forms/JobTemplates.js:345 +#: client/src/forms/Workflows.js:60 +#: client/src/forms/Workflows.js:65 +#: client/src/lists/Templates.js:47 +msgid "Labels" +msgstr "ラベル" + +#: client/src/forms/Users.js:35 +#: client/src/lists/Users.js:45 +msgid "Last Name" +msgstr "姓" + +#: client/src/lists/Projects.js:53 +msgid "Last Updated" +msgstr "最終曎新日時" + +#: client/src/lists/PortalJobTemplates.js:39 +#: client/src/lists/Templates.js:84 +#: client/src/shared/form-generator.js:1703 +msgid "Launch" +msgstr "起動" + +#: client/src/management-jobs/card/card.partial.html:21 +msgid "Launch Management Job" +msgstr "管理ゞョブの起動" + +#: client/src/license/license.controller.js:42 +#: client/src/license/license.partial.html:8 +msgid "License" +msgstr "ラむセンス" + +#: client/src/license/license.partial.html:102 +msgid "License File" +msgstr "ラむセンスファむル" + +#: client/src/license/license.partial.html:33 +msgid "License Key" +msgstr "ラむセンスキヌ" + +#: client/src/license/license.controller.js:42 +msgid "License Management" +msgstr "ラむセンス管理" + +#: client/src/license/license.partial.html:21 +msgid "License Type" +msgstr "ラむセンスタむプ" + +#: client/src/forms/JobTemplates.js:218 +#: client/src/forms/JobTemplates.js:225 +#: client/src/forms/WorkflowMaker.js:120 +#: client/src/forms/WorkflowMaker.js:127 +msgid "Limit" +msgstr "制限" + +#: client/src/shared/socket/socket.service.js:170 +msgid "Live events: attempting to connect to the Tower server." +msgstr "ラむブむベント: Tower サヌバヌぞの接続を詊行しおいたす。" + +#: client/src/shared/socket/socket.service.js:174 +msgid "" +"Live events: connected. Pages containing job status information will " +"automatically update in real-time." +msgstr "ラむブむベント: 接続されおいたす。ゞョブステヌタス情報を含むペヌゞは自動的にリアルタむムで曎新されたす。" + +#: client/src/shared/socket/socket.service.js:178 +msgid "Live events: error connecting to the Tower server." +msgstr "ラむブむベント: Tower サヌバヌぞの接続時に゚ラヌが発生したした。" + +#: client/src/shared/form-generator.js:1977 +msgid "Loading..." +msgstr "ロヌド䞭..." + +#: client/src/main-menu/main-menu.partial.html:188 +msgid "Log Out" +msgstr "ログアりト" + +#: client/src/configuration/system-form/configuration-system.controller.js:82 +msgid "Logging" +msgstr "ロギング" + +#: client/src/management-jobs/card/card.route.js:21 +msgid "MANAGEMENT JOBS" +msgstr "管理ゞョブ" + +#: client/src/forms/Credentials.js:68 +msgid "Machine" +msgstr "マシン" + +#: client/src/forms/JobTemplates.js:137 +msgid "Machine Credential" +msgstr "マシンの認蚌情報" + +#: client/src/setup-menu/setup-menu.partial.html:29 +msgid "" +"Manage the cleanup of old job history, activity streams, data marked for " +"deletion, and system tracking info." +msgstr "叀いゞョブ履歎、アクティビティヌストリヌム、削陀甚にマヌクされたデヌタ、およびシステムトラッキング情報のクリヌンアップを管理したす。" + +#: client/src/helpers/Credentials.js:111 +msgid "Management Certificate" +msgstr "管理蚌明曞" + +#: client/src/management-jobs/card/card.partial.html:4 +#: client/src/setup-menu/setup-menu.partial.html:28 +msgid "Management Jobs" +msgstr "管理ゞョブ" + +#: client/src/controllers/Projects.js:62 +msgid "Manual projects do not require a schedule" +msgstr "手動プロゞェクトにスケゞュヌルは䞍芁です" + +#: client/src/controllers/Projects.js:547 +#: client/src/controllers/Projects.js:61 +msgid "Manual projects do not require an SCM update" +msgstr "手動プロゞェクトに SCM 曎新は䞍芁です" + +#: client/src/login/loginModal/loginModal.partial.html:28 +msgid "Maximum per-user sessions reached. Please sign in." +msgstr "ナヌザヌあたりの最倧セッション数に達したした。サむンむンしおください。" + +#: client/src/configuration/system-form/configuration-system.controller.js:80 +msgid "Misc. System" +msgstr "その他のシステム" + +#: client/src/portal-mode/portal-mode-jobs.partial.html:4 +msgid "My Jobs" +msgstr "マむゞョブ" + +#: client/src/main-menu/main-menu.partial.html:160 +msgid "My View" +msgstr "マむビュヌ" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:18 +msgid "NO HOSTS FOUND" +msgstr "ホストが芋぀かりたせんでした" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:14 +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:13 +#: client/src/forms/Credentials.js:34 +#: client/src/forms/Inventories.js:29 +#: client/src/forms/JobTemplates.js:35 +#: client/src/forms/Organizations.js:26 +#: client/src/forms/Projects.js:31 +#: client/src/forms/Teams.js:126 +#: client/src/forms/Teams.js:27 +#: client/src/forms/Users.js:139 +#: client/src/forms/Users.js:164 +#: client/src/forms/Users.js:190 +#: client/src/forms/Workflows.js:34 +#: client/src/inventory-scripts/inventory-scripts.form.js:25 +#: client/src/inventory-scripts/inventory-scripts.list.js:20 +#: client/src/lists/CompletedJobs.js:43 +#: client/src/lists/Credentials.js:29 +#: client/src/lists/Inventories.js:46 +#: client/src/lists/PortalJobTemplates.js:24 +#: client/src/lists/PortalJobs.js:32 +#: client/src/lists/Projects.js:37 +#: client/src/lists/ScheduledJobs.js:32 +#: client/src/lists/Teams.js:25 +#: client/src/lists/Templates.js:26 +#: client/src/notifications/notificationTemplates.form.js:29 +#: client/src/notifications/notificationTemplates.list.js:33 +#: client/src/notifications/notifications.list.js:26 +msgid "Name" +msgstr "名前" + +#: client/src/forms/Credentials.js:72 +msgid "Network" +msgstr "ネットワヌク" + +#: client/src/forms/JobTemplates.js:182 +#: client/src/forms/JobTemplates.js:193 +msgid "Network Credential" +msgstr "ネットワヌクの認蚌情報" + +#: client/src/forms/JobTemplates.js:192 +msgid "" +"Network credentials are used by Ansible networking modules to connect to and " +"manage networking devices." +msgstr "" +"ネットワヌク認蚌情報は、ネットワヌクデバむスぞの接続およびその管理を実行するために Ansible ネットワヌクモゞュヌルによっお䜿甚されたす。" + +#: client/src/inventory-scripts/inventory-scripts.form.js:16 +msgid "New Custom Inventory" +msgstr "新芏カスタムむンベントリヌ" + +#: client/src/forms/Inventories.js:18 +msgid "New Inventory" +msgstr "新芏むンベントリヌ" + +#: client/src/forms/JobTemplates.js:20 +msgid "New Job Template" +msgstr "新芏ゞョブテンプレヌト" + +#: client/src/notifications/notificationTemplates.form.js:16 +msgid "New Notification Template" +msgstr "新芏通知テンプレヌト" + +#: client/src/forms/Organizations.js:18 +msgid "New Organization" +msgstr "新芏組織" + +#: client/src/forms/Projects.js:18 +msgid "New Project" +msgstr "新芏プロゞェクト" + +#: client/src/forms/Teams.js:18 +msgid "New Team" +msgstr "新芏チヌム" + +#: client/src/forms/Users.js:18 +msgid "New User" +msgstr "新芏ナヌザヌ" + +#: client/src/forms/Workflows.js:19 +msgid "New Workflow Job Template" +msgstr "新芏ワヌクフロヌゞョブテンプレヌト" + +#: client/src/controllers/Users.js:174 +msgid "New user successfully created!" +msgstr "新芏ナヌザヌが正垞に䜜成されたした!" + +#: client/src/lists/ScheduledJobs.js:50 +msgid "Next Run" +msgstr "次回の実行日時" + +#: client/src/lists/Credentials.js:24 +msgid "No Credentials Have Been Created" +msgstr "認蚌情報が䜜成されおいたせん" + +#: client/src/controllers/Projects.js:123 +msgid "No SCM Configuration" +msgstr "SCM 蚭定がありたせん" + +#: client/src/controllers/Projects.js:114 +msgid "No Updates Available" +msgstr "利甚可胜な曎新がありたせん" + +#: client/src/lists/CompletedJobs.js:22 +msgid "No completed jobs" +msgstr "完了したゞョブがありたせん" + +#: client/src/license/license.controller.js:41 +msgid "No file selected." +msgstr "ファむルが遞択されおいたせん。" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:46 +msgid "No jobs were recently run." +msgstr "最近実行されたゞョブがありたせん。" + +#: client/src/forms/Teams.js:123 +#: client/src/forms/Users.js:187 +msgid "No permissions have been granted" +msgstr "パヌミッションが付䞎されおいたせん" + +#: client/src/lists/ScheduledJobs.js:18 +msgid "No schedules exist" +msgstr "スケゞュヌルがありたせん" + +#: client/src/controllers/Users.js:16 +msgid "Normal User" +msgstr "暙準ナヌザヌ" + +#: client/src/controllers/Projects.js:64 +msgid "Not configured for SCM" +msgstr "SCM 甚に蚭定されおいたせん" + +#: client/src/notifications/notificationTemplates.form.js:293 +msgid "Notification Color" +msgstr "通知の色" + +#: client/src/notifications/notificationTemplates.list.js:14 +msgid "Notification Templates" +msgstr "通知テンプレヌト" + +#: client/src/notifications/notifications.list.js:17 +#: client/src/setup-menu/setup-menu.partial.html:41 +msgid "Notifications" +msgstr "通知" + +#: client/src/notifications/notificationTemplates.form.js:306 +msgid "Notify Channel" +msgstr "通知チャネル" + +#: client/src/notifications/notificationTemplates.form.js:198 +msgid "Number associated with the \"Messaging Service\" in Twilio." +msgstr "Twilio の \"メッセヌゞングサヌビス\" に関連付けられた数字。 " + +#: client/src/shared/form-generator.js:547 +msgid "OFF" +msgstr "オフ" + +#: client/src/shared/form-generator.js:545 +msgid "ON" +msgstr "オン" + +#: client/src/organizations/list/organizations-list.partial.html:6 +msgid "ORGANIZATIONS" +msgstr "組織" + +#: client/src/forms/WorkflowMaker.js:45 +msgid "On Failure" +msgstr "倱敗した堎合 " + +#: client/src/forms/WorkflowMaker.js:40 +msgid "On Success" +msgstr "成功した堎合 " + +#: client/src/forms/Credentials.js:377 +msgid "" +"OpenStack domains define administrative boundaries. It is only needed for " +"Keystone v3 authentication URLs. Common scenarios include:" +msgstr "" +"OpenStack ドメむンは管理䞊の境界を定矩したす。これは Keystone v3 認蚌 URL " +"にのみ必芁です。共通するシナリオには以䞋が含たれたす:" + +#: client/src/forms/JobTemplates.js:347 +#: client/src/forms/Workflows.js:67 +msgid "" +"Optional labels that describe this job template, such as 'dev' or 'test'. " +"Labels can be used to group and filter job templates and completed jobs in " +"the Tower display." +msgstr "" +"「dev」たたは「test」などのこのゞョブテンプレヌトを説明するオプションラベルです。ラベルを䜿甚し、Tower " +"のディスプレむでゞョブテンプレヌトおよび完了したゞョブの分類およびフィルタヌを実行できたす。" + +#: client/src/forms/JobTemplates.js:284 +#: client/src/notifications/notificationTemplates.form.js:391 +msgid "Options" +msgstr "オプション" + +#: client/src/forms/Credentials.js:49 +#: client/src/forms/Credentials.js:55 +#: client/src/forms/Inventories.js:42 +#: client/src/forms/Projects.js:43 +#: client/src/forms/Projects.js:49 +#: client/src/forms/Teams.js:39 +#: client/src/forms/Users.js:59 +#: client/src/forms/Workflows.js:47 +#: client/src/forms/Workflows.js:53 +#: client/src/inventory-scripts/inventory-scripts.form.js:37 +#: client/src/inventory-scripts/inventory-scripts.list.js:30 +#: client/src/lists/Inventories.js:52 +#: client/src/lists/Teams.js:35 +#: client/src/notifications/notificationTemplates.form.js:41 +msgid "Organization" +msgstr "組織" + +#: client/src/forms/Users.js:129 +#: client/src/setup-menu/setup-menu.partial.html:4 +msgid "Organizations" +msgstr "組織" + +#: client/src/forms/Credentials.js:80 +msgid "Others (Cloud Providers)" +msgstr "その他 (クラりドプロバむダヌ)" + +#: client/src/lists/Credentials.js:45 +msgid "Owners" +msgstr "所有者" + +#: client/src/login/loginModal/loginModal.partial.html:68 +msgid "PASSWORD" +msgstr "パスワヌド" + +#: client/src/organizations/list/organizations-list.partial.html:44 +#: client/src/shared/form-generator.js:1880 +#: client/src/shared/list-generator/list-generator.factory.js:245 +msgid "PLEASE ADD ITEMS TO THIS LIST" +msgstr "項目をこの䞀芧に远加しおください" + +#: client/src/main-menu/main-menu.partial.html:67 +msgid "PORTAL MODE" +msgstr "ポヌタルモヌド" + +#: client/src/main-menu/main-menu.partial.html:19 +#: client/src/main-menu/main-menu.partial.html:95 +msgid "PROJECTS" +msgstr "プロゞェクト" + +#: client/src/notifications/notificationTemplates.form.js:237 +msgid "Pagerduty subdomain" +msgstr "Pagerduty サブドメむン" + +#: client/src/forms/JobTemplates.js:358 +#: client/src/forms/Workflows.js:78 +msgid "" +"Pass extra command line variables to the playbook. This is the %s or %s " +"command line parameter for %s. Provide key/value pairs using either YAML or " +"JSON." +msgstr "" +"远加のコマンドラむン倉数を Playbook に枡したす。これは、%s の %s たたは %s コマンドラむンパラメヌタヌです。YAML たたは " +"JSON のいずれかを䜿甚しおキヌず倀のペアを指定したす。" + +#: client/src/forms/Credentials.js:227 +#: client/src/forms/Users.js:70 +#: client/src/helpers/Credentials.js:119 +#: client/src/helpers/Credentials.js:127 +#: client/src/helpers/Credentials.js:147 +#: client/src/helpers/Credentials.js:156 +#: client/src/helpers/Credentials.js:165 +#: client/src/helpers/Credentials.js:45 +#: client/src/helpers/Credentials.js:94 +#: client/src/notifications/shared/type-change.service.js:28 +msgid "Password" +msgstr "パスワヌド" + +#: client/src/helpers/Credentials.js:73 +msgid "Password (API Key)" +msgstr "パスワヌド (API キヌ)" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:20 +msgid "Past 24 Hours" +msgstr "過去 24 時間" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:15 +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:26 +msgid "Past Month" +msgstr "過去 1 ヵ月" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:23 +msgid "Past Week" +msgstr "過去 1 週間" + +#: client/src/helpers/Credentials.js:102 +msgid "" +"Paste the contents of the PEM file associated with the service account email." +"" +msgstr "サヌビスアカりントメヌルに関連付けられた PEM ファむルの内容を貌り付けたす。" + +#: client/src/helpers/Credentials.js:114 +msgid "" +"Paste the contents of the PEM file that corresponds to the certificate you " +"uploaded in the Microsoft Azure console." +msgstr "Microsoft Azure コン゜ヌルにアップロヌドした蚌明曞に察応する PEM ファむルの内容を貌り付けたす。" + +#: client/src/helpers/Credentials.js:66 +msgid "Paste the contents of the SSH private key file." +msgstr "SSH 秘密鍵ファむルの内容を貌り付けたす。" + +#: client/src/helpers/Credentials.js:41 +msgid "Paste the contents of the SSH private key file.%s or click to close%s" +msgstr "SSH 秘密鍵ファむルの内容を貌り付けたす。%s たたはクリックしお %s を閉じたす。" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:8 +msgid "Period" +msgstr "期間" + +#: client/src/controllers/Projects.js:284 +#: client/src/controllers/Users.js:141 +msgid "Permission Error" +msgstr "パヌミッションの゚ラヌ" + +#: client/src/forms/Credentials.js:432 +#: client/src/forms/Inventories.js:142 +#: client/src/forms/JobTemplates.js:403 +#: client/src/forms/Organizations.js:64 +#: client/src/forms/Projects.js:227 +#: client/src/forms/Workflows.js:116 +msgid "Permissions" +msgstr "パヌミッション" + +#: client/src/forms/JobTemplates.js:120 +#: client/src/forms/JobTemplates.js:131 +msgid "Playbook" +msgstr "Playbook" + +#: client/src/forms/Projects.js:89 +msgid "Playbook Directory" +msgstr "Playbook ディレクトリヌ" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:52 +msgid "Playbook Run" +msgstr "Playbook 実行" + +#: client/src/license/license.partial.html:84 +msgid "" +"Please click the button below to visit Ansible's website to get a Tower " +"license key." +msgstr "以䞋のボタンをクリックし、Ansible の web サむトに移動しお Tower ラむセンスキヌを取埗したす。" + +#: client/src/shared/form-generator.js:828 +#: client/src/shared/form-generator.js:953 +msgid "" +"Please enter a URL that begins with ssh, http or https. The URL may not " +"contain the '@' character." +msgstr "ssh、http たたは https で始たる URL を入力したす。URL には「@」文字を含めるこずはできたせん。" + +#: client/src/shared/form-generator.js:1189 +msgid "Please enter a number greater than %d and less than %d." +msgstr "%d より倧きく、%d より小さい数倀を入力しおください。" + +#: client/src/shared/form-generator.js:1191 +msgid "Please enter a number greater than %d." +msgstr "%d より倧きい数倀を入力しおください。" + +#: client/src/shared/form-generator.js:1183 +msgid "Please enter a number." +msgstr "数倀を入力しおください。" + +#: client/src/login/loginModal/loginModal.partial.html:78 +msgid "Please enter a password." +msgstr "パスワヌドを入力しおください。" + +#: client/src/login/loginModal/loginModal.partial.html:58 +msgid "Please enter a username." +msgstr "ナヌザヌ名を入力しおください。" + +#: client/src/shared/form-generator.js:818 +#: client/src/shared/form-generator.js:943 +msgid "Please enter a valid email address." +msgstr "有効なメヌルアドレスを入力しおください。" + +#: client/src/shared/form-generator.js:1044 +#: client/src/shared/form-generator.js:813 +#: client/src/shared/form-generator.js:938 +msgid "Please enter a value." +msgstr "倀を入力しおください。" + +#: client/src/lists/CompletedJobs.js:13 +msgid "Please save and run a job to view" +msgstr "衚瀺するゞョブを保存し、実行しおください。" + +#: client/src/notifications/notifications.list.js:15 +msgid "Please save before adding notifications" +msgstr "保存しおから通知を远加したす。" + +#: client/src/forms/Teams.js:69 +msgid "Please save before adding users" +msgstr "保存しおからナヌザヌを远加したす。" + +#: client/src/forms/Inventories.js:138 +#: client/src/forms/Inventories.js:91 +#: client/src/forms/JobTemplates.js:396 +#: client/src/forms/Organizations.js:57 +#: client/src/forms/Projects.js:219 +#: client/src/forms/Teams.js:110 +#: client/src/forms/Workflows.js:109 +msgid "Please save before assigning permissions" +msgstr "保存しおからパヌミッションを割り圓おたす。" + +#: client/src/forms/Users.js:122 +#: client/src/forms/Users.js:179 +msgid "Please save before assigning to organizations" +msgstr "保存しおから組織に割り圓おたす。" + +#: client/src/forms/Users.js:148 +msgid "Please save before assigning to teams" +msgstr "保存しおからチヌムに割り圓おたす。" + +#: client/src/forms/Workflows.js:185 +msgid "Please save before defining the workflow graph" +msgstr "保存しおからワヌクフロヌグラフを定矩したす。" + +#: client/src/forms/WorkflowMaker.js:65 +msgid "Please select a Credential." +msgstr "認蚌情報を遞択しおください。" + +#: client/src/forms/JobTemplates.js:150 +msgid "" +"Please select a Machine Credential or check the Prompt on launch option." +msgstr "マシン認蚌情報を遞択するか、たたは「起動プロンプト」オプションにチェックを付けたす。" + +#: client/src/shared/form-generator.js:1224 +msgid "Please select a number between" +msgstr "Please select a number between" + +#: client/src/shared/form-generator.js:1220 +msgid "Please select a number." +msgstr "数倀を遞択しおください。" + +#: client/src/shared/form-generator.js:1111 +#: client/src/shared/form-generator.js:1180 +#: client/src/shared/form-generator.js:1298 +#: client/src/shared/form-generator.js:1403 +msgid "Please select a value." +msgstr "倀を遞択しおください。" + +#: client/src/forms/JobTemplates.js:83 +msgid "Please select an Inventory or check the Prompt on launch option." +msgstr "むンベントリヌを遞択するか、たたは「起動プロンプト」オプションにチェックを付けおください。" + +#: client/src/forms/WorkflowMaker.js:86 +msgid "Please select an Inventory." +msgstr "むンベントリヌを遞択しおください。" + +#: client/src/shared/form-generator.js:1217 +msgid "Please select at least one value." +msgstr "1 ぀以䞊の倀を遞択しおください。" + +#: client/src/notifications/shared/type-change.service.js:27 +msgid "Port" +msgstr "ポヌト" + +#: client/src/forms/Credentials.js:257 +#: client/src/helpers/Credentials.js:36 +#: client/src/helpers/Credentials.js:60 +msgid "Private Key" +msgstr "秘密鍵" + +#: client/src/forms/Credentials.js:264 +msgid "Private Key Passphrase" +msgstr "秘密鍵のパスフレヌズ" + +#: client/src/forms/Credentials.js:279 +#: client/src/forms/Credentials.js:283 +msgid "Privilege Escalation" +msgstr "暩限昇栌" + +#: client/src/helpers/Credentials.js:90 +msgid "Privilege Escalation Password" +msgstr "暩限昇栌のパスワヌド" + +#: client/src/helpers/Credentials.js:89 +msgid "Privilege Escalation Username" +msgstr "暩限昇栌のナヌザヌ名" + +#: client/src/forms/JobTemplates.js:114 +#: client/src/forms/JobTemplates.js:97 +#: client/src/helpers/Credentials.js:103 +msgid "Project" +msgstr "プロゞェクト" + +#: client/src/helpers/Credentials.js:132 +msgid "Project (Tenant Name)" +msgstr "プロゞェクト (テナント名)" + +#: client/src/forms/Projects.js:75 +#: client/src/forms/Projects.js:83 +msgid "Project Base Path" +msgstr "プロゞェクトのベヌスパス" + +#: client/src/forms/Credentials.js:363 +msgid "Project Name" +msgstr "プロゞェクト名" + +#: client/src/forms/Projects.js:100 +msgid "Project Path" +msgstr "プロゞェクトパス" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:66 +msgid "Project Sync Failures" +msgstr "プロゞェクトの同期の倱敗" + +#: client/src/controllers/Projects.js:134 +msgid "Project lookup failed. GET returned:" +msgstr "プロゞェクトの怜玢に倱敗したした。GET で以䞋が返されたした:" + +#: client/src/dashboard/counts/dashboard-counts.directive.js:61 +#: client/src/lists/Projects.js:16 +#: client/src/lists/Projects.js:17 +msgid "Projects" +msgstr "プロゞェクト" + +#: client/src/forms/JobTemplates.js:159 +#: client/src/forms/JobTemplates.js:230 +#: client/src/forms/JobTemplates.js:261 +#: client/src/forms/JobTemplates.js:279 +#: client/src/forms/JobTemplates.js:369 +#: client/src/forms/JobTemplates.js:68 +#: client/src/forms/JobTemplates.js:92 +msgid "Prompt on launch" +msgstr "起動プロンプト" + +#: client/src/forms/JobTemplates.js:253 +#: client/src/forms/JobTemplates.js:271 +#: client/src/forms/WorkflowMaker.js:139 +#: client/src/forms/WorkflowMaker.js:154 +msgid "Provide a comma separated list of tags." +msgstr "カンマ区切りのタグの䞀芧を指定しおください。" + +#: client/src/forms/JobTemplates.js:221 +#: client/src/forms/WorkflowMaker.js:123 +msgid "" +"Provide a host pattern to further constrain the list of hosts that will be " +"managed or affected by the playbook. Multiple patterns can be separated by " +"%s %s or %s" +msgstr "" +"Playbook によっお管理されるか、たたは圱響されるホストの䞀芧をさらに制限するためのホストのパタヌンを指定しおください。耇数のパタヌンは %s " +"%s たたは %s で区切るこずができたす。" + +#: client/src/forms/JobTemplates.js:313 +#: client/src/forms/JobTemplates.js:321 +msgid "Provisioning Callback URL" +msgstr "プロビゞョニングコヌルバック URL" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:107 +msgid "RADIUS" +msgstr "RADIUS" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:4 +msgid "RECENT JOB RUNS" +msgstr "最近のゞョブ実行" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:42 +msgid "RECENTLY RUN JOBS" +msgstr "最近実行されたゞョブ" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:4 +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:52 +msgid "RECENTLY USED JOB TEMPLATES" +msgstr "最近䜿甚されたゞョブテンプレヌト" + +#: client/src/lists/Projects.js:76 +#: client/src/partials/jobs.html:15 +#: client/src/portal-mode/portal-mode-jobs.partial.html:12 +msgid "REFRESH" +msgstr "曎新" + +#: client/src/forms/JobTemplates.js:99 +msgid "RESET" +msgstr "リセット" + +#: client/src/helpers/Credentials.js:98 +msgid "RSA Private Key" +msgstr "RSA 秘密鍵" + +#: client/src/notifications/notificationTemplates.form.js:94 +#: client/src/notifications/notificationTemplates.form.js:99 +msgid "Recipient List" +msgstr "受信者リスト" + +#: client/src/bread-crumb/bread-crumb.partial.html:6 +#: client/src/lists/Projects.js:72 +msgid "Refresh the page" +msgstr "ペヌゞの曎新" + +#: client/src/lists/CompletedJobs.js:75 +msgid "Relaunch using the same parameters" +msgstr "同䞀パラメヌタヌによる起動" + +#: client/src/forms/Teams.js:144 +#: client/src/forms/Users.js:214 +msgid "Remove" +msgstr "削陀" + +#: client/src/forms/Projects.js:153 +msgid "Remove any local modifications prior to performing an update." +msgstr "曎新の実行前にロヌカルの倉曎を削陀したす。" + +#: client/src/license/license.partial.html:89 +msgid "Request License" +msgstr "ラむセンスの芁求" + +#: client/src/configuration/auth-form/sub-forms/auth-azure.form.js:41 +#: client/src/configuration/auth-form/sub-forms/auth-github-org.form.js:31 +#: client/src/configuration/auth-form/sub-forms/auth-github-team.form.js:31 +#: client/src/configuration/auth-form/sub-forms/auth-github.form.js:27 +#: client/src/configuration/auth-form/sub-forms/auth-google-oauth2.form.js:39 +#: client/src/configuration/auth-form/sub-forms/auth-ldap.form.js:87 +#: client/src/configuration/auth-form/sub-forms/auth-radius.form.js:32 +#: client/src/configuration/auth-form/sub-forms/auth-saml.form.js:59 +#: client/src/configuration/jobs-form/configuration-jobs.form.js:67 +#: client/src/configuration/system-form/configuration-system.form.js:41 +#: client/src/configuration/system-form/sub-forms/system-activity-stream.form.js:25 +#: client/src/configuration/system-form/sub-forms/system-logging.form.js:50 +#: client/src/configuration/system-form/sub-forms/system-misc.form.js:29 +#: client/src/configuration/ui-form/configuration-ui.form.js:35 +msgid "Reset All" +msgstr "すべおのリセット" + +#: client/src/lists/Projects.js:42 +msgid "Revision" +msgstr "リビゞョン" + +#: client/src/controllers/Projects.js:657 +msgid "Revision #" +msgstr "リビゞョン #" + +#: client/src/forms/Credentials.js:454 +#: client/src/forms/Inventories.js:120 +#: client/src/forms/Inventories.js:166 +#: client/src/forms/Organizations.js:88 +#: client/src/forms/Projects.js:249 +#: client/src/forms/Teams.js:137 +#: client/src/forms/Teams.js:99 +#: client/src/forms/Users.js:201 +msgid "Role" +msgstr "ロヌル" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:108 +msgid "SAML" +msgstr "SAML" + +#: client/src/controllers/Projects.js:657 +msgid "SCM Branch" +msgstr "SCM ブランチ" + +#: client/src/forms/Projects.js:154 +msgid "SCM Clean" +msgstr "SCM クリヌニング" + +#: client/src/forms/Projects.js:130 +msgid "SCM Credential" +msgstr "SCM 認蚌情報" + +#: client/src/forms/Projects.js:165 +msgid "SCM Delete" +msgstr "SCM 削陀" + +#: client/src/helpers/Credentials.js:93 +msgid "SCM Private Key" +msgstr "SCM 秘密鍵" + +#: client/src/forms/Projects.js:56 +msgid "SCM Type" +msgstr "SCM タむプ" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:49 +#: client/src/forms/Projects.js:175 +msgid "SCM Update" +msgstr "SCM 曎新" + +#: client/src/controllers/Projects.js:176 +msgid "SCM Update Cancel" +msgstr "SCM 曎新の取り消し" + +#: client/src/forms/Projects.js:145 +msgid "SCM Update Options" +msgstr "SCM 曎新オプション" + +#: client/src/controllers/Projects.js:543 +#: client/src/controllers/Projects.js:57 +msgid "SCM update currently running" +msgstr "珟圚実行䞭の SCM 曎新" + +#: client/src/main-menu/main-menu.partial.html:59 +msgid "SETTINGS" +msgstr "蚭定" + +#: client/src/login/loginModal/loginModal.partial.html:97 +msgid "SIGN IN" +msgstr "サむンむン" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.partial.html:2 +msgid "SIGN IN WITH" +msgstr "サむンむン:" + +#: client/src/app.js:513 +msgid "SOCKETS" +msgstr "゜ケット" + +#: client/src/helpers/Credentials.js:166 +msgid "SSH Key" +msgstr "SSH キヌ" + +#: client/src/forms/Credentials.js:255 +msgid "SSH key description" +msgstr "SSH キヌの説明" + +#: client/src/notifications/notificationTemplates.form.js:384 +msgid "SSL Connection" +msgstr "SSL 接続" + +#: client/src/forms/Credentials.js:120 +#: client/src/forms/Credentials.js:128 +msgid "STS Token" +msgstr "STS トヌクン" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:64 +msgid "SUCCESSFUL" +msgstr "成功" + +#: client/src/helpers/Credentials.js:149 +msgid "Satellite 6 Host" +msgstr "Satellite 6 ホスト" + +#: client/src/shared/form-generator.js:1687 +msgid "Save" +msgstr "保存" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:81 +#: client/src/configuration/configuration.controller.js:181 +#: client/src/configuration/configuration.controller.js:240 +#: client/src/configuration/system-form/configuration-system.controller.js:60 +msgid "Save changes" +msgstr "倉曎の保存" + +#: client/src/license/license.partial.html:122 +msgid "Save successful!" +msgstr "正垞に保存が実行されたした!" + +#: client/src/lists/Templates.js:92 +msgid "Schedule" +msgstr "スケゞュヌル" + +#: client/src/management-jobs/card/card.partial.html:26 +msgid "Schedule Management Job" +msgstr "管理ゞョブのスケゞュヌル" + +#: client/src/controllers/Projects.js:49 +msgid "Schedule future SCM updates" +msgstr "将来の SCM 曎新のスケゞュヌル" + +#: client/src/lists/Templates.js:95 +msgid "Schedule future job template runs" +msgstr "将来のゞョブテンプレヌト実行のスケゞュヌル" + +#: client/src/lists/ScheduledJobs.js:15 +msgid "Scheduled Jobs" +msgstr "スケゞュヌル枈みのゞョブ" + +#: client/src/partials/jobs.html:10 +msgid "Schedules" +msgstr "スケゞュヌル" + +#: client/src/inventory-scripts/inventory-scripts.form.js:59 +msgid "Script must begin with a hashbang sequence: i.e.... %s" +msgstr "スクリプトは hashbang シヌケンスで開始する必芁がありたす (䟋: .... %s)。" + +#: client/src/forms/Credentials.js:105 +msgid "Secret Key" +msgstr "シヌクレットキヌ" + +#: client/src/forms/Credentials.js:125 +msgid "" +"Security Token Service (STS) is a web service that enables you to request " +"temporary, limited-privilege credentials for AWS Identity and Access " +"Management (IAM) users." +msgstr "" +"セキュリティヌトヌクンサヌビス (STS) は、AWS Identity and Access Management (IAM) " +"ナヌザヌの䞀時的な、暩限の制限された認蚌情報を芁求できる web サヌビスです。" + +#: client/src/shared/form-generator.js:1691 +msgid "Select" +msgstr "遞択" + +#: client/src/configuration/jobs-form/configuration-jobs.controller.js:87 +#: client/src/configuration/ui-form/configuration-ui.controller.js:82 +msgid "Select commands" +msgstr "コマンドの遞択" + +#: client/src/forms/Projects.js:98 +msgid "" +"Select from the list of directories found in the Project Base Path. Together " +"the base path and the playbook directory provide the full path used to " +"locate playbooks." +msgstr "" +"プロゞェクトのベヌスパスにあるデむレクトリヌの䞀芧から遞択したす。ベヌスパスず Playbook ディレクトリヌは、Playbook " +"を芋぀けるために䜿甚される完党なパスを提䟛したす。" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:226 +msgid "Select group types" +msgstr "グルヌプタむプの遞択" + +#: client/src/forms/JobTemplates.js:152 +#: client/src/forms/WorkflowMaker.js:67 +msgid "" +"Select the credential you want the job to use when accessing the remote " +"hosts. Choose the credential containing the username and SSH key or " +"password that Ansible will need to log into the remote hosts." +msgstr "" +"リモヌトホストぞのアクセス時にゞョブで䜿甚する認蚌情報を遞択したす。Ansible がリモヌトホストにログむンするために必芁なナヌザヌ名および SSH " +"キヌたたはパスワヌドが含たれる認蚌情報を遞択しおください。 " + +#: client/src/forms/JobTemplates.js:85 +#: client/src/forms/WorkflowMaker.js:88 +msgid "Select the inventory containing the hosts you want this job to manage." +msgstr "このゞョブで管理するホストが含たれるむンベントリヌを遞択しおください。" + +#: client/src/forms/JobTemplates.js:130 +msgid "Select the playbook to be executed by this job." +msgstr "このゞョブで実行される Playbook を遞択しおください。" + +#: client/src/forms/JobTemplates.js:113 +msgid "" +"Select the project containing the playbook you want this job to execute." +msgstr "このゞョブで実行する Playbook が含たれるプロゞェクトを遞択しおください。" + +#: client/src/configuration/system-form/configuration-system.controller.js:167 +msgid "Select types" +msgstr "タむプの遞択" + +#: client/src/forms/JobTemplates.js:174 +msgid "" +"Selecting an optional cloud credential in the job template will pass along " +"the access credentials to the running playbook, allowing provisioning into " +"the cloud without manually passing parameters to the included modules." +msgstr "" +"ゞョブテンプレヌトでオプションのクラりド認蚌情報を遞択するず、アクセス認蚌情報が実行䞭の Playbook " +"に枡され、パラメヌタヌを組み蟌みモゞュヌルに手動で枡さなくおもクラりドぞのプロビゞョニングが蚱可されたす。" + +#: client/src/notifications/notificationTemplates.form.js:83 +msgid "Sender Email" +msgstr "送信者のメヌル" + +#: client/src/helpers/Credentials.js:97 +msgid "Service Account Email Address" +msgstr "サヌビスアカりントのメヌルアドレス" + +#: client/src/forms/JobTemplates.js:60 +#: client/src/forms/WorkflowMaker.js:108 +msgid "" +"Setting the type to %s will execute the playbook and store any scanned " +"facts for use with Tower's System Tracking feature." +msgstr "" +"タむプを %s に蚭定するず Playbook が実行され、Tower のシステムトラッキング機胜で䜿甚するスキャンされたファクトが保存されたす。" + +#: client/src/forms/JobTemplates.js:57 +msgid "Setting the type to %s will not execute the playbook." +msgstr "タむプを %s に蚭定するず Playbook は実行されたせん。" + +#: client/src/forms/WorkflowMaker.js:106 +msgid "" +"Setting the type to %s will not execute the playbook. Instead, %s will check " +"playbook syntax, test environment setup and report problems." +msgstr "" +"タむプを %s に蚭定するず Playbook は実行されたせん。その代わりに、%s は Playbook " +"構文、テスト環境セットアップおよびレポヌトの問題を怜査したす。" + +#: client/src/main-menu/main-menu.partial.html:147 +msgid "Settings" +msgstr "蚭定" + +#: client/src/shared/form-generator.js:843 +msgid "Show" +msgstr "衚瀺" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:34 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:45 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:56 +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:77 +msgid "Sign in with %s" +msgstr "%s でサむンむン" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:64 +msgid "Sign in with %s Organizations" +msgstr "%s 組織でサむンむン" + +#: client/src/login/loginModal/thirdPartySignOn/thirdPartySignOn.service.js:62 +msgid "Sign in with %s Teams" +msgstr "%s チヌムでサむンむン" + +#: client/src/forms/JobTemplates.js:266 +#: client/src/forms/JobTemplates.js:274 +#: client/src/forms/WorkflowMaker.js:149 +#: client/src/forms/WorkflowMaker.js:157 +msgid "Skip Tags" +msgstr "スキップタグ" + +#: client/src/forms/JobTemplates.js:272 +#: client/src/forms/WorkflowMaker.js:155 +msgid "" +"Skip tags are useful when you have a large playbook, and you want to skip " +"specific parts of a play or task." +msgstr "スキップタグは、Playbook のサむズが倧きく、プレむたたはタスクの特定の郚分をスキップする必芁がある堎合に圹立ちたす。" + +#: client/src/forms/Credentials.js:76 +msgid "Source Control" +msgstr "゜ヌスコントロヌル" + +#: client/src/forms/Projects.js:27 +msgid "Source Details" +msgstr "゜ヌス詳现" + +#: client/src/notifications/notificationTemplates.form.js:196 +msgid "Source Phone Number" +msgstr "発信元の電話番号" + +#: client/src/notifications/notificationTemplates.form.js:332 +msgid "Specify HTTP Headers in JSON format" +msgstr "JSON 圢匏での HTTP ヘッダヌの指定" + +#: client/src/forms/Credentials.js:285 +msgid "" +"Specify a method for %s operations. This is equivalent to specifying the %s " +"parameter, where %s could be %s" +msgstr "%s 操䜜のメ゜ッドを指定したす。これは %s を指定するこずに盞圓したす。%s は %s にするこずができたす。" + +#: client/src/setup-menu/setup-menu.partial.html:17 +msgid "" +"Split up your organization to associate content and control permissions for " +"groups." +msgstr "コンテンツを関連付け、グルヌプのパヌミッションを制埡するために組織を分割したす。" + +#: client/src/lists/PortalJobTemplates.js:42 +#: client/src/lists/Templates.js:87 +msgid "Start a job using this template" +msgstr "このテンプレヌトによるゞョブの開始" + +#: client/src/controllers/Projects.js:48 +#: client/src/controllers/Projects.js:540 +msgid "Start an SCM update" +msgstr "SCM 曎新の開始" + +#: client/src/dashboard/hosts/dashboard-hosts.list.js:49 +msgid "Status" +msgstr "ステヌタス" + +#: client/src/license/license.partial.html:121 +msgid "Submit" +msgstr "送信" + +#: client/src/license/license.partial.html:27 +msgid "Subscription" +msgstr "サブスクリプション" + +#: client/src/forms/Credentials.js:152 +#: client/src/forms/Credentials.js:163 +msgid "Subscription ID" +msgstr "サブスクリプション ID" + +#: client/src/forms/Credentials.js:162 +msgid "Subscription ID is an Azure construct, which is mapped to a username." +msgstr "サブスクリプション ID は、ナヌザヌ名にマップされる Azure コンストラクトです。" + +#: client/src/notifications/notifications.list.js:38 +msgid "Success" +msgstr "成功" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:77 +msgid "Successful" +msgstr "成功" + +#: client/src/controllers/Users.js:18 +msgid "System Administrator" +msgstr "システム管理者" + +#: client/src/controllers/Users.js:17 +msgid "System Auditor" +msgstr "システム監査者" + +#: client/src/app.js:341 +msgid "TEAMS" +msgstr "チヌム" + +#: client/src/main-menu/main-menu.partial.html:113 +#: client/src/main-menu/main-menu.partial.html:35 +msgid "TEMPLATES" +msgstr "テンプレヌト" + +#: client/src/dashboard/graphs/job-status/job-status-graph.directive.js:106 +msgid "TIME" +msgstr "時間" + +#: client/src/forms/JobTemplates.js:254 +#: client/src/forms/WorkflowMaker.js:140 +msgid "" +"Tags are useful when you have a large playbook, and you want to run a " +"specific part of a play or task." +msgstr "タグは、Playbook のサむズが倧きく、プレむたたはタスクの特定の郚分を実行する必芁がある堎合に圹立ちたす。" + +#: client/src/notifications/notificationTemplates.form.js:313 +msgid "Target URL" +msgstr "タヌゲット URL" + +#: client/src/forms/Credentials.js:461 +#: client/src/forms/Inventories.js:126 +#: client/src/forms/Inventories.js:173 +#: client/src/forms/Organizations.js:95 +#: client/src/forms/Projects.js:255 +msgid "Team Roles" +msgstr "チヌムロヌル" + +#: client/src/forms/Users.js:155 +#: client/src/lists/Teams.js:16 +#: client/src/lists/Teams.js:17 +#: client/src/setup-menu/setup-menu.partial.html:16 +msgid "Teams" +msgstr "チヌム" + +#: client/src/lists/Templates.js:16 +msgid "Template" +msgstr "テンプレヌト" + +#: client/src/lists/Templates.js:17 +#: client/src/lists/Templates.js:18 +msgid "Templates" +msgstr "テンプレヌト" + +#: client/src/forms/Credentials.js:335 +msgid "Tenant ID" +msgstr "テナント ID" + +#: client/src/notifications/notificationTemplates.list.js:65 +msgid "Test notification" +msgstr "テスト通知" + +#: client/src/shared/form-generator.js:1409 +msgid "That value was not found. Please enter or select a valid value." +msgstr "倀が芋぀かりたせんでした。有効な倀を入力たたは遞択しおください。" + +#: client/src/helpers/Credentials.js:105 +msgid "" +"The Project ID is the GCE assigned identification. It is constructed as two " +"words followed by a three digit number. Such as:" +msgstr "プロゞェクト ID は GCE によっお割り圓おられる識別情報です。これは、以䞋のように 2 語ずそれに続く 3 桁の数字で構成されたす。" + +#: client/src/controllers/Projects.js:693 +msgid "The SCM update process is running." +msgstr "SCM 曎新プロセスが実行䞭です。" + +#: client/src/forms/Credentials.js:191 +msgid "" +"The email address assigned to the Google Compute Engine %sservice account." +msgstr "Google Compute Engine %sサヌビスアカりントに割り圓おられたメヌルアドレス。" + +#: client/src/helpers/Credentials.js:141 +msgid "The host to authenticate with." +msgstr "認蚌するホスト。" + +#: client/src/helpers/Credentials.js:75 +msgid "The host value" +msgstr "ホスト倀" + +#: client/src/forms/JobTemplates.js:208 +msgid "" +"The number of parallel or simultaneous processes to use while executing the " +"playbook. 0 signifies the default value from the %sansible configuration " +"file%s." +msgstr "" +"Playbook の実行䞭に䜿甚する䞊列たたは同時プロセスの数です。0 は %sansible 蚭定ファむル%s のデフォルト倀を衚したす。" + +#: client/src/helpers/Credentials.js:74 +msgid "The project value" +msgstr "プロゞェクト倀" + +#: client/src/controllers/Projects.js:123 +msgid "" +"The selected project is not configured for SCM. To configure for SCM, edit " +"the project and provide SCM settings, and then run an update." +msgstr "" +"遞択されたプロゞェクトは SCM に察しお蚭定されおいたせん。SCM の蚭定を行うには、プロゞェクトを線集しお SCM " +"蚭定を指定しおから曎新を実行したす。" + +#: client/src/lists/PortalJobTemplates.js:20 +msgid "There are no job templates to display at this time" +msgstr "珟時点で衚瀺できるゞョブテンプレヌトはありたせん" + +#: client/src/lists/PortalJobs.js:20 +msgid "There are no jobs to display at this time" +msgstr "珟時点で衚瀺できるゞョブはありたせん" + +#: client/src/controllers/Projects.js:114 +msgid "" +"There is no SCM update information available for this project. An update has " +"not yet been completed. If you have not already done so, start an update " +"for this project." +msgstr "" +"このプロゞェクトに利甚できる SCM " +"曎新情報はありたせん。曎新はただ完了しおいたせん。ただ曎新を実行しおいない堎合は、このプロゞェクトの曎新を開始しおください。" + +#: client/src/configuration/configuration.controller.js:293 +msgid "There was an error resetting value. Returned status:" +msgstr "倀のリセット䞭に゚ラヌが発生したした。返されたステヌタス:" + +#: client/src/configuration/configuration.controller.js:424 +msgid "There was an error resetting values. Returned status:" +msgstr "倀のリセット䞭に゚ラヌが発生したした。返されたステヌタス:" + +#: client/src/helpers/Credentials.js:138 +msgid "" +"This is the tenant name. This value is usually the same as the username." +msgstr "これはテナント名です。通垞、この倀はナヌザヌ名ず同じです。" + +#: client/src/notifications/notifications.list.js:21 +msgid "" +"This list is populated by notification templates added from the " +"%sNotifications%s section" +msgstr "この䞀芧は、%s通知%s セクションで远加される通知テンプレヌトで事前に蚭定されたす。" + +#: client/src/notifications/notificationTemplates.form.js:199 +msgid "This must be of the form %s." +msgstr "これは %s 圢匏でなければなりたせん。" + +#: client/src/forms/Users.js:160 +msgid "This user is not a member of any teams" +msgstr "このナヌザヌはいずれのチヌムのメンバヌでもありたせん。" + +#: client/src/shared/form-generator.js:823 +#: client/src/shared/form-generator.js:948 +msgid "" +"This value does not match the password you entered previously. Please " +"confirm that password." +msgstr "この倀は、以前に入力されたパスワヌドず䞀臎したせん。パスワヌドを確認しおください。" + +#: client/src/configuration/configuration.controller.js:449 +msgid "" +"This will reset all configuration values to their factory defaults. Are you " +"sure you want to proceed?" +msgstr "これにより、すべおの蚭定倀が出荷時の蚭定にリセットされたす。本圓に続行しおもよいですか?" + +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:14 +msgid "Time" +msgstr "時間" + +#: client/src/license/license.partial.html:45 +msgid "Time Remaining" +msgstr "残りの時間" + +#: client/src/forms/Projects.js:191 +msgid "" +"Time in seconds to consider a project to be current. During job runs and " +"callbacks the task system will evaluate the timestamp of the latest project " +"update. If it is older than Cache Timeout, it is not considered current, and " +"a new project update will be performed." +msgstr "" +"プロゞェクトが最新であるこずを刀別するための時間 (秒単䜍) " +"です。ゞョブ実行およびコヌルバック時に、タスクシステムは最新のプロゞェクト曎新のタむムスタンプを評䟡したす。これがキャッシュタむムアりトよりも叀い堎合には、最新ずは芋なされず、新芏のプロゞェクト曎新が実行されたす。" + +#: client/src/forms/Credentials.js:126 +msgid "" +"To learn more about the IAM STS Token, refer to the %sAmazon documentation%s." +"" +msgstr "IAM STS トヌクンに぀いおの詳现は、%sAmazon ドキュメント%s を参照しおください。" + +#: client/src/shared/form-generator.js:848 +msgid "Toggle the display of plaintext." +msgstr "プレヌンテキストの衚瀺を切り替えたす。" + +#: client/src/notifications/shared/type-change.service.js:34 +#: client/src/notifications/shared/type-change.service.js:40 +msgid "Token" +msgstr "トヌクン" + +#: client/src/forms/Credentials.js:61 +#: client/src/forms/Credentials.js:85 +#: client/src/forms/Teams.js:132 +#: client/src/forms/Users.js:196 +#: client/src/forms/WorkflowMaker.js:34 +#: client/src/lists/CompletedJobs.js:50 +#: client/src/lists/Credentials.js:39 +#: client/src/lists/Projects.js:48 +#: client/src/lists/ScheduledJobs.js:42 +#: client/src/lists/Templates.js:31 +#: client/src/notifications/notificationTemplates.form.js:54 +#: client/src/notifications/notificationTemplates.list.js:38 +#: client/src/notifications/notifications.list.js:31 +msgid "Type" +msgstr "タむプ" + +#: client/src/forms/Credentials.js:25 +#: client/src/notifications/notificationTemplates.form.js:23 +msgid "Type Details" +msgstr "タむプの詳现" + +#: client/src/notifications/notificationTemplates.form.js:212 +#: client/src/notifications/notificationTemplates.form.js:97 +msgid "Type an option on each line." +msgstr "各行にオプションを入力したす。" + +#: client/src/notifications/notificationTemplates.form.js:141 +#: client/src/notifications/notificationTemplates.form.js:158 +#: client/src/notifications/notificationTemplates.form.js:370 +msgid "Type an option on each line. The pound symbol (#) is not required." +msgstr "各行にオプションを入力したす。シャヌプ蚘号 (#) は䞍芁です。" + +#: client/src/controllers/Projects.js:402 +#: client/src/controllers/Projects.js:684 +msgid "URL popover text" +msgstr "URL ポップオヌバヌテキスト" + +#: client/src/login/loginModal/loginModal.partial.html:49 +msgid "USERNAME" +msgstr "ナヌザヌ名" + +#: client/src/app.js:365 +msgid "USERS" +msgstr "ナヌザヌ" + +#: client/src/controllers/Projects.js:220 +msgid "Update Not Found" +msgstr "曎新が芋぀かりたせん" + +#: client/src/controllers/Projects.js:693 +msgid "Update in Progress" +msgstr "曎新が進行䞭です" + +#: client/src/forms/Projects.js:172 +msgid "Update on Launch" +msgstr "起動時の曎新" + +#: client/src/license/license.partial.html:71 +msgid "Upgrade" +msgstr "アップグレヌド" + +#: client/src/notifications/notificationTemplates.form.js:404 +msgid "Use SSL" +msgstr "SSL の䜿甚" + +#: client/src/notifications/notificationTemplates.form.js:397 +msgid "Use TLS" +msgstr "TLS の䜿甚" + +#: client/src/forms/Credentials.js:77 +msgid "" +"Used to check out and synchronize playbook repositories with a remote source " +"control management system such as Git, Subversion (svn), or Mercurial (hg). " +"These credentials are used by Projects." +msgstr "" +"Git、Subversion (svn)、たたは Mercurial (hg) などのリモヌト゜ヌスコントロヌル管理システムで Playbook " +"リポゞトリヌをチェックアりトし、同期するために䜿甚されたす。これらの認蚌情報はプロゞェクトで䜿甚されたす。" + +#: client/src/forms/Credentials.js:449 +#: client/src/forms/Inventories.js:115 +#: client/src/forms/Inventories.js:161 +#: client/src/forms/Organizations.js:83 +#: client/src/forms/Projects.js:244 +#: client/src/forms/Teams.js:94 +msgid "User" +msgstr "ナヌザヌ" + +#: client/src/forms/Users.js:94 +msgid "User Type" +msgstr "ナヌザヌタむプ" + +#: client/src/forms/Users.js:49 +#: client/src/helpers/Credentials.js:117 +#: client/src/helpers/Credentials.js:32 +#: client/src/helpers/Credentials.js:56 +#: client/src/helpers/Credentials.js:88 +#: client/src/lists/Users.js:37 +#: client/src/notifications/notificationTemplates.form.js:64 +msgid "Username" +msgstr "ナヌザヌ名" + +#: client/src/forms/Credentials.js:81 +msgid "" +"Usernames, passwords, and access keys for authenticating to the specified " +"cloud or infrastructure provider. These are used for dynamic inventory " +"sources and for cloud provisioning and deployment in playbook runs." +msgstr "" +"指定されたクラりドたたはむンフラストラクチャヌプロバむダヌに察する認蚌を行うためのナヌザヌ名、パスワヌド、およびアクセスキヌです。これらは動的なむンベントリヌ゜ヌスおよび " +"Playbook 実行のクラりドプロビゞョニングおよびデプロむメントに䜿甚されたす。" + +#: client/src/forms/Teams.js:75 +#: client/src/lists/Users.js:26 +#: client/src/lists/Users.js:27 +#: client/src/setup-menu/setup-menu.partial.html:10 +msgid "Users" +msgstr "ナヌザヌ" + +#: client/src/dashboard/lists/job-templates/job-templates-list.partial.html:7 +#: client/src/dashboard/lists/jobs/jobs-list.partial.html:7 +msgid "VIEW ALL" +msgstr "すべおを衚瀺" + +#: client/src/main-menu/main-menu.partial.html:75 +msgid "VIEW DOCUMENTATION" +msgstr "ドキュメントの衚瀺" + +#: client/src/main-menu/main-menu.partial.html:51 +msgid "VIEW USER PAGE FOR {{ $root.current_user.username | uppercase }}" +msgstr "{{ $root.current_user.username | uppercase }} のナヌザヌペヌゞの衚瀺" + +#: client/src/license/license.partial.html:10 +msgid "Valid License" +msgstr "有効なラむセンス" + +#: client/src/forms/Inventories.js:55 +msgid "Variables" +msgstr "倉数" + +#: client/src/forms/Credentials.js:389 +msgid "Vault Password" +msgstr "Vault パスワヌド" + +#: client/src/forms/JobTemplates.js:235 +#: client/src/forms/JobTemplates.js:242 +msgid "Verbosity" +msgstr "詳现" + +#: client/src/about/about.controller.js:24 +#: client/src/license/license.partial.html:15 +msgid "Version" +msgstr "バヌゞョン" + +#: client/src/dashboard/graphs/dashboard-graphs.partial.html:58 +#: client/src/inventory-scripts/inventory-scripts.list.js:65 +#: client/src/lists/Credentials.js:80 +#: client/src/lists/Inventories.js:85 +#: client/src/lists/Teams.js:69 +#: client/src/lists/Templates.js:117 +#: client/src/lists/Users.js:78 +#: client/src/notifications/notificationTemplates.list.js:80 +msgid "View" +msgstr "衚瀺" + +#: client/src/main-menu/main-menu.partial.html:173 +msgid "View Documentation" +msgstr "ドキュメントの衚瀺" + +#: client/src/forms/Inventories.js:65 +msgid "View JSON examples at %s" +msgstr "JSON サンプルを %s に衚瀺" + +#: client/src/forms/JobTemplates.js:450 +#: client/src/forms/Workflows.js:163 +#: client/src/shared/form-generator.js:1715 +msgid "View Survey" +msgstr "Survey の衚瀺" + +#: client/src/forms/Inventories.js:66 +msgid "View YAML examples at %s" +msgstr "YAML サンプルを %s に衚瀺" + +#: client/src/setup-menu/setup-menu.partial.html:47 +msgid "View Your License" +msgstr "ラむセンスの衚瀺" + +#: client/src/setup-menu/setup-menu.partial.html:48 +msgid "View and edit your license information." +msgstr "ラむセンス情報を衚瀺し、線集したす。" + +#: client/src/lists/Credentials.js:82 +msgid "View credential" +msgstr "認蚌情報の衚瀺" + +#: client/src/setup-menu/setup-menu.partial.html:60 +msgid "View information about this version of Ansible Tower." +msgstr "本バヌゞョンの Ansible Tower 情報を衚瀺したす。" + +#: client/src/lists/Inventories.js:87 +msgid "View inventory" +msgstr "むンベントリヌの衚瀺" + +#: client/src/inventory-scripts/inventory-scripts.list.js:67 +msgid "View inventory script" +msgstr "むンベントリヌスクリプトの衚瀺" + +#: client/src/notifications/notificationTemplates.list.js:82 +msgid "View notification" +msgstr "通知の衚瀺" + +#: client/src/lists/Teams.js:72 +msgid "View team" +msgstr "チヌムの衚瀺" + +#: client/src/lists/Templates.js:119 +msgid "View template" +msgstr "テンプレヌトの衚瀺" + +#: client/src/lists/Projects.js:108 +msgid "View the project" +msgstr "プロゞェクトの衚瀺" + +#: client/src/lists/ScheduledJobs.js:73 +msgid "View the schedule" +msgstr "スケゞュヌルの衚瀺" + +#: client/src/lists/Users.js:81 +msgid "View user" +msgstr "ナヌザヌの衚瀺" + +#: client/src/forms/Workflows.js:22 +msgid "WORKFLOW" +msgstr "ワヌクフロヌ" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:68 +#: client/src/configuration/configuration.controller.js:168 +#: client/src/configuration/configuration.controller.js:230 +#: client/src/configuration/system-form/configuration-system.controller.js:47 +msgid "Warning: Unsaved Changes" +msgstr "譊告: 倉曎が保存されおいたせん" + +#: client/src/login/loginModal/loginModal.partial.html:17 +msgid "Welcome to Ansible Tower!  Please sign in." +msgstr "Ansible Tower ぞようこそ!  ã‚µã‚€ãƒ³ã‚€ãƒ³ã—おください。" + +#: client/src/license/license.partial.html:78 +msgid "" +"Welcome to Ansible Tower! Please complete the steps below to acquire a " +"license." +msgstr "Ansible Tower ぞようこそ! ラむセンスを取埗するために以䞋のステップを完了しおください。" + +#: client/src/forms/JobTemplates.js:55 +#: client/src/forms/WorkflowMaker.js:104 +msgid "" +"When this template is submitted as a job, setting the type to %s will " +"execute the playbook, running tasks on the selected hosts." +msgstr "" +"このテンプレヌトがゞョブずしお送信される堎合、タむプを %s に蚭定するず Playbook が実行され、遞択されたホストでタスクが実行されたす。" + +#: client/src/forms/Workflows.js:187 +#: client/src/shared/form-generator.js:1719 +msgid "Workflow Editor" +msgstr "ワヌクフロヌ゚ディタヌ" + +#: client/src/lists/Templates.js:70 +msgid "Workflow Job Template" +msgstr "ワヌクフロヌゞョブテンプレヌト" + +#: client/src/controllers/Projects.js:468 +msgid "You do not have access to view this property" +msgstr "これを適切に衚瀺するためのアクセス暩がありたせん。" + +#: client/src/controllers/Projects.js:284 +msgid "You do not have permission to add a project." +msgstr "プロゞェクトを远加するパヌミッションがありたせん。" + +#: client/src/controllers/Users.js:141 +msgid "You do not have permission to add a user." +msgstr "ナヌザヌを远加するパヌミッションがありたせん。" + +#: client/src/configuration/auth-form/configuration-auth.controller.js:67 +#: client/src/configuration/configuration.controller.js:167 +#: client/src/configuration/configuration.controller.js:229 +#: client/src/configuration/system-form/configuration-system.controller.js:46 +msgid "" +"You have unsaved changes. Would you like to proceed without " +"saving?" +msgstr "保存されおいない倉曎がありたす。倉曎せずに次に進みたすか?" + +#: client/src/shared/form-generator.js:960 +msgid "Your password must be %d characters long." +msgstr "パスワヌドの長さは %d 文字にしおください。" + +#: client/src/shared/form-generator.js:965 +msgid "Your password must contain a lowercase letter." +msgstr "パスワヌドには小文字を含める必芁がありたす。" + +#: client/src/shared/form-generator.js:975 +msgid "Your password must contain a number." +msgstr "パスワヌドには数字を含める必芁がありたす。" + +#: client/src/shared/form-generator.js:970 +msgid "Your password must contain an uppercase letter." +msgstr "パスワヌドには倧文字を含める必芁がありたす。" + +#: client/src/shared/form-generator.js:980 +msgid "Your password must contain one of the following characters: %s" +msgstr "パスワヌドには以䞋の文字のいずれかを䜿甚する必芁がありたす: %s" + +#: client/src/controllers/Projects.js:176 +msgid "Your request to cancel the update was submitted to the task manager." +msgstr "曎新を取り消す芁求がタスクマネヌゞャヌに送信されたした。" + +#: client/src/login/loginModal/loginModal.partial.html:22 +msgid "Your session timed out due to inactivity. Please sign in." +msgstr "アむドル時間によりセッションがタむムアりトしたした。サむンむンしおください。" + +#: client/src/shared/form-generator.js:1224 +msgid "and" +msgstr "and" + +#: client/src/forms/Credentials.js:139 +#: client/src/forms/Credentials.js:362 +msgid "set in helpers/credentials" +msgstr "ヘルパヌ/認蚌情報で蚭定" + +#: client/src/forms/Credentials.js:379 +msgid "v2 URLs%s - leave blank" +msgstr "v2 URL%s - 空癜にする" + +#: client/src/forms/Credentials.js:380 +msgid "v3 default%s - set to 'default'" +msgstr "v3 デフォルト%s - 「デフォルト」に蚭定" + +#: client/src/forms/Credentials.js:381 +msgid "v3 multi-domain%s - your domain name" +msgstr "v3 マルチドメむン%s - ドメむン名" + diff --git a/awx/locale/ja/LC_MESSAGES/django.po b/awx/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000000..3d734acfd1 --- /dev/null +++ b/awx/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,3984 @@ +# asasaki , 2017. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-15 12:05+0530\n" +"PO-Revision-Date: 2017-01-10 04:55+0000\n" +"Last-Translator: asasaki \n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"X-Generator: Zanata 3.9.6\n" +"Plural-Forms: nplurals=1; plural=0\n" + +#: api/authentication.py:67 +msgid "Invalid token header. No credentials provided." +msgstr "無効なトヌクンヘッダヌです。認蚌情報が提䟛されおいたせん。" + +#: api/authentication.py:70 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "無効なトヌクンヘッダヌです。トヌクン文字列にはスペヌスを含めるこずができたせん。" + +#: api/authentication.py:105 +msgid "User inactive or deleted" +msgstr "ナヌザヌが非アクティブか、たたは削陀されおいたす" + +#: api/authentication.py:161 +msgid "Invalid task token" +msgstr "無効なタスクトヌクン" + +#: api/conf.py:12 +msgid "Idle Time Force Log Out" +msgstr "アむドル時間、匷制ログアりト" + +#: api/conf.py:13 +msgid "" +"Number of seconds that a user is inactive before they will need to login " +"again." +msgstr "ナヌザヌが再ログむンするたでに非アクティブな状態になる秒数です。" + +#: api/conf.py:14 +#: api/conf.py:24 +#: api/conf.py:33 +#: sso/conf.py:124 +#: sso/conf.py:135 +#: sso/conf.py:147 +#: sso/conf.py:162 +msgid "Authentication" +msgstr "認蚌" + +#: api/conf.py:22 +msgid "Maximum number of simultaneous logins" +msgstr "同時ログむンの最倧数" + +#: api/conf.py:23 +msgid "" +"Maximum number of simultaneous logins a user may have. To disable enter -1." +msgstr "ナヌザヌが実行できる同時ログむンの最倧数です。無効にするには -1 を入力したす。" + +#: api/conf.py:31 +msgid "Enable HTTP Basic Auth" +msgstr "HTTP Basic 認蚌の有効化" + +#: api/conf.py:32 +msgid "Enable HTTP Basic Auth for the API Browser." +msgstr "API ブラりザヌの HTTP Basic 認蚌を有効にしたす。" + +#: api/generics.py:446 +msgid "\"id\" is required to disassociate" +msgstr "関連付けを解陀するには 「id」が必芁です" + +#: api/metadata.py:50 +msgid "Database ID for this {}." +msgstr "この{}のデヌタベヌス ID。" + +#: api/metadata.py:51 +msgid "Name of this {}." +msgstr "この{}の名前。" + +#: api/metadata.py:52 +msgid "Optional description of this {}." +msgstr "この{}のオプションの説明。" + +#: api/metadata.py:53 +msgid "Data type for this {}." +msgstr "この{}のデヌタタむプ。" + +#: api/metadata.py:54 +msgid "URL for this {}." +msgstr "この{}の URL。" + +#: api/metadata.py:55 +msgid "Data structure with URLs of related resources." +msgstr "関連リ゜ヌスの URL のあるデヌタ構造。" + +#: api/metadata.py:56 +msgid "Data structure with name/description for related resources." +msgstr "関連リ゜ヌスの名前/説明のあるデヌタ構造。" + +#: api/metadata.py:57 +msgid "Timestamp when this {} was created." +msgstr "この {} の䜜成時のタむムスタンプ。" + +#: api/metadata.py:58 +msgid "Timestamp when this {} was last modified." +msgstr "この {} の最終倉曎時のタむムスタンプ。" + +#: api/parsers.py:31 +#, python-format +msgid "JSON parse error - %s" +msgstr "JSON パヌス゚ラヌ: %s" + +#: api/serializers.py:248 +msgid "Playbook Run" +msgstr "Playbook 実行" + +#: api/serializers.py:249 +msgid "Command" +msgstr "コマンド" + +#: api/serializers.py:250 +msgid "SCM Update" +msgstr "SCM 曎新" + +#: api/serializers.py:251 +msgid "Inventory Sync" +msgstr "むンベントリヌの同期" + +#: api/serializers.py:252 +msgid "Management Job" +msgstr "管理ゞョブ" + +#: api/serializers.py:253 +msgid "Workflow Job" +msgstr "ワヌクフロヌゞョブ" + +#: api/serializers.py:655 +#: api/serializers.py:713 +#: api/views.py:3914 +#, python-format +msgid "" +"Standard Output too large to display (%(text_size)d bytes), only download " +"supported for sizes over %(supported_size)d bytes" +msgstr "" +"暙準出力が倧きすぎお衚瀺できたせん (%(text_size)d バむト)。サむズが %(supported_size)d " +"バむトを超える堎合はダりンロヌドのみがサポヌトされたす。" + +#: api/serializers.py:728 +msgid "Write-only field used to change the password." +msgstr "パスワヌドを倉曎するために䜿甚される曞き蟌み専甚フィヌルド。" + +#: api/serializers.py:730 +msgid "Set if the account is managed by an external service" +msgstr "アカりントが倖郚サヌビスで管理される堎合に蚭定されたす" + +#: api/serializers.py:754 +msgid "Password required for new User." +msgstr "新芏ナヌザヌのパスワヌドを入力しおください。" + +#: api/serializers.py:838 +#, python-format +msgid "Unable to change %s on user managed by LDAP." +msgstr "LDAP で管理されたナヌザヌの %s を倉曎できたせん。" + +#: api/serializers.py:990 +msgid "Organization is missing" +msgstr "組織がありたせん" + +#: api/serializers.py:996 +msgid "Array of playbooks available within this project." +msgstr "このプロゞェクト内で利甚可胜な䞀連の Playbook。" + +#: api/serializers.py:1178 +#, python-format +msgid "Invalid port specification: %s" +msgstr "無効なポヌト指定: %s" + +#: api/serializers.py:1206 +#: main/validators.py:192 +msgid "Must be valid JSON or YAML." +msgstr "有効な JSON たたは YAML である必芁がありたす。" + +#: api/serializers.py:1263 +msgid "Invalid group name." +msgstr "無効なグルヌプ名。" + +#: api/serializers.py:1338 +msgid "" +"Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" +msgstr "スクリプトは hashbang シヌケンスで開始する必芁がありたす (䟋: .... #!/usr/bin/env python)" + +#: api/serializers.py:1391 +msgid "If 'source' is 'custom', 'source_script' must be provided." +msgstr "「source」が「custom」である堎合、「source_script」を指定する必芁がありたす。" + +#: api/serializers.py:1395 +msgid "" +"The 'source_script' does not belong to the same organization as the " +"inventory." +msgstr "「source_script」はむンベントリヌず同じ組織に属したせん。" + +#: api/serializers.py:1397 +msgid "'source_script' doesn't exist." +msgstr "「source_script」は存圚したせん。" + +#: api/serializers.py:1756 +msgid "" +"Write-only field used to add user to owner role. If provided, do not give " +"either team or organization. Only valid for creation." +msgstr "" +"ナヌザヌを所有者ロヌルに远加するために䜿甚される曞き蟌み専甚フィヌルドです。提䟛されおいる堎合は、チヌムたたは組織のいずれも指定しないでください。䜜成時にのみ有効です。" + +#: api/serializers.py:1761 +msgid "" +"Write-only field used to add team to owner role. If provided, do not give " +"either user or organization. Only valid for creation." +msgstr "" +"チヌムを所有者ロヌルに远加するために䜿甚される曞き蟌み専甚フィヌルドです。提䟛されおいる堎合は、ナヌザヌたたは組織のいずれも指定しないでください。䜜成時にのみ有効です。" + +#: api/serializers.py:1766 +msgid "" +"Inherit permissions from organization roles. If provided on creation, do not " +"give either user or team." +msgstr "組織ロヌルからパヌミッションを継承したす。䜜成時に提䟛される堎合は、ナヌザヌたたはチヌムのいずれも指定しないでください。" + +#: api/serializers.py:1782 +msgid "Missing 'user', 'team', or 'organization'." +msgstr "「user」、「team」、たたは「organization」がありたせん。" + +#: api/serializers.py:1795 +msgid "" +"Credential organization must be set and match before assigning to a team" +msgstr "認蚌情報の組織が蚭定され、䞀臎しおいる状態でチヌムに割り圓おる必芁がありたす。" + +#: api/serializers.py:1887 +msgid "This field is required." +msgstr "このフィヌルドは必須です。" + +#: api/serializers.py:1889 +#: api/serializers.py:1891 +msgid "Playbook not found for project." +msgstr "プロゞェクトの Playbook が芋぀かりたせん。" + +#: api/serializers.py:1893 +msgid "Must select playbook for project." +msgstr "プロゞェクトの Playbook を遞択しおください。" + +#: api/serializers.py:1957 +#: main/models/jobs.py:280 +msgid "Scan jobs must be assigned a fixed inventory." +msgstr "スキャンゞョブに固定むンベントリヌが割り圓おられおいる必芁がありたす。" + +#: api/serializers.py:1959 +#: main/models/jobs.py:283 +msgid "Job types 'run' and 'check' must have assigned a project." +msgstr "ゞョブタむプ「run」および「check」によりプロゞェクトが割り圓おられおいる必芁がありたす。" + +#: api/serializers.py:1962 +msgid "Survey Enabled cannot be used with scan jobs." +msgstr "Survey Enabled はスキャンゞョブで䜿甚できたせん。" + +#: api/serializers.py:2024 +msgid "Invalid job template." +msgstr "無効なゞョブテンプレヌト。" + +#: api/serializers.py:2109 +msgid "Credential not found or deleted." +msgstr "認蚌情報が芋぀からないか、たたは削陀されたした。" + +#: api/serializers.py:2111 +msgid "Job Template Project is missing or undefined." +msgstr "ゞョブテンプレヌトプロゞェクトが芋぀からないか、たたは定矩されおいたせん。" + +#: api/serializers.py:2113 +msgid "Job Template Inventory is missing or undefined." +msgstr "ゞョブテンプレヌトむンベントリヌが芋぀からないか、たたは定矩されおいたせん。" + +#: api/serializers.py:2398 +#, python-format +msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." +msgstr "%(job_type)s は有効なゞョブタむプではありたせん。%(choices)s を遞択できたす。" + +#: api/serializers.py:2403 +msgid "Workflow job template is missing during creation." +msgstr "ワヌクフロヌゞョブテンプレヌトが䜜成時に芋぀かりたせん。" + +#: api/serializers.py:2408 +#, python-format +msgid "Cannot nest a %s inside a WorkflowJobTemplate" +msgstr "ワヌクフロヌゞョブテンプレヌト内に %s をネストできたせん" + +#: api/serializers.py:2646 +#, python-format +msgid "Job Template '%s' is missing or undefined." +msgstr "ゞョブテンプレヌト「%s」が芋぀からない、たたは定矩されおいたせん。" + +#: api/serializers.py:2672 +msgid "Must be a valid JSON or YAML dictionary." +msgstr "有効な JSON たたは YAML 蟞曞でなければなりたせん。" + +#: api/serializers.py:2817 +msgid "" +"Missing required fields for Notification Configuration: notification_type" +msgstr "通知蚭定の必須フィヌルドがありたせん: notification_type" + +#: api/serializers.py:2840 +msgid "No values specified for field '{}'" +msgstr "フィヌルド '{}' に倀が指定されおいたせん" + +#: api/serializers.py:2845 +msgid "Missing required fields for Notification Configuration: {}." +msgstr "通知蚭定の必須フィヌルドがありたせん: {}。" + +#: api/serializers.py:2848 +msgid "Configuration field '{}' incorrect type, expected {}." +msgstr "蚭定フィヌルド '{}' のタむプが正しくありたせん。{} が予期されたした。" + +#: api/serializers.py:2901 +msgid "Inventory Source must be a cloud resource." +msgstr "むンベントリヌ゜ヌスはクラりドリ゜ヌスでなければなりたせん。" + +#: api/serializers.py:2903 +msgid "Manual Project can not have a schedule set." +msgstr "手動プロゞェクトにはスケゞュヌルを蚭定できたせん。" + +#: api/serializers.py:2925 +msgid "" +"DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" +msgstr "DTSTART が rrule で必芁です。倀は、DSTART:YYYYMMDDTHHMMSSZ に䞀臎する必芁がありたす。" + +#: api/serializers.py:2927 +msgid "Multiple DTSTART is not supported." +msgstr "耇数の DTSTART はサポヌトされたせん。" + +#: api/serializers.py:2929 +msgid "RRULE require in rrule." +msgstr "RRULE が rrule で必芁です。" + +#: api/serializers.py:2931 +msgid "Multiple RRULE is not supported." +msgstr "耇数の RRULE はサポヌトされたせん。" + +#: api/serializers.py:2933 +msgid "INTERVAL required in rrule." +msgstr "INTERVAL が rrule で必芁です。" + +#: api/serializers.py:2935 +msgid "TZID is not supported." +msgstr "TZID はサポヌトされたせん。" + +#: api/serializers.py:2937 +msgid "SECONDLY is not supported." +msgstr "SECONDLY はサポヌトされたせん。" + +#: api/serializers.py:2939 +msgid "Multiple BYMONTHDAYs not supported." +msgstr "耇数の BYMONTHDAY はサポヌトされたせん。" + +#: api/serializers.py:2941 +msgid "Multiple BYMONTHs not supported." +msgstr "耇数の BYMONTH はサポヌトされたせん。" + +#: api/serializers.py:2943 +msgid "BYDAY with numeric prefix not supported." +msgstr "数字の接頭蟞のある BYDAY はサポヌトされたせん。" + +#: api/serializers.py:2945 +msgid "BYYEARDAY not supported." +msgstr "BYYEARDAY はサポヌトされたせん。" + +#: api/serializers.py:2947 +msgid "BYWEEKNO not supported." +msgstr "BYWEEKNO はサポヌトされたせん。" + +#: api/serializers.py:2951 +msgid "COUNT > 999 is unsupported." +msgstr "COUNT > 999 はサポヌトされたせん。" + +#: api/serializers.py:2955 +msgid "rrule parsing failed validation." +msgstr "rrule の構文解析で怜蚌に倱敗したした。" + +#: api/serializers.py:2973 +msgid "" +"A summary of the new and changed values when an object is created, updated, " +"or deleted" +msgstr "オブゞェクトの䜜成、曎新たたは削陀時の新芏倀および倉曎された倀の抂芁" + +#: api/serializers.py:2975 +msgid "" +"For create, update, and delete events this is the object type that was " +"affected. For associate and disassociate events this is the object type " +"associated or disassociated with object2." +msgstr "" +"䜜成、曎新、および削陀むベントの堎合、これは圱響を受けたオブゞェクトタむプになりたす。関連付けおよび関連付け解陀むベントの堎合、これは object2 " +"に関連付けられたか、たたはその関連付けが解陀されたオブゞェクトタむプになりたす。" + +#: api/serializers.py:2978 +msgid "" +"Unpopulated for create, update, and delete events. For associate and " +"disassociate events this is the object type that object1 is being associated " +"with." +msgstr "" +"䜜成、曎新、および削陀むベントの堎合は蚭定されたせん。関連付けおよび関連付け解陀むベントの堎合、これは object1 " +"が関連付けられるオブゞェクトタむプになりたす。" + +#: api/serializers.py:2981 +msgid "The action taken with respect to the given object(s)." +msgstr "指定されたオブゞェクトに぀いお実行されたアクション。" + +#: api/serializers.py:3081 +msgid "Unable to login with provided credentials." +msgstr "提䟛される認蚌情報でログむンできたせん。" + +#: api/serializers.py:3083 +msgid "Must include \"username\" and \"password\"." +msgstr "「username」および「password」を含める必芁がありたす。" + +#: api/views.py:96 +msgid "Your license does not allow use of the activity stream." +msgstr "お䜿いのラむセンスではアクティビティヌストリヌムを䜿甚できたせん。" + +#: api/views.py:106 +msgid "Your license does not permit use of system tracking." +msgstr "お䜿いのラむセンスではシステムトラッキングを䜿甚できたせん。" + +#: api/views.py:116 +msgid "Your license does not allow use of workflows." +msgstr "お䜿いのラむセンスではワヌクフロヌを䜿甚できたせん。" + +#: api/views.py:124 +#: templates/rest_framework/api.html:28 +msgid "REST API" +msgstr "REST API" + +#: api/views.py:131 +#: templates/rest_framework/api.html:4 +msgid "Ansible Tower REST API" +msgstr "Ansible Tower REST API" + +#: api/views.py:147 +msgid "Version 1" +msgstr "バヌゞョン 1" + +#: api/views.py:198 +msgid "Ping" +msgstr "Ping" + +#: api/views.py:227 +#: conf/apps.py:12 +msgid "Configuration" +msgstr "蚭定" + +#: api/views.py:280 +msgid "Invalid license data" +msgstr "無効なラむセンスデヌタ" + +#: api/views.py:282 +msgid "Missing 'eula_accepted' property" +msgstr "'eula_accepted' プロパティヌがありたせん" + +#: api/views.py:286 +msgid "'eula_accepted' value is invalid" +msgstr "'eula_accepted' 倀は無効です。" + +#: api/views.py:289 +msgid "'eula_accepted' must be True" +msgstr "'eula_accepted' は True でなければなりたせん" + +#: api/views.py:296 +msgid "Invalid JSON" +msgstr "無効な JSON" + +#: api/views.py:304 +msgid "Invalid License" +msgstr "無効なラむセンス" + +#: api/views.py:314 +msgid "Invalid license" +msgstr "無効なラむセンス" + +#: api/views.py:322 +#, python-format +msgid "Failed to remove license (%s)" +msgstr "ラむセンスの削陀に倱敗したした (%s)" + +#: api/views.py:327 +msgid "Dashboard" +msgstr "ダッシュボヌド" + +#: api/views.py:433 +msgid "Dashboard Jobs Graphs" +msgstr "ダッシュボヌドのゞョブグラフ" + +#: api/views.py:469 +#, python-format +msgid "Unknown period \"%s\"" +msgstr "䞍明な期間 \"%s\"" + +#: api/views.py:483 +msgid "Schedules" +msgstr "スケゞュヌル" + +#: api/views.py:502 +msgid "Schedule Jobs List" +msgstr "スケゞュヌルゞョブの䞀芧" + +#: api/views.py:711 +msgid "Your Tower license only permits a single organization to exist." +msgstr "お䜿いの Tower ラむセンスでは、単䞀組織のみの存圚が蚱可されたす。" + +#: api/views.py:932 +#: api/views.py:1284 +msgid "Role 'id' field is missing." +msgstr "ロヌル「id」フィヌルドがありたせん。" + +#: api/views.py:938 +#: api/views.py:4182 +msgid "You cannot assign an Organization role as a child role for a Team." +msgstr "組織ロヌルをチヌムの子ロヌルずしお割り圓おるこずができたせん。" + +#: api/views.py:942 +#: api/views.py:4196 +msgid "You cannot grant system-level permissions to a team." +msgstr "システムレベルのパヌミッションをチヌムに付䞎できたせん。" + +#: api/views.py:949 +#: api/views.py:4188 +msgid "" +"You cannot grant credential access to a team when the Organization field " +"isn't set, or belongs to a different organization" +msgstr "組織フィヌルドが蚭定されおいないか、たたは別の組織に属する堎合に認蚌情報のアクセス暩をチヌムに付䞎できたせん" + +#: api/views.py:1039 +msgid "Cannot delete project." +msgstr "プロゞェクトを削陀できたせん。" + +#: api/views.py:1068 +msgid "Project Schedules" +msgstr "プロゞェクトのスケゞュヌル" + +#: api/views.py:1168 +#: api/views.py:2252 +#: api/views.py:3225 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "関連付けられたワヌクフロヌゞョブが実行䞭の堎合、ゞョブリ゜ヌスを削陀できたせん。" + +#: api/views.py:1244 +msgid "Me" +msgstr "自分" + +#: api/views.py:1288 +#: api/views.py:4137 +msgid "You may not perform any action with your own admin_role." +msgstr "独自の admin_role でアクションを実行するこずはできたせん。" + +#: api/views.py:1294 +#: api/views.py:4141 +msgid "You may not change the membership of a users admin_role" +msgstr "ナヌザヌの admin_role のメンバヌシップを倉曎するこずはできたせん" + +#: api/views.py:1299 +#: api/views.py:4146 +msgid "" +"You cannot grant credential access to a user not in the credentials' " +"organization" +msgstr "認蚌情報の組織に属さないナヌザヌに認蚌情報のアクセス暩を付䞎するこずはできたせん" + +#: api/views.py:1303 +#: api/views.py:4150 +msgid "You cannot grant private credential access to another user" +msgstr "非公開の認蚌情報のアクセス暩を別のナヌザヌに付䞎するこずはできたせん" + +#: api/views.py:1401 +#, python-format +msgid "Cannot change %s." +msgstr "%s を倉曎できたせん。" + +#: api/views.py:1407 +msgid "Cannot delete user." +msgstr "ナヌザヌを削陀できたせん。" + +#: api/views.py:1553 +msgid "Cannot delete inventory script." +msgstr "むンベントリヌスクリプトを削陀できたせん。" + +#: api/views.py:1788 +msgid "Fact not found." +msgstr "ファクトが芋぀かりたせんでした。" + +#: api/views.py:2108 +msgid "Inventory Source List" +msgstr "むンベントリヌ゜ヌス䞀芧" + +#: api/views.py:2136 +msgid "Cannot delete inventory source." +msgstr "むンベントリヌ゜ヌスを削陀できたせん。" + +#: api/views.py:2144 +msgid "Inventory Source Schedules" +msgstr "むンベントリヌ゜ヌスのスケゞュヌル" + +#: api/views.py:2173 +msgid "Notification Templates can only be assigned when source is one of {}." +msgstr "゜ヌスが {} のいずれかである堎合、通知テンプレヌトのみを割り圓おるこずができたす。" + +#: api/views.py:2380 +msgid "Job Template Schedules" +msgstr "ゞョブテンプレヌトスケゞュヌル" + +#: api/views.py:2399 +#: api/views.py:2409 +msgid "Your license does not allow adding surveys." +msgstr "お䜿いのラむセンスでは Survey を远加できたせん。" + +#: api/views.py:2416 +msgid "'name' missing from survey spec." +msgstr "Survey の指定に「name」がありたせん。" + +#: api/views.py:2418 +msgid "'description' missing from survey spec." +msgstr "Survey の指定に「description」がありたせん。" + +#: api/views.py:2420 +msgid "'spec' missing from survey spec." +msgstr "Survey の指定に「spec」がありたせん。" + +#: api/views.py:2422 +msgid "'spec' must be a list of items." +msgstr "「spec」は項目の䞀芧にする必芁がありたす。" + +#: api/views.py:2424 +msgid "'spec' doesn't contain any items." +msgstr "「spec」には項目が含たれたせん。" + +#: api/views.py:2429 +#, python-format +msgid "Survey question %s is not a json object." +msgstr "Survey の質問 %s は json オブゞェクトではありたせん。" + +#: api/views.py:2431 +#, python-format +msgid "'type' missing from survey question %s." +msgstr "Survey の質問 %s に「type」がありたせん。" + +#: api/views.py:2433 +#, python-format +msgid "'question_name' missing from survey question %s." +msgstr "Survey の質問 %s に「question_name」がありたせん。" + +#: api/views.py:2435 +#, python-format +msgid "'variable' missing from survey question %s." +msgstr "Survey の質問 %s に「variable」がありたせん。" + +#: api/views.py:2437 +#, python-format +msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." +msgstr "Survey の質問%(survey)s で「variable」の「%(item)s」が重耇しおいたす。" + +#: api/views.py:2442 +#, python-format +msgid "'required' missing from survey question %s." +msgstr "Survey の質問 %s に「required」がありたせん。" + +#: api/views.py:2641 +msgid "No matching host could be found!" +msgstr "䞀臎するホストが芋぀かりたせんでした!" + +#: api/views.py:2644 +msgid "Multiple hosts matched the request!" +msgstr "耇数のホストが芁求に䞀臎したした!" + +#: api/views.py:2649 +msgid "Cannot start automatically, user input required!" +msgstr "自動的に開始できたせん。ナヌザヌ入力が必芁です!" + +#: api/views.py:2656 +msgid "Host callback job already pending." +msgstr "ホストのコヌルバックゞョブがすでに保留䞭です。" + +#: api/views.py:2669 +msgid "Error starting job!" +msgstr "ゞョブの開始時に゚ラヌが発生したした!" + +#: api/views.py:2995 +msgid "Workflow Job Template Schedules" +msgstr "ワヌクフロヌゞョブテンプレヌトのスケゞュヌル" + +#: api/views.py:3131 +#: api/views.py:3853 +msgid "Superuser privileges needed." +msgstr "スヌパヌナヌザヌ暩限が必芁です。" + +#: api/views.py:3161 +msgid "System Job Template Schedules" +msgstr "システムゞョブテンプレヌトのスケゞュヌル" + +#: api/views.py:3344 +msgid "Job Host Summaries List" +msgstr "ゞョブホスト抂芁䞀芧" + +#: api/views.py:3386 +msgid "Job Event Children List" +msgstr "ゞョブむベント子䞀芧" + +#: api/views.py:3395 +msgid "Job Event Hosts List" +msgstr "ゞョブむベントホスト䞀芧" + +#: api/views.py:3404 +msgid "Job Events List" +msgstr "ゞョブむベント䞀芧" + +#: api/views.py:3436 +msgid "Job Plays List" +msgstr "ゞョブプレむ䞀芧" + +#: api/views.py:3513 +msgid "Job Play Tasks List" +msgstr "ゞョブプレむタスク䞀芧" + +#: api/views.py:3529 +msgid "Job not found." +msgstr "ゞョブが芋぀かりたせんでした。" + +#: api/views.py:3533 +msgid "'event_id' not provided." +msgstr "「event_id」が指定されおいたせん。" + +#: api/views.py:3537 +msgid "Parent event not found." +msgstr "芪むベントが芋぀かりたせんでした。" + +#: api/views.py:3809 +msgid "Ad Hoc Command Events List" +msgstr "アドホックコマンドむベント䞀芧" + +#: api/views.py:3963 +#, python-format +msgid "Error generating stdout download file: %s" +msgstr "stdout ダりンロヌドファむルの生成䞭に゚ラヌが発生したした: %s" + +#: api/views.py:4009 +msgid "Delete not allowed while there are pending notifications" +msgstr "保留䞭の通知がある堎合に削陀は蚱可されたせん" + +#: api/views.py:4016 +msgid "NotificationTemplate Test" +msgstr "通知テンプレヌトテスト" + +#: api/views.py:4131 +msgid "User 'id' field is missing." +msgstr "ナヌザヌ「id」フィヌルドがありたせん。" + +#: api/views.py:4174 +msgid "Team 'id' field is missing." +msgstr "チヌム「id」フィヌルドがありたせん。" + +#: conf/conf.py:20 +msgid "Bud Frogs" +msgstr "Bud Frogs" + +#: conf/conf.py:21 +msgid "Bunny" +msgstr "Bunny" + +#: conf/conf.py:22 +msgid "Cheese" +msgstr "Cheese" + +#: conf/conf.py:23 +msgid "Daemon" +msgstr "Daemon" + +#: conf/conf.py:24 +msgid "Default Cow" +msgstr "Default Cow" + +#: conf/conf.py:25 +msgid "Dragon" +msgstr "Dragon" + +#: conf/conf.py:26 +msgid "Elephant in Snake" +msgstr "Elephant in Snake" + +#: conf/conf.py:27 +msgid "Elephant" +msgstr "Elephant" + +#: conf/conf.py:28 +msgid "Eyes" +msgstr "Eyes" + +#: conf/conf.py:29 +msgid "Hello Kitty" +msgstr "Hello Kitty" + +#: conf/conf.py:30 +msgid "Kitty" +msgstr "Kitty" + +#: conf/conf.py:31 +msgid "Luke Koala" +msgstr "Luke Koala" + +#: conf/conf.py:32 +msgid "Meow" +msgstr "Meow" + +#: conf/conf.py:33 +msgid "Milk" +msgstr "Milk" + +#: conf/conf.py:34 +msgid "Moofasa" +msgstr "Moofasa" + +#: conf/conf.py:35 +msgid "Moose" +msgstr "Moose" + +#: conf/conf.py:36 +msgid "Ren" +msgstr "Ren" + +#: conf/conf.py:37 +msgid "Sheep" +msgstr "Sheep" + +#: conf/conf.py:38 +msgid "Small Cow" +msgstr "Small Cow" + +#: conf/conf.py:39 +msgid "Stegosaurus" +msgstr "Stegosaurus" + +#: conf/conf.py:40 +msgid "Stimpy" +msgstr "Stimpy" + +#: conf/conf.py:41 +msgid "Super Milker" +msgstr "Super Milker" + +#: conf/conf.py:42 +msgid "Three Eyes" +msgstr "Three Eyes" + +#: conf/conf.py:43 +msgid "Turkey" +msgstr "Turkey" + +#: conf/conf.py:44 +msgid "Turtle" +msgstr "Turtle" + +#: conf/conf.py:45 +msgid "Tux" +msgstr "Tux" + +#: conf/conf.py:46 +msgid "Udder" +msgstr "Udder" + +#: conf/conf.py:47 +msgid "Vader Koala" +msgstr "Vader Koala" + +#: conf/conf.py:48 +msgid "Vader" +msgstr "Vader" + +#: conf/conf.py:49 +msgid "WWW" +msgstr "WWW" + +#: conf/conf.py:52 +msgid "Cow Selection" +msgstr "Cow Selection" + +#: conf/conf.py:53 +msgid "Select which cow to use with cowsay when running jobs." +msgstr "ゞョブの実行時に cowsay で䜿甚する cow を遞択したす。" + +#: conf/conf.py:54 +#: conf/conf.py:75 +msgid "Cows" +msgstr "Cows" + +#: conf/conf.py:73 +msgid "Example Read-Only Setting" +msgstr "読み取り専甚蚭定の䟋" + +#: conf/conf.py:74 +msgid "Example setting that cannot be changed." +msgstr "倉曎䞍可胜な蚭定䟋" + +#: conf/conf.py:93 +msgid "Example Setting" +msgstr "蚭定䟋" + +#: conf/conf.py:94 +msgid "Example setting which can be different for each user." +msgstr "ナヌザヌごずに異なる蚭定䟋" + +#: conf/conf.py:95 +#: conf/registry.py:67 +#: conf/views.py:46 +msgid "User" +msgstr "ナヌザヌ" + +#: conf/fields.py:38 +msgid "Enter a valid URL" +msgstr "無効な URL の入力" + +#: conf/license.py:19 +msgid "Your Tower license does not allow that." +msgstr "お䜿いの Tower ラむセンスではこれを蚱可したせん。" + +#: conf/management/commands/migrate_to_database_settings.py:41 +msgid "Only show which settings would be commented/migrated." +msgstr "コメント/移行する蚭定に぀いおのみ衚瀺したす。" + +#: conf/management/commands/migrate_to_database_settings.py:48 +msgid "" +"Skip over settings that would raise an error when commenting/migrating." +msgstr "コメント/移行時に゚ラヌを発生させる蚭定をスキップしたす。" + +#: conf/management/commands/migrate_to_database_settings.py:55 +msgid "Skip commenting out settings in files." +msgstr "ファむル内の蚭定のコメント化をスキップしたす。" + +#: conf/management/commands/migrate_to_database_settings.py:61 +msgid "Backup existing settings files with this suffix." +msgstr "この接尟蟞を持぀既存の蚭定ファむルをバックアップしたす。" + +#: conf/registry.py:55 +msgid "All" +msgstr "すべお" + +#: conf/registry.py:56 +msgid "Changed" +msgstr "倉曎枈み" + +#: conf/registry.py:68 +msgid "User-Defaults" +msgstr "ナヌザヌ蚭定" + +#: conf/views.py:38 +msgid "Setting Categories" +msgstr "蚭定カテゎリヌ" + +#: conf/views.py:61 +msgid "Setting Detail" +msgstr "蚭定の詳现" + +#: main/access.py:255 +#, python-format +msgid "Bad data found in related field %s." +msgstr "関連フィヌルド %s に䞍正デヌタが芋぀かりたした。" + +#: main/access.py:296 +msgid "License is missing." +msgstr "ラむセンスが芋぀かりたせん。" + +#: main/access.py:298 +msgid "License has expired." +msgstr "ラむセンスの有効期限が切れたした。" + +#: main/access.py:303 +#, python-format +msgid "License count of %s instances has been reached." +msgstr "%s むンスタンスのラむセンス数に達したした。" + +#: main/access.py:305 +#, python-format +msgid "License count of %s instances has been exceeded." +msgstr "%s むンスタンスのラむセンス数を超えたした。" + +#: main/access.py:307 +msgid "Host count exceeds available instances." +msgstr "ホスト数が利甚可胜なむンスタンスの䞊限を䞊回っおいたす。" + +#: main/access.py:311 +#, python-format +msgid "Feature %s is not enabled in the active license." +msgstr "機胜 %s はアクティブなラむセンスで有効にされおいたせん。" + +#: main/access.py:313 +msgid "Features not found in active license." +msgstr "各皮機胜はアクティブなラむセンスにありたせん。" + +#: main/access.py:507 +#: main/access.py:574 +#: main/access.py:694 +#: main/access.py:957 +#: main/access.py:1198 +#: main/access.py:1587 +msgid "Resource is being used by running jobs" +msgstr "リ゜ヌスが実行䞭のゞョブで䜿甚されおいたす" + +#: main/access.py:618 +msgid "Unable to change inventory on a host." +msgstr "ホストのむンベントリヌを倉曎できたせん。" + +#: main/access.py:630 +#: main/access.py:675 +msgid "Cannot associate two items from different inventories." +msgstr "異なるむンベントリヌの 2 ぀の項目を関連付けるこずはできたせん。" + +#: main/access.py:663 +msgid "Unable to change inventory on a group." +msgstr "グルヌプのむンベントリヌを倉曎できたせん。" + +#: main/access.py:877 +msgid "Unable to change organization on a team." +msgstr "チヌムの組織を倉曎できたせん。" + +#: main/access.py:890 +msgid "The {} role cannot be assigned to a team" +msgstr "{} ロヌルをチヌムに割り圓おるこずができたせん" + +#: main/access.py:892 +msgid "The admin_role for a User cannot be assigned to a team" +msgstr "ナヌザヌの admin_role をチヌムに割り圓おるこずができたせん" + +#: main/apps.py:9 +msgid "Main" +msgstr "メむン" + +#: main/conf.py:17 +msgid "Enable Activity Stream" +msgstr "アクティビティヌストリヌムの有効化" + +#: main/conf.py:18 +msgid "Enable capturing activity for the Tower activity stream." +msgstr "Tower アクティビティヌストリヌムのアクティビティヌのキャプチャヌを有効にしたす。" + +#: main/conf.py:19 +#: main/conf.py:29 +#: main/conf.py:39 +#: main/conf.py:48 +#: main/conf.py:60 +#: main/conf.py:78 +#: main/conf.py:103 +msgid "System" +msgstr "システム" + +#: main/conf.py:27 +msgid "Enable Activity Stream for Inventory Sync" +msgstr "むンベントリヌ同期のアクティビティティヌストリヌムの有効化" + +#: main/conf.py:28 +msgid "" +"Enable capturing activity for the Tower activity stream when running " +"inventory sync." +msgstr "むンベントリヌ同期の実行時に Tower アクティビティヌストリヌムのアクティビティヌのキャプチャヌを有効にしたす。" + +#: main/conf.py:37 +msgid "All Users Visible to Organization Admins" +msgstr "組織管理者に衚瀺されるすべおのナヌザヌ" + +#: main/conf.py:38 +msgid "" +"Controls whether any Organization Admin can view all users, even those not " +"associated with their Organization." +msgstr "組織管理者が、それぞれの組織に関連付けられおいないすべおのナヌザヌを閲芧できるかどうかを制埡したす。" + +#: main/conf.py:46 +msgid "Enable Tower Administrator Alerts" +msgstr "Tower 管理者アラヌトの有効化" + +#: main/conf.py:47 +msgid "" +"Allow Tower to email Admin users for system events that may require " +"attention." +msgstr "Tower から管理者ナヌザヌに察し、泚意を芁する可胜性のあるシステムむベントに぀いおのメヌルを送信するこずを蚱可したす。" + +#: main/conf.py:57 +msgid "Base URL of the Tower host" +msgstr "Tower ホストのベヌス URL" + +#: main/conf.py:58 +msgid "" +"This setting is used by services like notifications to render a valid url to " +"the Tower host." +msgstr "この蚭定は、有効な URL を Tower ホストにレンダリングする通知などのサヌビスで䜿甚されたす。" + +#: main/conf.py:67 +msgid "Remote Host Headers" +msgstr "リモヌトホストヘッダヌ" + +#: main/conf.py:68 +msgid "" +"HTTP headers and meta keys to search to determine remote host name or IP. " +"Add additional items to this list, such as \"HTTP_X_FORWARDED_FOR\", if " +"behind a reverse proxy.\n" +"\n" +"Note: The headers will be searched in order and the first found remote host " +"name or IP will be used.\n" +"\n" +"In the below example 8.8.8.7 would be the chosen IP address.\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" +msgstr "" +"リモヌトホスト名たたは IP を刀別するために怜玢する HTTP " +"ヘッダヌおよびメタキヌです。リバヌスプロキシヌの埌ろの堎合は、\"HTTP_X_FORWARDED_FOR\" のように項目をこの䞀芧に远加したす。\n" +"\n" +"泚: ヘッダヌが順番に怜玢され、最初に怜出されるリモヌトホスト名たたは IP が䜿甚されたす。\n" +"\n" +"以䞋の䟋では、8.8.8.7 が遞択された IP アドレスになりたす。\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" + +#: main/conf.py:99 +msgid "Tower License" +msgstr "Tower ラむセンス" + +#: main/conf.py:100 +msgid "" +"The license controls which features and functionality are enabled in Tower. " +"Use /api/v1/config/ to update or change the license." +msgstr "" +"ラむセンスによっお、Tower で有効にされる特長および機胜が制埡されたす。ラむセンスを曎新たたは倉曎するには、/api/v1/config/ " +"を䜿甚したす。" + +#: main/conf.py:110 +msgid "Ansible Modules Allowed for Ad Hoc Jobs" +msgstr "アドホックゞョブで蚱可される Ansible モゞュヌル" + +#: main/conf.py:111 +msgid "List of modules allowed to be used by ad-hoc jobs." +msgstr "アドホックゞョブで䜿甚できるモゞュヌル䞀芧。" + +#: main/conf.py:112 +#: main/conf.py:121 +#: main/conf.py:130 +#: main/conf.py:139 +#: main/conf.py:148 +#: main/conf.py:158 +#: main/conf.py:168 +#: main/conf.py:178 +#: main/conf.py:187 +#: main/conf.py:199 +#: main/conf.py:211 +#: main/conf.py:223 +msgid "Jobs" +msgstr "ゞョブ" + +#: main/conf.py:119 +msgid "Enable job isolation" +msgstr "ゞョブの分離の有効化" + +#: main/conf.py:120 +msgid "" +"Isolates an Ansible job from protected parts of the Tower system to prevent " +"exposing sensitive information." +msgstr "機密情報の公開を防ぐために Tower システムの保護された郚分から Ansible ゞョブを分離したす。" + +#: main/conf.py:128 +msgid "Job isolation execution path" +msgstr "ゞョブ分離の実行パス" + +#: main/conf.py:129 +msgid "" +"Create temporary working directories for isolated jobs in this location." +msgstr "この堎所に分離されたゞョブの䞀時䜜業ディレクトリヌを䜜成したす。" + +#: main/conf.py:137 +msgid "Paths to hide from isolated jobs" +msgstr "分離されたゞョブから非衚瀺にするパス" + +#: main/conf.py:138 +msgid "Additional paths to hide from isolated processes." +msgstr "分離されたプロセスから非衚瀺にする远加パス。" + +#: main/conf.py:146 +msgid "Paths to expose to isolated jobs" +msgstr "分離されたゞョブに公開するパス" + +#: main/conf.py:147 +msgid "" +"Whitelist of paths that would otherwise be hidden to expose to isolated jobs." +"" +msgstr "分離されたゞョブに公開されないように非衚瀺にされるこずがあるパスのホワむトリスト。" + +#: main/conf.py:156 +msgid "Standard Output Maximum Display Size" +msgstr "暙準出力の最倧衚瀺サむズ" + +#: main/conf.py:157 +msgid "" +"Maximum Size of Standard Output in bytes to display before requiring the " +"output be downloaded." +msgstr "出力のダりンロヌドを芁求する前に衚瀺される暙準出力の最倧サむズ (バむト単䜍)。" + +#: main/conf.py:166 +msgid "Job Event Standard Output Maximum Display Size" +msgstr "ゞョブむベントの暙準出力の最倧衚瀺サむズ" + +#: main/conf.py:167 +msgid "" +"Maximum Size of Standard Output in bytes to display for a single job or ad " +"hoc command event. `stdout` will end with `
` when truncated." +msgstr "" +"単䞀ゞョブたたはアドホックコマンドむベントに぀いお衚瀺される暙準出力の最倧サむズ (バむト単䜍)。`stdout` は切り捚おが実行されるず `
` " +"で終了したす。" + +#: main/conf.py:176 +msgid "Maximum Scheduled Jobs" +msgstr "スケゞュヌル枈みゞョブの最倧数" + +#: main/conf.py:177 +msgid "" +"Maximum number of the same job template that can be waiting to run when " +"launching from a schedule before no more are created." +msgstr "スケゞュヌルからの起動時に実行を埅機しおいる同じゞョブテンプレヌトの最倧数です (これ以䞊䜜成されるこずはありたせん)。" + +#: main/conf.py:185 +msgid "Ansible Callback Plugins" +msgstr "Ansible コヌルバックプラグむン" + +#: main/conf.py:186 +msgid "" +"List of paths to search for extra callback plugins to be used when running " +"jobs." +msgstr "ゞョブの実行時に䜿甚される远加のコヌルバックプラグむンに぀いお怜玢するパスの䞀芧。" + +#: main/conf.py:196 +msgid "Default Job Timeout" +msgstr "デフォルトのゞョブタむムアりト" + +#: main/conf.py:197 +msgid "" +"Maximum time to allow jobs to run. Use value of 0 to indicate that no " +"timeout should be imposed. A timeout set on an individual job template will " +"override this." +msgstr "" +"ゞョブの実行可胜な最倧時間。倀 0 " +"が䜿甚されおいる堎合はタむムアりトを蚭定できないこずを瀺したす。個別のゞョブテンプレヌトに蚭定されるタむムアりトはこれを䞊曞きしたす。" + +#: main/conf.py:208 +msgid "Default Inventory Update Timeout" +msgstr "デフォルトのむンベントリヌ曎新タむムアりト" + +#: main/conf.py:209 +msgid "" +"Maximum time to allow inventory updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual inventory " +"source will override this." +msgstr "" +"むンベントリヌ曎新の実行可胜な最倧時間。倀 0 " +"が蚭定されおいる堎合はタむムアりトを蚭定できないこずを瀺したす。個別のむンベントリヌ゜ヌスに蚭定されるタむムアりトはこれを䞊曞きしたす。" + +#: main/conf.py:220 +msgid "Default Project Update Timeout" +msgstr "デフォルトのプロゞェクト曎新タむムアりト" + +#: main/conf.py:221 +msgid "" +"Maximum time to allow project updates to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual project " +"will override this." +msgstr "" +"プロゞェクト曎新の実行可胜な最倧時間。倀 0 " +"が蚭定されおいる堎合はタむムアりトを蚭定できないこずを瀺したす。個別のプロゞェクトに蚭定されるタむムアりトはこれを䞊曞きしたす。" + +#: main/conf.py:231 +msgid "Logging Aggregator Receiving Host" +msgstr "ログアグリゲヌタヌ受信ホスト" + +#: main/conf.py:232 +msgid "External host maintain a log collector to send logs to" +msgstr "倖郚ホストがログの送信先のログコレクタヌを維持したす" + +#: main/conf.py:233 +#: main/conf.py:242 +#: main/conf.py:252 +#: main/conf.py:261 +#: main/conf.py:271 +#: main/conf.py:286 +#: main/conf.py:297 +#: main/conf.py:306 +msgid "Logging" +msgstr "ロギング" + +#: main/conf.py:240 +msgid "Logging Aggregator Receiving Port" +msgstr "ログアグリゲヌタヌ受信ポヌト" + +#: main/conf.py:241 +msgid "Port that the log collector is listening on" +msgstr "ログコレクタヌがリッスンしおいるポヌト" + +#: main/conf.py:250 +msgid "Logging Aggregator Type: Logstash, Loggly, Datadog, etc" +msgstr "ログアグリゲヌタヌのタむプ: Logstash、Loggly、Datadog など" + +#: main/conf.py:251 +msgid "The type of log aggregator service to format messages for" +msgstr "メッセヌゞのフォヌマットに䜿甚するログアグリゲヌタヌサヌビスのタむプ" + +#: main/conf.py:259 +msgid "Logging Aggregator Username to Authenticate With" +msgstr "認蚌に䜿甚するログアグリゲヌタヌのナヌザヌ名" + +#: main/conf.py:260 +msgid "Username for Logstash or others (basic auth)" +msgstr "Logstash その他のナヌザヌ名 (基本認蚌)" + +#: main/conf.py:269 +msgid "Logging Aggregator Password to Authenticate With" +msgstr "認蚌に䜿甚するログアグリゲヌタヌのパスワヌド" + +#: main/conf.py:270 +msgid "Password for Logstash or others (basic auth)" +msgstr "Logstash その他のパスワヌド (基本認蚌)" + +#: main/conf.py:278 +msgid "Loggers to send data to the log aggregator from" +msgstr "ログアグリゲヌタヌにデヌタを送信するロガヌ" + +#: main/conf.py:279 +msgid "" +"List of loggers that will send HTTP logs to the collector, these can include " +"any or all of: \n" +"activity_stream - logs duplicate to records entered in activity stream\n" +"job_events - callback data from Ansible job events\n" +"system_tracking - data generated from scan jobs\n" +"Sending generic Tower logs must be configured through local_settings." +"pyinstead of this mechanism." +msgstr "" +"HTTP ログをコレクタヌに送信するロガヌの䞀芧です。これらには以䞋のいずれか、たたはすべおが含たれたす。\n" +"activity_stream - アクティビティヌストリヌムに入力されるレコヌドぞのログの耇補\n" +"job_events - Ansible ゞョブむベントからのコヌルバックデヌタ\n" +"system_tracking - スキャンゞョブから生成されるデヌタ\n" +"汎甚 Tower ログの送信は、このメカニズムの local_settings.pyinstead で蚭定する必芁がありたす。" + +#: main/conf.py:293 +msgid "" +"Flag denoting to send individual messages for each fact in system tracking" +msgstr "システムトラッキングの各ファクトに぀いおの個別メッセヌゞを送信するこずを瀺すフラグ" + +#: main/conf.py:294 +msgid "" +"If not set, the data from system tracking will be sent inside of a single " +"dictionary, but if set, separate requests will be sent for each package, " +"service, etc. that is found in the scan." +msgstr "" +"蚭定されおいない堎合、システムトラッキングのデヌタが単䞀蟞曞内に送信されたすが、蚭定されおいる堎合は、スキャンで芋぀かる各パッケヌゞ、サヌビスなどに぀いおの個別の芁求が送信されたす。" + +#: main/conf.py:304 +msgid "Flag denoting whether to use the external logger system" +msgstr "倖郚ロガヌシステムを䜿甚するかどうかを瀺すフラグ" + +#: main/conf.py:305 +msgid "" +"If not set, only normal settings data will be used to configure loggers." +msgstr "蚭定されおいない堎合、暙準蚭定デヌタのみがロガヌを蚭定するために䜿甚されたす。" + +#: main/models/activity_stream.py:22 +msgid "Entity Created" +msgstr "゚ンティティヌの䜜成" + +#: main/models/activity_stream.py:23 +msgid "Entity Updated" +msgstr "゚ンティティヌの曎新" + +#: main/models/activity_stream.py:24 +msgid "Entity Deleted" +msgstr "゚ンティティヌの削陀" + +#: main/models/activity_stream.py:25 +msgid "Entity Associated with another Entity" +msgstr "゚ンティティヌの別の゚ンティティヌぞの関連付け" + +#: main/models/activity_stream.py:26 +msgid "Entity was Disassociated with another Entity" +msgstr "゚ンティティヌの別の゚ンティティヌずの関連付けの解陀" + +#: main/models/ad_hoc_commands.py:96 +msgid "No valid inventory." +msgstr "有効なむンベントリヌはありたせん。" + +#: main/models/ad_hoc_commands.py:103 +#: main/models/jobs.py:163 +msgid "You must provide a machine / SSH credential." +msgstr "マシン/SSH 認蚌情報を入力しおください。" + +#: main/models/ad_hoc_commands.py:114 +#: main/models/ad_hoc_commands.py:122 +msgid "Invalid type for ad hoc command" +msgstr "アドホックコマンドの無効なタむプ" + +#: main/models/ad_hoc_commands.py:117 +msgid "Unsupported module for ad hoc commands." +msgstr "アドホックコマンドのサポヌトされおいないモゞュヌル。" + +#: main/models/ad_hoc_commands.py:125 +#, python-format +msgid "No argument passed to %s module." +msgstr "%s モゞュヌルに枡される匕数はありたせん。" + +#: main/models/ad_hoc_commands.py:220 +#: main/models/jobs.py:767 +msgid "Host Failed" +msgstr "ホストの倱敗" + +#: main/models/ad_hoc_commands.py:221 +#: main/models/jobs.py:768 +msgid "Host OK" +msgstr "ホスト OK" + +#: main/models/ad_hoc_commands.py:222 +#: main/models/jobs.py:771 +msgid "Host Unreachable" +msgstr "ホストに到達できたせん" + +#: main/models/ad_hoc_commands.py:227 +#: main/models/jobs.py:770 +msgid "Host Skipped" +msgstr "ホストがスキップされたした" + +#: main/models/ad_hoc_commands.py:237 +#: main/models/jobs.py:798 +msgid "Debug" +msgstr "デバッグ" + +#: main/models/ad_hoc_commands.py:238 +#: main/models/jobs.py:799 +msgid "Verbose" +msgstr "詳现" + +#: main/models/ad_hoc_commands.py:239 +#: main/models/jobs.py:800 +msgid "Deprecated" +msgstr "非掚奚" + +#: main/models/ad_hoc_commands.py:240 +#: main/models/jobs.py:801 +msgid "Warning" +msgstr "譊告" + +#: main/models/ad_hoc_commands.py:241 +#: main/models/jobs.py:802 +msgid "System Warning" +msgstr "システム譊告" + +#: main/models/ad_hoc_commands.py:242 +#: main/models/jobs.py:803 +#: main/models/unified_jobs.py:62 +msgid "Error" +msgstr "゚ラヌ" + +#: main/models/base.py:45 +#: main/models/base.py:51 +#: main/models/base.py:56 +msgid "Run" +msgstr "実行" + +#: main/models/base.py:46 +#: main/models/base.py:52 +#: main/models/base.py:57 +msgid "Check" +msgstr "チェック" + +#: main/models/base.py:47 +msgid "Scan" +msgstr "スキャン" + +#: main/models/base.py:61 +msgid "Read Inventory" +msgstr "むンベントリヌの読み取り" + +#: main/models/base.py:62 +msgid "Edit Inventory" +msgstr "むンベントリヌの線集" + +#: main/models/base.py:63 +msgid "Administrate Inventory" +msgstr "むンベントリヌの管理" + +#: main/models/base.py:64 +msgid "Deploy To Inventory" +msgstr "むンベントリヌぞのデプロむ" + +#: main/models/base.py:65 +msgid "Deploy To Inventory (Dry Run)" +msgstr "むンベントリヌぞのデプロむ (ドラむラン)" + +#: main/models/base.py:66 +msgid "Scan an Inventory" +msgstr "むンベントリヌのスキャン" + +#: main/models/base.py:67 +msgid "Create a Job Template" +msgstr "ゞョブテンプレヌトの䜜成" + +#: main/models/credential.py:33 +msgid "Machine" +msgstr "マシン" + +#: main/models/credential.py:34 +msgid "Network" +msgstr "ネットワヌク" + +#: main/models/credential.py:35 +msgid "Source Control" +msgstr "゜ヌスコントロヌル" + +#: main/models/credential.py:36 +msgid "Amazon Web Services" +msgstr "Amazon Web サヌビス" + +#: main/models/credential.py:37 +msgid "Rackspace" +msgstr "Rackspace" + +#: main/models/credential.py:38 +#: main/models/inventory.py:713 +msgid "VMware vCenter" +msgstr "VMware vCenter" + +#: main/models/credential.py:39 +#: main/models/inventory.py:714 +msgid "Red Hat Satellite 6" +msgstr "Red Hat Satellite 6" + +#: main/models/credential.py:40 +#: main/models/inventory.py:715 +msgid "Red Hat CloudForms" +msgstr "Red Hat CloudForms" + +#: main/models/credential.py:41 +#: main/models/inventory.py:710 +msgid "Google Compute Engine" +msgstr "Google Compute Engine" + +#: main/models/credential.py:42 +#: main/models/inventory.py:711 +msgid "Microsoft Azure Classic (deprecated)" +msgstr "Microsoft Azure Classic (非掚奚)" + +#: main/models/credential.py:43 +#: main/models/inventory.py:712 +msgid "Microsoft Azure Resource Manager" +msgstr "Microsoft Azure Resource Manager" + +#: main/models/credential.py:44 +#: main/models/inventory.py:716 +msgid "OpenStack" +msgstr "OpenStack" + +#: main/models/credential.py:48 +msgid "None" +msgstr "なし" + +#: main/models/credential.py:49 +msgid "Sudo" +msgstr "Sudo" + +#: main/models/credential.py:50 +msgid "Su" +msgstr "Su" + +#: main/models/credential.py:51 +msgid "Pbrun" +msgstr "Pbrun" + +#: main/models/credential.py:52 +msgid "Pfexec" +msgstr "Pfexec" + +#: main/models/credential.py:101 +msgid "Host" +msgstr "ホスト" + +#: main/models/credential.py:102 +msgid "The hostname or IP address to use." +msgstr "䜿甚するホスト名たたは IP アドレス。" + +#: main/models/credential.py:108 +msgid "Username" +msgstr "ナヌザヌ名" + +#: main/models/credential.py:109 +msgid "Username for this credential." +msgstr "この認蚌情報のナヌザヌ名。" + +#: main/models/credential.py:115 +msgid "Password" +msgstr "パスワヌド" + +#: main/models/credential.py:116 +msgid "" +"Password for this credential (or \"ASK\" to prompt the user for machine " +"credentials)." +msgstr "この認蚌情報のパスワヌド (たたはマシンの認蚌情報を求めるプロンプトを出すには 「ASK」)。" + +#: main/models/credential.py:123 +msgid "Security Token" +msgstr "セキュリティヌトヌクン" + +#: main/models/credential.py:124 +msgid "Security Token for this credential" +msgstr "この認蚌情報のセキュリティヌトヌクン" + +#: main/models/credential.py:130 +msgid "Project" +msgstr "プロゞェクト" + +#: main/models/credential.py:131 +msgid "The identifier for the project." +msgstr "プロゞェクトの識別子。" + +#: main/models/credential.py:137 +msgid "Domain" +msgstr "ドメむン" + +#: main/models/credential.py:138 +msgid "The identifier for the domain." +msgstr "ドメむンの識別子。" + +#: main/models/credential.py:143 +msgid "SSH private key" +msgstr "SSH 秘密鍵" + +#: main/models/credential.py:144 +msgid "RSA or DSA private key to be used instead of password." +msgstr "パスワヌドの代わりに䜿甚される RSA たたは DSA 秘密鍵。" + +#: main/models/credential.py:150 +msgid "SSH key unlock" +msgstr "SSH キヌのロック解陀" + +#: main/models/credential.py:151 +msgid "" +"Passphrase to unlock SSH private key if encrypted (or \"ASK\" to prompt the " +"user for machine credentials)." +msgstr "" +"暗号化されおいる堎合は SSH 秘密鍵のロックを解陀するためのパスフレヌズ (たたはマシンの認蚌情報を求めるプロンプトを出すには「ASK」)。" + +#: main/models/credential.py:159 +msgid "Privilege escalation method." +msgstr "暩限昇栌メ゜ッド。" + +#: main/models/credential.py:165 +msgid "Privilege escalation username." +msgstr "暩限昇栌ナヌザヌ名。" + +#: main/models/credential.py:171 +msgid "Password for privilege escalation method." +msgstr "暩限昇栌メ゜ッドのパスワヌド。" + +#: main/models/credential.py:177 +msgid "Vault password (or \"ASK\" to prompt the user)." +msgstr "Vault パスワヌド (たたはナヌザヌにプロンプトを出すには「ASK」)。" + +#: main/models/credential.py:181 +msgid "Whether to use the authorize mechanism." +msgstr "承認メカニズムを䜿甚するかどうか。" + +#: main/models/credential.py:187 +msgid "Password used by the authorize mechanism." +msgstr "承認メカニズムで䜿甚されるパスワヌド。" + +#: main/models/credential.py:193 +msgid "Client Id or Application Id for the credential" +msgstr "認蚌情報のクラむアント ID たたはアプリケヌション ID" + +#: main/models/credential.py:199 +msgid "Secret Token for this credential" +msgstr "この認蚌情報のシヌクレットトヌクン" + +#: main/models/credential.py:205 +msgid "Subscription identifier for this credential" +msgstr "この認蚌情報のサブスクリプション識別子" + +#: main/models/credential.py:211 +msgid "Tenant identifier for this credential" +msgstr "この認蚌情報のテナント識別子" + +#: main/models/credential.py:281 +msgid "Host required for VMware credential." +msgstr "VMware 認蚌情報に必芁なホスト。" + +#: main/models/credential.py:283 +msgid "Host required for OpenStack credential." +msgstr "OpenStack 認蚌情報に必芁なホスト。" + +#: main/models/credential.py:292 +msgid "Access key required for AWS credential." +msgstr "AWS 認蚌情報に必芁なアクセスキヌ。" + +#: main/models/credential.py:294 +msgid "Username required for Rackspace credential." +msgstr "Rackspace 認蚌情報に必芁なナヌザヌ名。" + +#: main/models/credential.py:297 +msgid "Username required for VMware credential." +msgstr "VMware 認蚌情報に必芁なナヌザヌ名。" + +#: main/models/credential.py:299 +msgid "Username required for OpenStack credential." +msgstr "OpenStack 認蚌情報に必芁なナヌザヌ名。" + +#: main/models/credential.py:305 +msgid "Secret key required for AWS credential." +msgstr "AWS 認蚌情報に必芁なシヌクレットキヌ。" + +#: main/models/credential.py:307 +msgid "API key required for Rackspace credential." +msgstr "Rackspace 認蚌情報に必芁な API キヌ。" + +#: main/models/credential.py:309 +msgid "Password required for VMware credential." +msgstr "VMware 認蚌情報に必芁なパスワヌド。" + +#: main/models/credential.py:311 +msgid "Password or API key required for OpenStack credential." +msgstr "OpenStack 認蚌情報に必芁なパスワヌドたたは API キヌ。" + +#: main/models/credential.py:317 +msgid "Project name required for OpenStack credential." +msgstr "OpenStack 認蚌情報に必芁なプロゞェクト名。" + +#: main/models/credential.py:344 +msgid "SSH key unlock must be set when SSH key is encrypted." +msgstr "SSH キヌの暗号化時に SSH キヌのロック解陀を蚭定する必芁がありたす。" + +#: main/models/credential.py:350 +msgid "Credential cannot be assigned to both a user and team." +msgstr "認蚌情報はナヌザヌずチヌムの䞡方に割り圓おるこずができたせん。" + +#: main/models/fact.py:21 +msgid "Host for the facts that the fact scan captured." +msgstr "ファクトスキャンがキャプチャヌしたファクトのホスト。" + +#: main/models/fact.py:26 +msgid "Date and time of the corresponding fact scan gathering time." +msgstr "察応するファクトスキャン収集時間の日時。" + +#: main/models/fact.py:29 +msgid "" +"Arbitrary JSON structure of module facts captured at timestamp for a single " +"host." +msgstr "単䞀ホストのタむムスタンプでキャプチャヌされるモゞュヌルファクトの任意の JSON 構造。" + +#: main/models/inventory.py:45 +msgid "inventories" +msgstr "むンベントリヌ" + +#: main/models/inventory.py:52 +msgid "Organization containing this inventory." +msgstr "このむンベントリヌを含む組織。" + +#: main/models/inventory.py:58 +msgid "Inventory variables in JSON or YAML format." +msgstr "JSON たたは YAML 圢匏のむンベントリヌ倉数。" + +#: main/models/inventory.py:63 +msgid "Flag indicating whether any hosts in this inventory have failed." +msgstr "このむンベントリヌのホストが倱敗したかどうかを瀺すフラグ。" + +#: main/models/inventory.py:68 +msgid "Total number of hosts in this inventory." +msgstr "このむンべントリヌ内のホストの合蚈数。" + +#: main/models/inventory.py:73 +msgid "Number of hosts in this inventory with active failures." +msgstr "アクティブな゚ラヌのあるこのむンベントリヌ内のホストの数。" + +#: main/models/inventory.py:78 +msgid "Total number of groups in this inventory." +msgstr "このむンべントリヌ内のグルヌプの合蚈数。" + +#: main/models/inventory.py:83 +msgid "Number of groups in this inventory with active failures." +msgstr "アクティブな゚ラヌのあるこのむンベントリヌ内のグルヌプの数。" + +#: main/models/inventory.py:88 +msgid "" +"Flag indicating whether this inventory has any external inventory sources." +msgstr "このむンベントリヌに倖郚のむンベントリヌ゜ヌスがあるかどうかを瀺すフラグ。" + +#: main/models/inventory.py:93 +msgid "" +"Total number of external inventory sources configured within this inventory." +msgstr "このむンベントリヌ内で蚭定される倖郚むンベントリヌ゜ヌスの合蚈数。" + +#: main/models/inventory.py:98 +msgid "Number of external inventory sources in this inventory with failures." +msgstr "゚ラヌのあるこのむンベントリヌ内の倖郚むンベントリヌ゜ヌスの数。" + +#: main/models/inventory.py:339 +msgid "Is this host online and available for running jobs?" +msgstr "このホストはオンラむンで、ゞョブを実行するために利甚できたすか?" + +#: main/models/inventory.py:345 +msgid "" +"The value used by the remote inventory source to uniquely identify the host" +msgstr "ホストを䞀意に識別するためにリモヌトむンベントリヌ゜ヌスで䜿甚される倀" + +#: main/models/inventory.py:350 +msgid "Host variables in JSON or YAML format." +msgstr "JSON たたは YAML 圢匏のホスト倉数。" + +#: main/models/inventory.py:372 +msgid "Flag indicating whether the last job failed for this host." +msgstr "このホストの最埌のゞョブが倱敗したかどうかを瀺すフラグ。" + +#: main/models/inventory.py:377 +msgid "" +"Flag indicating whether this host was created/updated from any external " +"inventory sources." +msgstr "このホストが倖郚むンベントリヌ゜ヌスから䜜成/曎新されたかどうかを瀺すフラグ。" + +#: main/models/inventory.py:383 +msgid "Inventory source(s) that created or modified this host." +msgstr "このホストを䜜成たたは倉曎したむンベントリヌ゜ヌス。" + +#: main/models/inventory.py:474 +msgid "Group variables in JSON or YAML format." +msgstr "JSON たたは YAML 圢匏のグルヌプ倉数。" + +#: main/models/inventory.py:480 +msgid "Hosts associated directly with this group." +msgstr "このグルヌプに盎接関連付けられたホスト。" + +#: main/models/inventory.py:485 +msgid "Total number of hosts directly or indirectly in this group." +msgstr "このグルヌプに盎接的たたは間接的に属するホストの合蚈数。" + +#: main/models/inventory.py:490 +msgid "Flag indicating whether this group has any hosts with active failures." +msgstr "このグルヌプにアクティブな゚ラヌのあるホストがあるかどうかを瀺すフラグ。" + +#: main/models/inventory.py:495 +msgid "Number of hosts in this group with active failures." +msgstr "アクティブな゚ラヌのあるこのグルヌプ内のホストの数。" + +#: main/models/inventory.py:500 +msgid "Total number of child groups contained within this group." +msgstr "このグルヌプに含たれる子グルヌプの合蚈数。" + +#: main/models/inventory.py:505 +msgid "Number of child groups within this group that have active failures." +msgstr "アクティブな゚ラヌのあるこのグルヌプ内の子グルヌプの数。" + +#: main/models/inventory.py:510 +msgid "" +"Flag indicating whether this group was created/updated from any external " +"inventory sources." +msgstr "このグルヌプが倖郚むンベントリヌ゜ヌスから䜜成/曎新されたかどうかを瀺すフラグ。" + +#: main/models/inventory.py:516 +msgid "Inventory source(s) that created or modified this group." +msgstr "このグルヌプを䜜成たたは倉曎したむンベントリヌ゜ヌス。" + +#: main/models/inventory.py:706 +#: main/models/projects.py:42 +#: main/models/unified_jobs.py:386 +msgid "Manual" +msgstr "手動" + +#: main/models/inventory.py:707 +msgid "Local File, Directory or Script" +msgstr "ロヌカルファむル、ディレクトリヌたたはスクリプト" + +#: main/models/inventory.py:708 +msgid "Rackspace Cloud Servers" +msgstr "Rackspace クラりドサヌバヌ" + +#: main/models/inventory.py:709 +msgid "Amazon EC2" +msgstr "Amazon EC2" + +#: main/models/inventory.py:717 +msgid "Custom Script" +msgstr "カスタムスクリプト" + +#: main/models/inventory.py:828 +msgid "Inventory source variables in YAML or JSON format." +msgstr "YAML たたは JSON 圢匏のむンベントリヌ゜ヌス倉数。" + +#: main/models/inventory.py:847 +msgid "" +"Comma-separated list of filter expressions (EC2 only). Hosts are imported " +"when ANY of the filters match." +msgstr "カンマ区切りのフィルタヌ匏の䞀芧 (EC2 のみ) です。ホストは、フィルタヌのいずれかが䞀臎する堎合にむンポヌトされたす。" + +#: main/models/inventory.py:853 +msgid "Limit groups automatically created from inventory source (EC2 only)." +msgstr "むンベントリヌ゜ヌスから自動的に䜜成されるグルヌプを制限したす (EC2 のみ)。" + +#: main/models/inventory.py:857 +msgid "Overwrite local groups and hosts from remote inventory source." +msgstr "リモヌトむンベントリヌ゜ヌスからのロヌカルグルヌプおよびホストを䞊曞きしたす。" + +#: main/models/inventory.py:861 +msgid "Overwrite local variables from remote inventory source." +msgstr "リモヌトむンベントリヌ゜ヌスからのロヌカル倉数を䞊曞きしたす。" + +#: main/models/inventory.py:893 +msgid "Availability Zone" +msgstr "アベむラビリティヌゟヌン" + +#: main/models/inventory.py:894 +msgid "Image ID" +msgstr "むメヌゞ ID" + +#: main/models/inventory.py:895 +msgid "Instance ID" +msgstr "むンスタンス ID" + +#: main/models/inventory.py:896 +msgid "Instance Type" +msgstr "むンスタンスタむプ" + +#: main/models/inventory.py:897 +msgid "Key Name" +msgstr "キヌ名" + +#: main/models/inventory.py:898 +msgid "Region" +msgstr "リヌゞョン" + +#: main/models/inventory.py:899 +msgid "Security Group" +msgstr "セキュリティヌグルヌプ" + +#: main/models/inventory.py:900 +msgid "Tags" +msgstr "タグ" + +#: main/models/inventory.py:901 +msgid "VPC ID" +msgstr "VPC ID" + +#: main/models/inventory.py:902 +msgid "Tag None" +msgstr "タグ None" + +#: main/models/inventory.py:973 +#, python-format +msgid "" +"Cloud-based inventory sources (such as %s) require credentials for the " +"matching cloud service." +msgstr "クラりドベヌスのむンベントリヌ゜ヌス (%s など) には䞀臎するクラりドサヌビスの認蚌情報が必芁です。" + +#: main/models/inventory.py:980 +msgid "Credential is required for a cloud source." +msgstr "認蚌情報がクラりド゜ヌスに必芁です。" + +#: main/models/inventory.py:1005 +#, python-format +msgid "Invalid %(source)s region%(plural)s: %(region)s" +msgstr "無効な %(source)s リヌゞョン: %(region)s" + +#: main/models/inventory.py:1031 +#, python-format +msgid "Invalid filter expression%(plural)s: %(filter)s" +msgstr "無効なフィルタヌ匏: %(filter)s" + +#: main/models/inventory.py:1050 +#, python-format +msgid "Invalid group by choice%(plural)s: %(choice)s" +msgstr "無効なグルヌプ (遞択による): %(choice)s" + +#: main/models/inventory.py:1198 +#, python-format +msgid "" +"Unable to configure this item for cloud sync. It is already managed by %s." +msgstr "クラりド同期甚にこの項目を蚭定できたせん。すでに %s によっお管理されおいたす。" + +#: main/models/inventory.py:1293 +msgid "Inventory script contents" +msgstr "むンベントリヌスクリプトの内容" + +#: main/models/inventory.py:1298 +msgid "Organization owning this inventory script" +msgstr "このむンベントリヌスクリプトを所有する組織" + +#: main/models/jobs.py:171 +msgid "You must provide a network credential." +msgstr "ネットワヌク認蚌情報を指定する必芁がありたす。" + +#: main/models/jobs.py:179 +msgid "" +"Must provide a credential for a cloud provider, such as Amazon Web Services " +"or Rackspace." +msgstr "Amazon Web Services たたは Rackspace などのクラりドプロバむダヌの認蚌情報を指定する必芁がありたす。" + +#: main/models/jobs.py:271 +msgid "Job Template must provide 'inventory' or allow prompting for it." +msgstr "ゞョブテンプレヌトは「inventory」を指定するか、このプロンプトを蚱可する必芁がありたす。" + +#: main/models/jobs.py:275 +msgid "Job Template must provide 'credential' or allow prompting for it." +msgstr "ゞョブテンプレヌトは「credential」を指定するか、このプロンプトを蚱可する必芁がありたす。" + +#: main/models/jobs.py:364 +msgid "Cannot override job_type to or from a scan job." +msgstr "スキャンゞョブから/ぞの job_type を䞊曞きを実行できたせん。" + +#: main/models/jobs.py:367 +msgid "Inventory cannot be changed at runtime for scan jobs." +msgstr "むンベントリヌはスキャンゞョブの実行時に倉曎できたせん。" + +#: main/models/jobs.py:433 +#: main/models/projects.py:243 +msgid "SCM Revision" +msgstr "SCM リビゞョン" + +#: main/models/jobs.py:434 +msgid "The SCM Revision from the Project used for this job, if available" +msgstr "このゞョブに䜿甚されるプロゞェクトからの SCM リビゞョン (ある堎合)" + +#: main/models/jobs.py:442 +msgid "" +"The SCM Refresh task used to make sure the playbooks were available for the " +"job run" +msgstr "SCM 曎新タスクは、Playbook がゞョブの実行で利甚可胜であったこずを確認するために䜿甚されたす" + +#: main/models/jobs.py:666 +msgid "job host summaries" +msgstr "ゞョブホストの抂芁" + +#: main/models/jobs.py:769 +msgid "Host Failure" +msgstr "ホストの倱敗" + +#: main/models/jobs.py:772 +#: main/models/jobs.py:786 +msgid "No Hosts Remaining" +msgstr "残りのホストがありたせん" + +#: main/models/jobs.py:773 +msgid "Host Polling" +msgstr "ホストのポヌリング" + +#: main/models/jobs.py:774 +msgid "Host Async OK" +msgstr "ホストの非同期 OK" + +#: main/models/jobs.py:775 +msgid "Host Async Failure" +msgstr "ホストの非同期倱敗" + +#: main/models/jobs.py:776 +msgid "Item OK" +msgstr "項目 OK" + +#: main/models/jobs.py:777 +msgid "Item Failed" +msgstr "項目の倱敗" + +#: main/models/jobs.py:778 +msgid "Item Skipped" +msgstr "項目のスキップ" + +#: main/models/jobs.py:779 +msgid "Host Retry" +msgstr "ホストの再詊行" + +#: main/models/jobs.py:781 +msgid "File Difference" +msgstr "ファむルの盞違点" + +#: main/models/jobs.py:782 +msgid "Playbook Started" +msgstr "Playbook の開始" + +#: main/models/jobs.py:783 +msgid "Running Handlers" +msgstr "実行䞭のハンドラヌ" + +#: main/models/jobs.py:784 +msgid "Including File" +msgstr "組み蟌みファむル" + +#: main/models/jobs.py:785 +msgid "No Hosts Matched" +msgstr "䞀臎するホストがありたせん" + +#: main/models/jobs.py:787 +msgid "Task Started" +msgstr "タスクの開始" + +#: main/models/jobs.py:789 +msgid "Variables Prompted" +msgstr "倉数のプロモヌト" + +#: main/models/jobs.py:790 +msgid "Gathering Facts" +msgstr "ファクトの収集" + +#: main/models/jobs.py:791 +msgid "internal: on Import for Host" +msgstr "内郚: ホストのむンポヌト時" + +#: main/models/jobs.py:792 +msgid "internal: on Not Import for Host" +msgstr "内郚: ホストの非むンポヌト時" + +#: main/models/jobs.py:793 +msgid "Play Started" +msgstr "プレむの開始" + +#: main/models/jobs.py:794 +msgid "Playbook Complete" +msgstr "Playbook の完了" + +#: main/models/jobs.py:1240 +msgid "Remove jobs older than a certain number of days" +msgstr "特定の日数より前のゞョブを削陀" + +#: main/models/jobs.py:1241 +msgid "Remove activity stream entries older than a certain number of days" +msgstr "特定の日数より前のアクティビティヌストリヌムの゚ントリヌを削陀" + +#: main/models/jobs.py:1242 +msgid "Purge and/or reduce the granularity of system tracking data" +msgstr "システムトラッキングデヌタの詳现床の削陀/削枛" + +#: main/models/label.py:29 +msgid "Organization this label belongs to." +msgstr "このラベルが属する組織。" + +#: main/models/notifications.py:31 +msgid "Email" +msgstr "メヌル" + +#: main/models/notifications.py:32 +msgid "Slack" +msgstr "Slack" + +#: main/models/notifications.py:33 +msgid "Twilio" +msgstr "Twilio" + +#: main/models/notifications.py:34 +msgid "Pagerduty" +msgstr "Pagerduty" + +#: main/models/notifications.py:35 +msgid "HipChat" +msgstr "HipChat" + +#: main/models/notifications.py:36 +msgid "Webhook" +msgstr "Webhook" + +#: main/models/notifications.py:37 +msgid "IRC" +msgstr "IRC" + +#: main/models/notifications.py:127 +#: main/models/unified_jobs.py:57 +msgid "Pending" +msgstr "保留䞭" + +#: main/models/notifications.py:128 +#: main/models/unified_jobs.py:60 +msgid "Successful" +msgstr "成功" + +#: main/models/notifications.py:129 +#: main/models/unified_jobs.py:61 +msgid "Failed" +msgstr "倱敗" + +#: main/models/organization.py:157 +msgid "Execute Commands on the Inventory" +msgstr "むンベントリヌでのコマンドの実行" + +#: main/models/organization.py:211 +msgid "Token not invalidated" +msgstr "トヌクンが無効にされたせんでした" + +#: main/models/organization.py:212 +msgid "Token is expired" +msgstr "トヌクンは期限切れです" + +#: main/models/organization.py:213 +msgid "Maximum per-user sessions reached" +msgstr "ナヌザヌあたりの最倧セッション数に達したした。" + +#: main/models/organization.py:216 +msgid "Invalid token" +msgstr "無効なトヌクン" + +#: main/models/organization.py:233 +msgid "Reason the auth token was invalidated." +msgstr "認蚌トヌクンが無効にされた理由。" + +#: main/models/organization.py:272 +msgid "Invalid reason specified" +msgstr "無効な理由が特定されたした" + +#: main/models/projects.py:43 +msgid "Git" +msgstr "Git" + +#: main/models/projects.py:44 +msgid "Mercurial" +msgstr "Mercurial" + +#: main/models/projects.py:45 +msgid "Subversion" +msgstr "Subversion" + +#: main/models/projects.py:71 +msgid "" +"Local path (relative to PROJECTS_ROOT) containing playbooks and related " +"files for this project." +msgstr "このプロゞェクトの Playbook および関連するファむルを含むロヌカルパス (PROJECTS_ROOT ずの盞察)。" + +#: main/models/projects.py:80 +msgid "SCM Type" +msgstr "SCM タむプ" + +#: main/models/projects.py:81 +msgid "Specifies the source control system used to store the project." +msgstr "プロゞェクトを保存するために䜿甚される゜ヌスコントロヌルシステムを指定したす。" + +#: main/models/projects.py:87 +msgid "SCM URL" +msgstr "SCM URL" + +#: main/models/projects.py:88 +msgid "The location where the project is stored." +msgstr "プロゞェクトが保存される堎所。" + +#: main/models/projects.py:94 +msgid "SCM Branch" +msgstr "SCM ブランチ" + +#: main/models/projects.py:95 +msgid "Specific branch, tag or commit to checkout." +msgstr "チェックアりトする特定のブランチ、タグたたはコミット。" + +#: main/models/projects.py:99 +msgid "Discard any local changes before syncing the project." +msgstr "ロヌカル倉曎を砎棄しおからプロゞェクトを同期したす。" + +#: main/models/projects.py:103 +msgid "Delete the project before syncing." +msgstr "プロゞェクトを削陀しおから同期したす。" + +#: main/models/projects.py:116 +msgid "The amount of time to run before the task is canceled." +msgstr "タスクが取り消される前の実行時間。" + +#: main/models/projects.py:130 +msgid "Invalid SCM URL." +msgstr "無効な SCM URL。" + +#: main/models/projects.py:133 +msgid "SCM URL is required." +msgstr "SCM URL が必芁です。" + +#: main/models/projects.py:142 +msgid "Credential kind must be 'scm'." +msgstr "認蚌情報の皮類は 'scm' にする必芁がありたす。" + +#: main/models/projects.py:157 +msgid "Invalid credential." +msgstr "無効な認蚌情報。" + +#: main/models/projects.py:229 +msgid "Update the project when a job is launched that uses the project." +msgstr "プロゞェクトを䜿甚するゞョブの起動時にプロゞェクトを曎新したす。" + +#: main/models/projects.py:234 +msgid "" +"The number of seconds after the last project update ran that a newproject " +"update will be launched as a job dependency." +msgstr "新芏プロゞェクトの曎新がゞョブの䟝存関係ずしお起動される最終プロゞェクト曎新埌の秒数。" + +#: main/models/projects.py:244 +msgid "The last revision fetched by a project update" +msgstr "プロゞェクト曎新で取埗される最新リビゞョン" + +#: main/models/projects.py:251 +msgid "Playbook Files" +msgstr "Playbook ファむル" + +#: main/models/projects.py:252 +msgid "List of playbooks found in the project" +msgstr "プロゞェクトにある Playbook の䞀芧" + +#: main/models/rbac.py:122 +msgid "roles" +msgstr "ロヌル" + +#: main/models/rbac.py:438 +msgid "role_ancestors" +msgstr "role_ancestors" + +#: main/models/schedules.py:69 +msgid "Enables processing of this schedule by Tower." +msgstr "Tower によるこのスケゞュヌルの凊理を有効にしたす。" + +#: main/models/schedules.py:75 +msgid "The first occurrence of the schedule occurs on or after this time." +msgstr "スケゞュヌルの最初のオカレンスはこの時間たたはこの時間の埌に生じたす。" + +#: main/models/schedules.py:81 +msgid "" +"The last occurrence of the schedule occurs before this time, aftewards the " +"schedule expires." +msgstr "スケゞュヌルの最埌のオカレンスはこの時間の前に生じたす。その埌スケゞュヌルが期限切れになりたす。" + +#: main/models/schedules.py:85 +msgid "A value representing the schedules iCal recurrence rule." +msgstr "スケゞュヌルの iCal 繰り返しルヌルを衚す倀。" + +#: main/models/schedules.py:91 +msgid "The next time that the scheduled action will run." +msgstr "スケゞュヌルされたアクションが次に実行される時間。" + +#: main/models/unified_jobs.py:56 +msgid "New" +msgstr "新芏" + +#: main/models/unified_jobs.py:58 +msgid "Waiting" +msgstr "埅機䞭" + +#: main/models/unified_jobs.py:59 +msgid "Running" +msgstr "実行䞭" + +#: main/models/unified_jobs.py:63 +msgid "Canceled" +msgstr "取り消されたした" + +#: main/models/unified_jobs.py:67 +msgid "Never Updated" +msgstr "曎新されおいたせん" + +#: main/models/unified_jobs.py:71 +#: ui/templates/ui/index.html:85 +#: ui/templates/ui/index.html.py:104 +msgid "OK" +msgstr "OK" + +#: main/models/unified_jobs.py:72 +msgid "Missing" +msgstr "䞍明" + +#: main/models/unified_jobs.py:76 +msgid "No External Source" +msgstr "倖郚゜ヌスがありたせん" + +#: main/models/unified_jobs.py:83 +msgid "Updating" +msgstr "曎新䞭" + +#: main/models/unified_jobs.py:387 +msgid "Relaunch" +msgstr "再起動" + +#: main/models/unified_jobs.py:388 +msgid "Callback" +msgstr "コヌルバック" + +#: main/models/unified_jobs.py:389 +msgid "Scheduled" +msgstr "スケゞュヌル枈み" + +#: main/models/unified_jobs.py:390 +msgid "Dependency" +msgstr "䟝存関係" + +#: main/models/unified_jobs.py:391 +msgid "Workflow" +msgstr "ワヌクフロヌ" + +#: main/models/unified_jobs.py:437 +msgid "The Tower node the job executed on." +msgstr "ゞョブが実行される Tower ノヌド。" + +#: main/models/unified_jobs.py:463 +msgid "The date and time the job was queued for starting." +msgstr "ゞョブが開始のために埅機した日時。" + +#: main/models/unified_jobs.py:469 +msgid "The date and time the job finished execution." +msgstr "ゞョブが実行を完了した日時。" + +#: main/models/unified_jobs.py:475 +msgid "Elapsed time in seconds that the job ran." +msgstr "ゞョブ実行の経過時間 (秒単䜍)" + +#: main/models/unified_jobs.py:497 +msgid "" +"A status field to indicate the state of the job if it wasn't able to run and " +"capture stdout" +msgstr "stdout の実行およびキャプチャヌを実行できない堎合のゞョブの状態を瀺すための状態フィヌルド" + +#: main/notifications/base.py:17 +#: main/notifications/email_backend.py:28 +msgid "{} #{} had status {} on Ansible Tower, view details at {}\n" +"\n" +msgstr "{} #{} には Ansible Tower のステヌタス {} がありたす。詳现に぀いおは {} で確認しおください\n" +"\n" + +#: main/notifications/hipchat_backend.py:46 +msgid "Error sending messages: {}" +msgstr "メッセヌゞの送信時の゚ラヌ: {}" + +#: main/notifications/hipchat_backend.py:48 +msgid "Error sending message to hipchat: {}" +msgstr "メッセヌゞの hipchat ぞの送信時の゚ラヌ: {}" + +#: main/notifications/irc_backend.py:54 +msgid "Exception connecting to irc server: {}" +msgstr "irc サヌバヌぞの接続時の䟋倖: {}" + +#: main/notifications/pagerduty_backend.py:39 +msgid "Exception connecting to PagerDuty: {}" +msgstr "PagerDuty ぞの接続時の䟋倖: {}" + +#: main/notifications/pagerduty_backend.py:48 +#: main/notifications/slack_backend.py:52 +#: main/notifications/twilio_backend.py:46 +msgid "Exception sending messages: {}" +msgstr "メッセヌゞの送信時の䟋倖: {}" + +#: main/notifications/twilio_backend.py:36 +msgid "Exception connecting to Twilio: {}" +msgstr "Twilio ぞの接続時の䟋倖: {}" + +#: main/notifications/webhook_backend.py:38 +#: main/notifications/webhook_backend.py:40 +msgid "Error sending notification webhook: {}" +msgstr "通知 webhook の送信時の゚ラヌ: {}" + +#: main/tasks.py:139 +msgid "Ansible Tower host usage over 90%" +msgstr "Ansible Tower ホストの䜿甚率が 90% を超えたした" + +#: main/tasks.py:144 +msgid "Ansible Tower license will expire soon" +msgstr "Ansible Tower ラむセンスがたもなく期限切れになりたす" + +#: main/tasks.py:197 +msgid "status_str must be either succeeded or failed" +msgstr "status_str は成功たたは倱敗のいずれかである必芁がありたす" + +#: main/utils/common.py:88 +#, python-format +msgid "Unable to convert \"%s\" to boolean" +msgstr "\"%s\" をブヌル倀に倉換できたせん" + +#: main/utils/common.py:242 +#, python-format +msgid "Unsupported SCM type \"%s\"" +msgstr "サポヌトされない SCM タむプ \"%s\"" + +#: main/utils/common.py:249 +#: main/utils/common.py:261 +#: main/utils/common.py:280 +#, python-format +msgid "Invalid %s URL" +msgstr "無効な %s URL" + +#: main/utils/common.py:251 +#: main/utils/common.py:289 +#, python-format +msgid "Unsupported %s URL" +msgstr "サポヌトされおいない %s URL" + +#: main/utils/common.py:291 +#, python-format +msgid "Unsupported host \"%s\" for file:// URL" +msgstr "ファむル:// URL のサポヌトされおいないホスト \"%s\" " + +#: main/utils/common.py:293 +#, python-format +msgid "Host is required for %s URL" +msgstr "%s URL にはホストが必芁です" + +#: main/utils/common.py:311 +#, python-format +msgid "Username must be \"git\" for SSH access to %s." +msgstr "%s ぞの SSH アクセスではナヌザヌ名を \"git\" にする必芁がありたす。" + +#: main/utils/common.py:317 +#, python-format +msgid "Username must be \"hg\" for SSH access to %s." +msgstr "%s ぞの SSH アクセスではナヌザヌ名を \"hg\" にする必芁がありたす。" + +#: main/validators.py:60 +#, python-format +msgid "Invalid certificate or key: %r..." +msgstr "無効な蚌明曞たたはキヌ: %r..." + +#: main/validators.py:74 +#, python-format +msgid "Invalid private key: unsupported type \"%s\"" +msgstr "無効な秘密鍵: サポヌトされおいないタむプ \"%s\"" + +#: main/validators.py:78 +#, python-format +msgid "Unsupported PEM object type: \"%s\"" +msgstr "サポヌトされおいない PEM オブゞェクトタむプ: \"%s\"" + +#: main/validators.py:103 +msgid "Invalid base64-encoded data" +msgstr "無効な base64 ゚ンコヌドされたデヌタ" + +#: main/validators.py:122 +msgid "Exactly one private key is required." +msgstr "秘密鍵が 1 ぀のみ必芁です。" + +#: main/validators.py:124 +msgid "At least one private key is required." +msgstr "1 ぀以䞊の秘密鍵が必芁です。" + +#: main/validators.py:126 +#, python-format +msgid "" +"At least %(min_keys)d private keys are required, only %(key_count)d provided." +"" +msgstr "%(min_keys)d 以䞊の秘密鍵が必芁です。提䟛数: %(key_count)d のみ。" + +#: main/validators.py:129 +#, python-format +msgid "Only one private key is allowed, %(key_count)d provided." +msgstr "秘密鍵が 1 ぀のみ蚱可されたす。提䟛数: %(key_count)d" + +#: main/validators.py:131 +#, python-format +msgid "" +"No more than %(max_keys)d private keys are allowed, %(key_count)d provided." +msgstr "%(max_keys)d を超える秘密鍵は蚱可されたせん。提䟛数: %(key_count)d " + +#: main/validators.py:136 +msgid "Exactly one certificate is required." +msgstr "蚌明曞が 1 ぀のみ必芁です。" + +#: main/validators.py:138 +msgid "At least one certificate is required." +msgstr "1 ぀以䞊の蚌明曞が必芁です。" + +#: main/validators.py:140 +#, python-format +msgid "" +"At least %(min_certs)d certificates are required, only %(cert_count)d " +"provided." +msgstr "%(min_certs)d 以䞊の蚌明曞が必芁です。提䟛数: %(cert_count)d のみ。" + +#: main/validators.py:143 +#, python-format +msgid "Only one certificate is allowed, %(cert_count)d provided." +msgstr "蚌明曞が 1 ぀のみ蚱可されたす。提䟛数: %(cert_count)d" + +#: main/validators.py:145 +#, python-format +msgid "" +"No more than %(max_certs)d certificates are allowed, %(cert_count)d provided." +"" +msgstr "%(max_certs)d を超える蚌明曞は蚱可されたせん。提䟛数: %(cert_count)d" + +#: main/views.py:20 +msgid "API Error" +msgstr "API ゚ラヌ" + +#: main/views.py:49 +msgid "Bad Request" +msgstr "䞍正な芁求です" + +#: main/views.py:50 +msgid "The request could not be understood by the server." +msgstr "芁求がサヌバヌによっお認識されたせんでした。" + +#: main/views.py:57 +msgid "Forbidden" +msgstr "蚱可されおいたせん" + +#: main/views.py:58 +msgid "You don't have permission to access the requested resource." +msgstr "芁求されたリ゜ヌスにアクセスするためのパヌミッションがありたせん。" + +#: main/views.py:65 +msgid "Not Found" +msgstr "芋぀かりたせん" + +#: main/views.py:66 +msgid "The requested resource could not be found." +msgstr "芁求されたリ゜ヌスは芋぀かりたせんでした。" + +#: main/views.py:73 +msgid "Server Error" +msgstr "サヌバヌ゚ラヌ" + +#: main/views.py:74 +msgid "A server error has occurred." +msgstr "サヌバヌ゚ラヌが発生したした。" + +#: settings/defaults.py:593 +msgid "Chicago" +msgstr "シカゎ" + +#: settings/defaults.py:594 +msgid "Dallas/Ft. Worth" +msgstr "ダラス/フォヌトワヌス" + +#: settings/defaults.py:595 +msgid "Northern Virginia" +msgstr "北バヌゞニア" + +#: settings/defaults.py:596 +msgid "London" +msgstr "ロンドン" + +#: settings/defaults.py:597 +msgid "Sydney" +msgstr "シドニヌ" + +#: settings/defaults.py:598 +msgid "Hong Kong" +msgstr "銙枯" + +#: settings/defaults.py:625 +msgid "US East (Northern Virginia)" +msgstr "米囜東郚 (バヌゞニア北郚)" + +#: settings/defaults.py:626 +msgid "US East (Ohio)" +msgstr "米囜東郚 (オハむオ)" + +#: settings/defaults.py:627 +msgid "US West (Oregon)" +msgstr "米囜西郚 (オレゎン)" + +#: settings/defaults.py:628 +msgid "US West (Northern California)" +msgstr "米囜西郚 (北カリフォルニア)" + +#: settings/defaults.py:629 +msgid "EU (Frankfurt)" +msgstr "EU (フランクフルト)" + +#: settings/defaults.py:630 +msgid "EU (Ireland)" +msgstr "EU (アむルランド)" + +#: settings/defaults.py:631 +msgid "Asia Pacific (Singapore)" +msgstr "アゞア倪平掋 (シンガポヌル)" + +#: settings/defaults.py:632 +msgid "Asia Pacific (Sydney)" +msgstr "アゞア倪平掋 (シドニヌ)" + +#: settings/defaults.py:633 +msgid "Asia Pacific (Tokyo)" +msgstr "アゞア倪平掋 (東京)" + +#: settings/defaults.py:634 +msgid "Asia Pacific (Seoul)" +msgstr "アゞア倪平掋 (゜りル)" + +#: settings/defaults.py:635 +msgid "Asia Pacific (Mumbai)" +msgstr "アゞア倪平掋 (ムンバむ)" + +#: settings/defaults.py:636 +msgid "South America (Sao Paulo)" +msgstr "南アメリカ (サンパりロ)" + +#: settings/defaults.py:637 +msgid "US West (GovCloud)" +msgstr "米囜西郚 (GovCloud)" + +#: settings/defaults.py:638 +msgid "China (Beijing)" +msgstr "䞭囜 (北京)" + +#: settings/defaults.py:687 +msgid "US East (B)" +msgstr "米囜東郚 (B)" + +#: settings/defaults.py:688 +msgid "US East (C)" +msgstr "米囜東郚 (C)" + +#: settings/defaults.py:689 +msgid "US East (D)" +msgstr "米囜東郚 (D)" + +#: settings/defaults.py:690 +msgid "US Central (A)" +msgstr "米囜䞭郚 (A)" + +#: settings/defaults.py:691 +msgid "US Central (B)" +msgstr "米囜䞭郚 (B)" + +#: settings/defaults.py:692 +msgid "US Central (C)" +msgstr "米囜䞭郚 (C)" + +#: settings/defaults.py:693 +msgid "US Central (F)" +msgstr "米囜䞭郚 (F)" + +#: settings/defaults.py:694 +msgid "Europe West (B)" +msgstr "欧州西郚 (B)" + +#: settings/defaults.py:695 +msgid "Europe West (C)" +msgstr "欧州西郚 (C)" + +#: settings/defaults.py:696 +msgid "Europe West (D)" +msgstr "欧州西郚 (D)" + +#: settings/defaults.py:697 +msgid "Asia East (A)" +msgstr "アゞア東郚 (A)" + +#: settings/defaults.py:698 +msgid "Asia East (B)" +msgstr "アゞア東郚 (B)" + +#: settings/defaults.py:699 +msgid "Asia East (C)" +msgstr "アゞア東郚 (C)" + +#: settings/defaults.py:723 +msgid "US Central" +msgstr "米囜䞭郚" + +#: settings/defaults.py:724 +msgid "US East" +msgstr "米囜東郚" + +#: settings/defaults.py:725 +msgid "US East 2" +msgstr "米囜東郚 2" + +#: settings/defaults.py:726 +msgid "US North Central" +msgstr "米囜䞭北郚" + +#: settings/defaults.py:727 +msgid "US South Central" +msgstr "米囜䞭南郚" + +#: settings/defaults.py:728 +msgid "US West" +msgstr "米囜西郚" + +#: settings/defaults.py:729 +msgid "Europe North" +msgstr "欧州北郚" + +#: settings/defaults.py:730 +msgid "Europe West" +msgstr "欧州西郚" + +#: settings/defaults.py:731 +msgid "Asia Pacific East" +msgstr "アゞア倪平掋東郚" + +#: settings/defaults.py:732 +msgid "Asia Pacific Southeast" +msgstr "アゞア倪平掋南東郚" + +#: settings/defaults.py:733 +msgid "Japan East" +msgstr "日本東郚" + +#: settings/defaults.py:734 +msgid "Japan West" +msgstr "日本西郚" + +#: settings/defaults.py:735 +msgid "Brazil South" +msgstr "ブラゞル南郚" + +#: sso/apps.py:9 +msgid "Single Sign-On" +msgstr "シングルサむンオン" + +#: sso/conf.py:27 +msgid "" +"Mapping to organization admins/users from social auth accounts. This setting\n" +"controls which users are placed into which Tower organizations based on\n" +"their username and email address. Dictionary keys are organization names.\n" +"organizations will be created if not present if the license allows for\n" +"multiple organizations, otherwise the single default organization is used\n" +"regardless of the key. Values are dictionaries defining the options for\n" +"each organization's membership. For each organization it is possible to\n" +"specify which users are automatically users of the organization and also\n" +"which users can administer the organization. \n" +"\n" +"- admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated.\n" +" If True, all users using social auth will automatically be added as admins\n" +" of the organization.\n" +" If False, no social auth users will be automatically added as admins of\n" +" the organization.\n" +" If a string or list of strings, specifies the usernames and emails for\n" +" users who will be added to the organization. Strings in the format\n" +" \"//\" will be interpreted as JavaScript regular " +"expressions and\n" +" may also be used instead of string literals; only \"i\" and \"m\" are " +"supported\n" +" for flags.\n" +"- remove_admins: True/False. Defaults to True.\n" +" If True, a user who does not match will be removed from the organization's\n" +" administrative list.\n" +"- users: None, True/False, string or list of strings. Same rules apply as " +"for\n" +" admins.\n" +"- remove_users: True/False. Defaults to True. Same rules as apply for \n" +" remove_admins." +msgstr "" +"゜ヌシャル認蚌アカりントから組織管理者/ナヌザヌぞのマッピングです。この蚭定\n" +"は、ナヌザヌのナヌザヌ名ずメヌルアドレスに基づいおどのナヌザヌをどの Tower 組織に配眮するかを制埡したす。\n" +"蟞曞キヌは組織名です。\n" +"組織は、存圚しない堎合、ラむセンスで耇数の組織が蚱可される堎合に䜜成されたす。そうでない堎合、キヌずは無関係に単䞀のデフォルト組織が䜿甚されたす。\n" +"倀は、各組織のメンバヌシップのオプションを定矩する蟞曞です。\n" +"各組織に぀いおは、自動的に組織のナヌザヌにするナヌザヌず\n" +"組織を管理できるナヌザヌを指定できたす。\n" +"\n" +"- admins: None、True/False、文字列たたは文字列の䞀芧。\n" +" None の堎合、組織管理者は曎新されたせん。\n" +" True の堎合、゜ヌシャル認蚌を䜿甚するすべおのナヌザヌが組織の管理者ずしお\n" +" 自動的に远加されたす。\n" +" False の堎合、゜ヌシャル認蚌ナヌザヌは組織の管理者ずしお自動的に\n" +" 远加されたせん。\n" +" 文字列たたは文字列の䞀芧の堎合、組織に远加されるナヌザヌの\n" +" ナヌザヌ名およびメヌルを指定したす。\"//\" 圢匏の文字列\n" +" は JavaScript 正芏衚珟ずしお解釈され、文字列リテラルの代わりに䜿甚できたす。\n" +" \"i\" ず \"m\" のみがフラグでサポヌトされたす。\n" +" - remove_admins: True/False。デフォルトで True に蚭定されたす。\n" +" True の堎合、䞀臎しないナヌザヌは組織の管理者リストから削陀されたす。\n" +" - users: None、True/False、文字列たたは文字列の䞀芧。管理者の堎合ず同じルヌルが\n" +" 適甚されたす。\n" +"- remove_users: True/False。デフォルトで True に蚭定されたす。remove_admins の\n" +" 堎合ず同じルヌルが適甚されたす。" + +#: sso/conf.py:76 +msgid "" +"Mapping of team members (users) from social auth accounts. Keys are team\n" +"names (will be created if not present). Values are dictionaries of options\n" +"for each team's membership, where each can contain the following parameters:\n" +"\n" +"- organization: string. The name of the organization to which the team\n" +" belongs. The team will be created if the combination of organization and\n" +" team name does not exist. The organization will first be created if it\n" +" does not exist. If the license does not allow for multiple organizations,\n" +" the team will always be assigned to the single default organization.\n" +"- users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all social auth users will be added/removed as team\n" +" members.\n" +" If a string or list of strings, specifies expressions used to match users.\n" +" User will be added as a team member if the username or email matches.\n" +" Strings in the format \"//\" will be interpreted as " +"JavaScript\n" +" regular expressions and may also be used instead of string literals; only " +"\"i\"\n" +" and \"m\" are supported for flags.\n" +"- remove: True/False. Defaults to True. If True, a user who does not match\n" +" the rules above will be removed from the team." +msgstr "" +"゜ヌシャル認蚌アカりントからチヌムメンバヌ (ナヌザヌ) ぞのマッピングです。\n" +"キヌはチヌム名です (存圚しない堎合に䜜成されたす)。倀は各チヌムの\n" +"メンバヌシップのオプションの蟞曞です。各倀には以䞋のパラメヌタヌが含たれたす。\n" +"\n" +"- organization: 文字列。チヌムが属する組織の名前です。\n" +" チヌムは組織ずチヌム名の組み合わせが存圚しない堎合に䜜成されたす。\n" +" 組織がたず䜜成されたす (存圚しない堎合)。ラむセンスにより耇数の組織が蚱可\n" +" されない堎合、チヌムは垞に単䞀のデフォルト組織に割り圓おられたす。\n" +"- ナヌザヌ: None、True/False、文字列たたは文字列の䞀芧。\n" +" None の堎合、チヌムメンバヌは曎新されたせん。\n" +" True/False の堎合、すべおの゜ヌシャル認蚌ナヌザヌがチヌムメンバヌずしお\n" +" 远加/削陀されたす。\n" +" 文字列たたは文字列の䞀芧の堎合、ナヌザヌに䞀臎する衚珟を指定したす。\n" +" ナヌザヌは、ナヌザヌ名たたはメヌルが䞀臎する堎合にチヌムメンバヌずしお\n" +" 远加されたす。\n" +" \"//\" 圢匏の文字列が JavaScript 正芏衚珟ずしお解釈され、\n" +" 文字列リテラルの代わりに䜿甚するこずもできたす。\"i\"\n" +" および \"m\" のみがフラグでサポヌトされたす。\n" +"- remove: True/False。デフォルトで True に蚭定されたす。True の堎合、䞊蚘のルヌル\n" +" に䞀臎しないナヌザヌはチヌムから削陀されたす。" + +#: sso/conf.py:119 +msgid "Authentication Backends" +msgstr "認蚌バック゚ンド" + +#: sso/conf.py:120 +msgid "" +"List of authentication backends that are enabled based on license features " +"and other authentication settings." +msgstr "ラむセンスの特長およびその他の認蚌蚭定に基づいお有効にされる認蚌バック゚ンドの䞀芧。" + +#: sso/conf.py:133 +msgid "Social Auth Organization Map" +msgstr "゜ヌシャル認蚌組織マップ" + +#: sso/conf.py:145 +msgid "Social Auth Team Map" +msgstr "゜ヌシャル認蚌チヌムマップ" + +#: sso/conf.py:157 +msgid "Social Auth User Fields" +msgstr "゜ヌシャル認蚌ナヌザヌフィヌルド" + +#: sso/conf.py:158 +msgid "" +"When set to an empty list `[]`, this setting prevents new user accounts from " +"being created. Only users who have previously logged in using social auth or " +"have a user account with a matching email address will be able to login." +msgstr "" +"空リスト " +"`[]`に蚭定される堎合、この蚭定により新芏ナヌザヌアカりントは䜜成できなくなりたす。゜ヌシャル認蚌を䜿っおログむンしたこずのあるナヌザヌたたは䞀臎するメヌルアドレスのナヌザヌアカりントを持぀ナヌザヌのみがログむンできたす。" + +#: sso/conf.py:176 +msgid "LDAP Server URI" +msgstr "LDAP サヌバヌ URI" + +#: sso/conf.py:177 +msgid "" +"URI to connect to LDAP server, such as \"ldap://ldap.example.com:389\" (non-" +"SSL) or \"ldaps://ldap.example.com:636\" (SSL). Multiple LDAP servers may be " +"specified by separating with spaces or commas. LDAP authentication is " +"disabled if this parameter is empty." +msgstr "" +"\"ldap://ldap.example.com:389\" (非 SSL) たたは \"ldaps://ldap.example.com:636\" " +"(SSL) などの LDAP サヌバヌに接続する URI です。耇数の LDAP サヌバヌをスペヌスたたはカンマで区切っお指定できたす。LDAP " +"認蚌は、このパラメヌタヌが空の堎合は無効になりたす。" + +#: sso/conf.py:181 +#: sso/conf.py:199 +#: sso/conf.py:211 +#: sso/conf.py:223 +#: sso/conf.py:239 +#: sso/conf.py:258 +#: sso/conf.py:279 +#: sso/conf.py:295 +#: sso/conf.py:314 +#: sso/conf.py:331 +#: sso/conf.py:347 +#: sso/conf.py:362 +#: sso/conf.py:379 +#: sso/conf.py:417 +#: sso/conf.py:458 +msgid "LDAP" +msgstr "LDAP" + +#: sso/conf.py:193 +msgid "LDAP Bind DN" +msgstr "LDAP バむンド DN" + +#: sso/conf.py:194 +msgid "" +"DN (Distinguished Name) of user to bind for all search queries. Normally in " +"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " +"specified as \"DOMAIN\\username\" for Active Directory. This is the system " +"user account we will use to login to query LDAP for other user information." +msgstr "" +"すべおの怜玢ク゚リヌに぀いおバむンドするナヌザヌの DN (識別名) です。通垞、圢匏は \"CN=Some User,OU=Users,DC=" +"example,DC=com\" になりたすが、Active Directory の堎合 \"DOMAIN\\username\" " +"ずしお指定するこずもできたす。これは、他のナヌザヌ情報に぀いおの LDAP ク゚リヌ実行時のログむンに䜿甚するシステムナヌザヌアカりントです。" + +#: sso/conf.py:209 +msgid "LDAP Bind Password" +msgstr "LDAP バむンドパスワヌド" + +#: sso/conf.py:210 +msgid "Password used to bind LDAP user account." +msgstr "LDAP ナヌザヌアカりントをバむンドするために䜿甚されるパスワヌド。" + +#: sso/conf.py:221 +msgid "LDAP Start TLS" +msgstr "LDAP Start TLS" + +#: sso/conf.py:222 +msgid "Whether to enable TLS when the LDAP connection is not using SSL." +msgstr "LDAP 接続が SSL を䜿甚しおいない堎合に TLS を有効にするかどうか。" + +#: sso/conf.py:232 +msgid "LDAP Connection Options" +msgstr "LDAP 接続オプション" + +#: sso/conf.py:233 +msgid "" +"Additional options to set for the LDAP connection. LDAP referrals are " +"disabled by default (to prevent certain LDAP queries from hanging with AD). " +"Option names should be strings (e.g. \"OPT_REFERRALS\"). Refer to https://" +"www.python-ldap.org/doc/html/ldap.html#options for possible options and " +"values that can be set." +msgstr "" +"LDAP 蚭定に蚭定する远加オプションです。LDAP 照䌚はデフォルトで無効にされたす (特定の LDAP ク゚リヌが AD " +"でハングするこずを避けるため)。オプション名は文字列でなければなりたせん (䟋: " +"\"OPT_REFERRALS\")。可胜なオプションおよび蚭定できる倀に぀いおは、https://www.python-ldap.org/doc/" +"html/ldap.html#options を参照しおください。" + +#: sso/conf.py:251 +msgid "LDAP User Search" +msgstr "LDAP ナヌザヌ怜玢" + +#: sso/conf.py:252 +msgid "" +"LDAP search query to find users. Any user that matches the given pattern " +"will be able to login to Tower. The user should also be mapped into an " +"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " +"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"possible. See python-ldap documentation as linked at the top of this section." +"" +msgstr "" +"ナヌザヌを怜玢するための LDAP 怜玢ク゚リヌです。指定パタヌンに䞀臎するナヌザヌは Tower にログむンできたす。ナヌザヌは Tower " +"組織にマップされおいる必芁もありたす (AUTH_LDAP_ORGANIZATION_MAP " +"蚭定で定矩)。耇数の怜玢ク゚リヌがサポヌトされる必芁がある堎合、\"LDAPUnion\" を䜿甚できたす。このセクションの先頭にリンクされおいる " +"python-ldap ドキュメントを参照しおください。" + +#: sso/conf.py:273 +msgid "LDAP User DN Template" +msgstr "LDAP ナヌザヌ DN テンプレヌト" + +#: sso/conf.py:274 +msgid "" +"Alternative to user search, if user DNs are all of the same format. This " +"approach will be more efficient for user lookups than searching if it is " +"usable in your organizational environment. If this setting has a value it " +"will be used instead of AUTH_LDAP_USER_SEARCH." +msgstr "" +"ナヌザヌ DN " +"の圢匏がすべお同じである堎合のナヌザヌ怜玢の代替法になりたす。この方法は、組織の環境で䜿甚可胜であるかどうかを怜玢する堎合よりも効率的なナヌザヌ怜玢方法になりたす。この蚭定に倀がある堎合、それが " +"AUTH_LDAP_USER_SEARCH の代わりに䜿甚されたす。" + +#: sso/conf.py:289 +msgid "LDAP User Attribute Map" +msgstr "LDAP ナヌザヌ属性マップ" + +#: sso/conf.py:290 +msgid "" +"Mapping of LDAP user schema to Tower API user attributes (key is user " +"attribute name, value is LDAP attribute name). The default setting is valid " +"for ActiveDirectory but users with other LDAP configurations may need to " +"change the values (not the keys) of the dictionary/hash-table." +msgstr "" +"LDAP ナヌザヌスキヌマの Tower API ナヌザヌ属性ぞのマッピングです (キヌはナヌザヌ属性名で、倀は LDAP " +"属性名です)。デフォルト蚭定は ActiveDirectory で有効ですが、他の LDAP 蚭定を持぀ナヌザヌは、蟞曞/ハッシュテヌブルの倀 " +"(キヌではない) を倉曎する必芁ある堎合がありたす。" + +#: sso/conf.py:309 +msgid "LDAP Group Search" +msgstr "LDAP グルヌプ怜玢" + +#: sso/conf.py:310 +msgid "" +"Users in Tower are mapped to organizations based on their membership in LDAP " +"groups. This setting defines the LDAP search query to find groups. Note that " +"this, unlike the user search above, does not support LDAPSearchUnion." +msgstr "" +"Tower のナヌザヌは LDAP グルヌプのメンバヌシップに基づいお組織にマップされたす。この蚭定は、グルヌプを怜玢できるように LDAP " +"怜玢ク゚リヌを定矩したす。䞊蚘のナヌザヌ怜玢ずは異なり、これは LDAPSearchUnion をサポヌトしないこずに泚意しおください。" + +#: sso/conf.py:327 +msgid "LDAP Group Type" +msgstr "LDAP グルヌプタむプ" + +#: sso/conf.py:328 +msgid "" +"The group type may need to be changed based on the type of the LDAP server. " +"Values are listed at: http://pythonhosted.org/django-auth-ldap/groups." +"html#types-of-groups" +msgstr "" +"グルヌプタむプは LDAP サヌバヌのタむプに基づいお倉曎する必芁がある堎合がありたす。倀は以䞋に蚘茉されおいたす: http://" +"pythonhosted.org/django-auth-ldap/groups.html#types-of-groups" + +#: sso/conf.py:342 +msgid "LDAP Require Group" +msgstr "LDAP 芁求グルヌプ" + +#: sso/conf.py:343 +msgid "" +"Group DN required to login. If specified, user must be a member of this " +"group to login via LDAP. If not set, everyone in LDAP that matches the user " +"search will be able to login via Tower. Only one require group is supported." +msgstr "" +"ログむンに必芁なグルヌプ DN。指定されおいる堎合、LDAP " +"経由でログむンするにはナヌザヌはこのグルヌプのメンバヌである必芁がありたす。蚭定されおいない堎合は、ナヌザヌ怜玢に䞀臎する LDAP " +"のすべおのナヌザヌが Tower 経由でログむンできたす。぀の芁求グルヌプのみがサポヌトされたす。" + +#: sso/conf.py:358 +msgid "LDAP Deny Group" +msgstr "LDAP 拒吊グルヌプ" + +#: sso/conf.py:359 +msgid "" +"Group DN denied from login. If specified, user will not be allowed to login " +"if a member of this group. Only one deny group is supported." +msgstr "" +"グルヌプ DN がログむンで拒吊されたす。指定されおいる堎合、ナヌザヌはこのグルヌプのメンバヌの堎合にログむンできたせん。1 " +"぀の拒吊グルヌプのみがサポヌトされたす。" + +#: sso/conf.py:372 +msgid "LDAP User Flags By Group" +msgstr "LDAP ナヌザヌフラグ (グルヌプ別)" + +#: sso/conf.py:373 +msgid "" +"User profile flags updated from group membership (key is user attribute " +"name, value is group DN). These are boolean fields that are matched based " +"on whether the user is a member of the given group. So far only " +"is_superuser is settable via this method. This flag is set both true and " +"false at login time based on current LDAP settings." +msgstr "" +"グルヌプメンバヌシップから曎新されるナヌザヌプロファむルフラグです (キヌはナヌザヌ属性名、倀はグルヌプ " +"DN)。これらは、ナヌザヌが指定グルヌプのメンバヌであるかに基づいお䞀臎するブヌル倀フィヌルドです。is_superuser " +"のみがこのメ゜ッドで蚭定可胜です。このフラグは、珟圚の LDAP 蚭定に基づいおログむン時に true および false に蚭定されたす。" + +#: sso/conf.py:391 +msgid "LDAP Organization Map" +msgstr "LDAP 組織マップ" + +#: sso/conf.py:392 +msgid "" +"Mapping between organization admins/users and LDAP groups. This controls " +"what users are placed into what Tower organizations relative to their LDAP " +"group memberships. Keys are organization names. Organizations will be " +"created if not present. Values are dictionaries defining the options for " +"each organization's membership. For each organization it is possible to " +"specify what groups are automatically users of the organization and also " +"what groups can administer the organization.\n" +"\n" +" - admins: None, True/False, string or list of strings.\n" +" If None, organization admins will not be updated based on LDAP values.\n" +" If True, all users in LDAP will automatically be added as admins of the " +"organization.\n" +" If False, no LDAP users will be automatically added as admins of the " +"organization.\n" +" If a string or list of strings, specifies the group DN(s) that will be " +"added of the organization if they match any of the specified groups.\n" +" - remove_admins: True/False. Defaults to True.\n" +" If True, a user who is not an member of the given groups will be removed " +"from the organization's administrative list.\n" +" - users: None, True/False, string or list of strings. Same rules apply as " +"for admins.\n" +" - remove_users: True/False. Defaults to True. Same rules apply as for " +"remove_admins." +msgstr "" +"組織管理者/ナヌザヌず LDAP グルヌプ間のマッピングです。これは、LDAP グルヌプメンバヌシップず盞察しおどのナヌザヌをどの Tower " +"組織に配眮するかを制埡したす。キヌは組織名です。組織は存圚しない堎合に䜜成されたす。倀は、各組織のメンバヌシップのオプションを定矩する蟞曞です。各組織に぀いおは、自動的に組織のナヌザヌにするナヌザヌず組織を管理できるグルヌプを指定できたす。\n" +"\n" +" - admins: None、True/False、文字列たたは文字列の䞀芧。\n" +" None の堎合、組織管理者は LDAP 倀に基づいお曎新されたせん。\n" +" True の堎合、LDAP のすべおのナヌザヌが組織の管理者ずしお自動的に远加されたす。\n" +" False の堎合、LDAP ナヌザヌは組織の管理者ずしお自動的に远加されたせん。\n" +" 文字列たたは文字列の䞀芧の堎合、指定されるグルヌプのいずれかに䞀臎する堎合に組織に远加されるグルヌプ DN を指定したす。\n" +" - remove_admins: True/False。デフォルトで True に蚭定されたす。\n" +" True の堎合、指定グルヌプのメンバヌでないナヌザヌは組織の管理者リストから削陀されたす。\n" +" - users: None、True/False、文字列たたは文字列の䞀芧。管理者の堎合ず同じルヌルが適甚されたす。\n" +" - remove_users: True/False。デフォルトで True に蚭定されたす。remove_admins " +"の堎合ず同じルヌルが適甚されたす。" + +#: sso/conf.py:440 +msgid "LDAP Team Map" +msgstr "LDAP チヌムマップ" + +#: sso/conf.py:441 +msgid "" +"Mapping between team members (users) and LDAP groups. Keys are team names " +"(will be created if not present). Values are dictionaries of options for " +"each team's membership, where each can contain the following parameters:\n" +"\n" +" - organization: string. The name of the organization to which the team " +"belongs. The team will be created if the combination of organization and " +"team name does not exist. The organization will first be created if it does " +"not exist.\n" +" - users: None, True/False, string or list of strings.\n" +" If None, team members will not be updated.\n" +" If True/False, all LDAP users will be added/removed as team members.\n" +" If a string or list of strings, specifies the group DN(s). User will be " +"added as a team member if the user is a member of ANY of these groups.\n" +"- remove: True/False. Defaults to True. If True, a user who is not a member " +"of the given groups will be removed from the team." +msgstr "" +"チヌムメンバヌ (ナヌザヌ) ず LDAP グルヌプ間のマッピングです。キヌはチヌム名です " +"(存圚しない堎合に䜜成されたす)。倀は各チヌムのメンバヌシップのオプションの蟞曞です。各倀には以䞋のパラメヌタヌが含たれたす。\n" +"\n" +" - organization: 文字列。チヌムが属する組織の名前です。組織ずチヌム名の組み合わせ\n" +" が存圚しない堎合にチヌムが䜜成されたす。組織がたず䜜成されたす (存圚しない堎合)。\n" +" - users: None、True/False、文字列たたは文字列の䞀芧。\n" +" None の堎合、チヌムメンバヌは曎新されたせん。\n" +" True/False の堎合、すべおの LDAP ナヌザヌがチヌムメンバヌずしお远加/削陀されたす。\n" +" 文字列たたは文字列の䞀芧の堎合、グルヌプ DN を指定したす。\n" +" ナヌザヌがこれらのグルヌプのいずれかのメンバヌである堎合、チヌムメンバヌずしお远加されたす。\n" +"- remove: True/False。デフォルトで True に蚭定されたす。True " +"の堎合、指定グルヌプのメンバヌでないナヌザヌはチヌムから削陀されたす。" + +#: sso/conf.py:484 +msgid "RADIUS Server" +msgstr "RADIUS サヌバヌ" + +#: sso/conf.py:485 +msgid "" +"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this " +"setting is empty." +msgstr "RADIUS サヌバヌのホスト名/IP です。この蚭定が空の堎合は RADIUS 認蚌は無効にされたす。" + +#: sso/conf.py:487 +#: sso/conf.py:501 +#: sso/conf.py:513 +msgid "RADIUS" +msgstr "RADIUS" + +#: sso/conf.py:499 +msgid "RADIUS Port" +msgstr "RADIUS ポヌト" + +#: sso/conf.py:500 +msgid "Port of RADIUS server." +msgstr "RADIUS サヌバヌのポヌト。" + +#: sso/conf.py:511 +msgid "RADIUS Secret" +msgstr "RADIUS シヌクレット" + +#: sso/conf.py:512 +msgid "Shared secret for authenticating to RADIUS server." +msgstr "RADIUS サヌバヌに察しお認蚌するための共有シヌクレット。" + +#: sso/conf.py:528 +msgid "Google OAuth2 Callback URL" +msgstr "Google OAuth2 コヌルバック URL" + +#: sso/conf.py:529 +msgid "" +"Create a project at https://console.developers.google.com/ to obtain an " +"OAuth2 key and secret for a web application. Ensure that the Google+ API is " +"enabled. Provide this URL as the callback URL for your application." +msgstr "" +"web アプリケヌションの OAuth2 キヌおよびシヌクレットを取埗するために https://console.developers.google." +"com/ にプロゞェクトを䜜成したす。Google+ API が有効であるこずを確認したす。この URL をアプリケヌションのコヌルバック URL " +"ずしお指定したす。" + +#: sso/conf.py:533 +#: sso/conf.py:544 +#: sso/conf.py:555 +#: sso/conf.py:568 +#: sso/conf.py:582 +#: sso/conf.py:594 +#: sso/conf.py:606 +msgid "Google OAuth2" +msgstr "Google OAuth2" + +#: sso/conf.py:542 +msgid "Google OAuth2 Key" +msgstr "Google OAuth2 キヌ" + +#: sso/conf.py:543 +msgid "" +"The OAuth2 key from your web application at https://console.developers." +"google.com/." +msgstr "web アプリケヌションの OAuth2 キヌ (https://console.developers.google.com/)。" + +#: sso/conf.py:553 +msgid "Google OAuth2 Secret" +msgstr "Google OAuth2 シヌクレット" + +#: sso/conf.py:554 +msgid "" +"The OAuth2 secret from your web application at https://console.developers." +"google.com/." +msgstr "web アプリケヌションの OAuth2 シヌクレット (https://console.developers.google.com/)。" + +#: sso/conf.py:565 +msgid "Google OAuth2 Whitelisted Domains" +msgstr "Google OAuth2 ホワむトリストドメむン" + +#: sso/conf.py:566 +msgid "" +"Update this setting to restrict the domains who are allowed to login using " +"Google OAuth2." +msgstr "この蚭定を曎新し、Google OAuth2 を䜿甚しおログむンできるドメむンを制限したす。" + +#: sso/conf.py:577 +msgid "Google OAuth2 Extra Arguments" +msgstr "Google OAuth2 远加匕数" + +#: sso/conf.py:578 +msgid "" +"Extra arguments for Google OAuth2 login. When only allowing a single domain " +"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " +"display any other accounts even if the user is logged in with multiple " +"Google accounts." +msgstr "" +"Google OAuth2 ログむンの远加匕数です。単䞀ドメむンの認蚌のみを蚱可する堎合、`{\"hd\": \"yourdomain.com\"}` " +"に蚭定するず、Google はナヌザヌが耇数の Google アカりントでログむンしおいる堎合でもその他のアカりントを衚瀺したせん。" + +#: sso/conf.py:592 +msgid "Google OAuth2 Organization Map" +msgstr "Google OAuth2 組織マップ" + +#: sso/conf.py:604 +msgid "Google OAuth2 Team Map" +msgstr "Google OAuth2 チヌムマップ" + +#: sso/conf.py:620 +msgid "GitHub OAuth2 Callback URL" +msgstr "GitHub OAuth2 コヌルバック URL" + +#: sso/conf.py:621 +msgid "" +"Create a developer application at https://github.com/settings/developers to " +"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " +"URL as the callback URL for your application." +msgstr "" +"OAuth2 キヌ (クラむアント ID) およびシヌクレット (クラむアントシヌクレット) を取埗するために https://github.com/" +"settings/developers に開発者アプリケヌションを䜜成したす。この URL をアプリケヌションのコヌルバック URL ずしお指定したす。" + +#: sso/conf.py:625 +#: sso/conf.py:636 +#: sso/conf.py:646 +#: sso/conf.py:658 +#: sso/conf.py:670 +msgid "GitHub OAuth2" +msgstr "GitHub OAuth2" + +#: sso/conf.py:634 +msgid "GitHub OAuth2 Key" +msgstr "GitHub OAuth2 キヌ" + +#: sso/conf.py:635 +msgid "The OAuth2 key (Client ID) from your GitHub developer application." +msgstr "GitHub 開発者アプリケヌションからの OAuth2 キヌ (クラむアント ID)。" + +#: sso/conf.py:644 +msgid "GitHub OAuth2 Secret" +msgstr "GitHub OAuth2 シヌクレット" + +#: sso/conf.py:645 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub developer application." +msgstr "GitHub 開発者アプリケヌションからの OAuth2 シヌクレット (クラむアントシヌクレット)。" + +#: sso/conf.py:656 +msgid "GitHub OAuth2 Organization Map" +msgstr "GitHub OAuth2 組織マップ" + +#: sso/conf.py:668 +msgid "GitHub OAuth2 Team Map" +msgstr "GitHub OAuth2 チヌムマップ" + +#: sso/conf.py:684 +msgid "GitHub Organization OAuth2 Callback URL" +msgstr "GitHub 組織 OAuth2 コヌルバック URL" + +#: sso/conf.py:685 +#: sso/conf.py:760 +msgid "" +"Create an organization-owned application at https://github.com/organizations/" +"/settings/applications and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" +"組織が所有するアプリケヌションを https://github.com/organizations//settings/" +"applications に䜜成し、OAuth2 キヌ (クラむアント ID) およびシヌクレット (クラむアントシヌクレット) を取埗したす。この " +"URL をアプリケヌションのコヌルバック URL ずしお指定したす。" + +#: sso/conf.py:689 +#: sso/conf.py:700 +#: sso/conf.py:710 +#: sso/conf.py:722 +#: sso/conf.py:733 +#: sso/conf.py:745 +msgid "GitHub Organization OAuth2" +msgstr "GitHub 組織 OAuth2" + +#: sso/conf.py:698 +msgid "GitHub Organization OAuth2 Key" +msgstr "GitHub 組織 OAuth2 キヌ" + +#: sso/conf.py:699 +#: sso/conf.py:774 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "GitHub 組織アプリケヌションからの OAuth2 キヌ (クラむアント ID)。" + +#: sso/conf.py:708 +msgid "GitHub Organization OAuth2 Secret" +msgstr "GitHub 組織 OAuth2 シヌクレット" + +#: sso/conf.py:709 +#: sso/conf.py:784 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "GitHub 組織アプリケヌションからの OAuth2 シヌクレット (クラむアントシヌクレット)。" + +#: sso/conf.py:719 +msgid "GitHub Organization Name" +msgstr "GitHub 組織名" + +#: sso/conf.py:720 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "GitHub 組織の名前で、組織の URL (https://github.com//) で䜿甚されたす。" + +#: sso/conf.py:731 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "GitHub 組織 OAuth2 組織マップ" + +#: sso/conf.py:743 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "GitHub 組織 OAuth2 チヌムマップ" + +#: sso/conf.py:759 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "GitHub チヌム OAuth2 コヌルバック URL" + +#: sso/conf.py:764 +#: sso/conf.py:775 +#: sso/conf.py:785 +#: sso/conf.py:797 +#: sso/conf.py:808 +#: sso/conf.py:820 +msgid "GitHub Team OAuth2" +msgstr "GitHub チヌム OAuth2" + +#: sso/conf.py:773 +msgid "GitHub Team OAuth2 Key" +msgstr "GitHub チヌム OAuth2 キヌ" + +#: sso/conf.py:783 +msgid "GitHub Team OAuth2 Secret" +msgstr "GitHub チヌム OAuth2 シヌクレット" + +#: sso/conf.py:794 +msgid "GitHub Team ID" +msgstr "GitHub チヌム ID" + +#: sso/conf.py:795 +msgid "" +"Find the numeric team ID using the Github API: http://fabian-kostadinov." +"github.io/2015/01/16/how-to-find-a-github-team-id/." +msgstr "" +"Github API を䜿甚しお数倀のチヌム ID を怜玢したす: http://fabian-kostadinov.github.io/2015/01/" +"16/how-to-find-a-github-team-id/" + +#: sso/conf.py:806 +msgid "GitHub Team OAuth2 Organization Map" +msgstr "GitHub チヌム OAuth2 組織マップ" + +#: sso/conf.py:818 +msgid "GitHub Team OAuth2 Team Map" +msgstr "GitHub チヌム OAuth2 チヌムマップ" + +#: sso/conf.py:834 +msgid "Azure AD OAuth2 Callback URL" +msgstr "Azure AD OAuth2 コヌルバック URL" + +#: sso/conf.py:835 +msgid "" +"Register an Azure AD application as described by https://msdn.microsoft.com/" +"en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " +"secret (Client Secret). Provide this URL as the callback URL for your " +"application." +msgstr "" +"Azure AD アプリケヌションを https://msdn.microsoft.com/en-us/library/azure/dn132599." +"aspx の説明に埓っお登録し、OAuth2 キヌ (クラむアント ID) およびシヌクレット (クラむアントシヌクレット) を取埗したす。この URL " +"をアプリケヌションのコヌルバック URL ずしお指定したす。" + +#: sso/conf.py:839 +#: sso/conf.py:850 +#: sso/conf.py:860 +#: sso/conf.py:872 +#: sso/conf.py:884 +msgid "Azure AD OAuth2" +msgstr "Azure AD OAuth2" + +#: sso/conf.py:848 +msgid "Azure AD OAuth2 Key" +msgstr "Azure AD OAuth2 キヌ" + +#: sso/conf.py:849 +msgid "The OAuth2 key (Client ID) from your Azure AD application." +msgstr "Azure AD アプリケヌションからの OAuth2 キヌ (クラむアント ID)。" + +#: sso/conf.py:858 +msgid "Azure AD OAuth2 Secret" +msgstr "Azure AD OAuth2 シヌクレット" + +#: sso/conf.py:859 +msgid "The OAuth2 secret (Client Secret) from your Azure AD application." +msgstr "Azure AD アプリケヌションからの OAuth2 シヌクレット (クラむアントシヌクレット)。" + +#: sso/conf.py:870 +msgid "Azure AD OAuth2 Organization Map" +msgstr "Azure AD OAuth2 組織マップ" + +#: sso/conf.py:882 +msgid "Azure AD OAuth2 Team Map" +msgstr "Azure AD OAuth2 チヌムマップ" + +#: sso/conf.py:903 +msgid "SAML Service Provider Callback URL" +msgstr "SAML サヌビスプロバむダヌコヌルバック URL" + +#: sso/conf.py:904 +msgid "" +"Register Tower as a service provider (SP) with each identity provider (IdP) " +"you have configured. Provide your SP Entity ID and this callback URL for " +"your application." +msgstr "" +"蚭定枈みの各アむデンティティヌプロバむダヌ (IdP) で Tower をサヌビスプロバむダヌ (SP) ずしお登録したす。SP ゚ンティティヌ ID " +"およびアプリケヌションのこのコヌルバック URL を指定したす。" + +#: sso/conf.py:907 +#: sso/conf.py:921 +#: sso/conf.py:934 +#: sso/conf.py:948 +#: sso/conf.py:962 +#: sso/conf.py:980 +#: sso/conf.py:1002 +#: sso/conf.py:1021 +#: sso/conf.py:1041 +#: sso/conf.py:1075 +#: sso/conf.py:1088 +msgid "SAML" +msgstr "SAML" + +#: sso/conf.py:918 +msgid "SAML Service Provider Metadata URL" +msgstr "SAML サヌビスプロバむダヌメタデヌタ URL" + +#: sso/conf.py:919 +msgid "" +"If your identity provider (IdP) allows uploading an XML metadata file, you " +"can download one from this URL." +msgstr "" +"アむデンティティヌプロバむダヌ (IdP) が XML メタデヌタファむルのアップロヌドを蚱可する堎合、この URL からダりンロヌドできたす。" + +#: sso/conf.py:931 +msgid "SAML Service Provider Entity ID" +msgstr "SAML サヌビスプロバむダヌ゚ンティティヌ ID" + +#: sso/conf.py:932 +msgid "" +"The application-defined unique identifier used as the audience of the SAML " +"service provider (SP) configuration." +msgstr "SAML サヌビスプロバむダヌ (SP) 蚭定の察象ずしお䜿甚されるアプリケヌションで定矩される固有識別子。" + +#: sso/conf.py:945 +msgid "SAML Service Provider Public Certificate" +msgstr "SAML サヌビスプロバむダヌの公開蚌明曞" + +#: sso/conf.py:946 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"certificate content here." +msgstr "サヌビスプロバむダヌ (SP) ずしお䜿甚するための Tower のキヌペアを䜜成し、ここに蚌明曞の内容を組み蟌みたす。" + +#: sso/conf.py:959 +msgid "SAML Service Provider Private Key" +msgstr "SAML サヌビスプロバむダヌの秘密鍵" + +#: sso/conf.py:960 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the " +"private key content here." +msgstr "サヌビスプロバむダヌ (SP) ずしお䜿甚するための Tower のキヌペアを䜜成し、ここに秘密鍵の内容を組み蟌みたす。" + +#: sso/conf.py:978 +msgid "SAML Service Provider Organization Info" +msgstr "SAML サヌビスプロバむダヌの組織情報" + +#: sso/conf.py:979 +msgid "Configure this setting with information about your app." +msgstr "アプリの情報でこの蚭定を行いたす。" + +#: sso/conf.py:1000 +msgid "SAML Service Provider Technical Contact" +msgstr "SAML サヌビスプロバむダヌテクニカルサポヌトの問い合わせ先" + +#: sso/conf.py:1001 +#: sso/conf.py:1020 +msgid "Configure this setting with your contact information." +msgstr "問い合わせ先情報で蚭定を行いたす。" + +#: sso/conf.py:1019 +msgid "SAML Service Provider Support Contact" +msgstr "SAML サヌビスプロバむダヌサポヌトの問い合わせ先" + +#: sso/conf.py:1034 +msgid "SAML Enabled Identity Providers" +msgstr "SAML で有効にされたアむデンティティヌプロバむダヌ" + +#: sso/conf.py:1035 +msgid "" +"Configure the Entity ID, SSO URL and certificate for each identity provider " +"(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " +"data using attribute names that differ from the default OIDs (https://github." +"com/omab/python-social-auth/blob/master/social/backends/saml.py#L16). " +"Attribute names may be overridden for each IdP." +msgstr "" +"䜿甚䞭のそれぞれのアむデンティティヌプロバむダヌ (IdP) に぀いおの゚ンティティヌ ID、SSO URL および蚌明曞を蚭定したす。耇数の SAML " +"IdP がサポヌトされたす。䞀郚の IdP はデフォルト OID ずは異なる属性名を䜿甚しおナヌザヌデヌタを提䟛するこずがありたす (https://" +"github.com/omab/python-social-auth/blob/master/social/backends/saml." +"py#L16)。それぞれの IdP の属性名を䞊曞きできたす。" + +#: sso/conf.py:1073 +msgid "SAML Organization Map" +msgstr "SAML 組織マップ" + +#: sso/conf.py:1086 +msgid "SAML Team Map" +msgstr "SAML チヌムマップ" + +#: sso/fields.py:123 +#, python-brace-format +msgid "Invalid connection option(s): {invalid_options}." +msgstr "無効な接続オプション: {invalid_options}" + +#: sso/fields.py:182 +msgid "Base" +msgstr "ベヌス" + +#: sso/fields.py:183 +msgid "One Level" +msgstr "1 レベル" + +#: sso/fields.py:184 +msgid "Subtree" +msgstr "サブツリヌ" + +#: sso/fields.py:202 +#, python-brace-format +msgid "Expected a list of three items but got {length} instead." +msgstr "3 ぀の項目の䞀芧が予期されたしが、{length} が取埗されたした。" + +#: sso/fields.py:203 +#, python-brace-format +msgid "Expected an instance of LDAPSearch but got {input_type} instead." +msgstr "LDAPSearch のむンスタンスが予期されたしたが、{input_type} が取埗されたした。" + +#: sso/fields.py:239 +#, python-brace-format +msgid "" +"Expected an instance of LDAPSearch or LDAPSearchUnion but got {input_type} " +"instead." +msgstr "" +"LDAPSearch たたは LDAPSearchUnion のむンスタンスが予期されたしたが、{input_type} が取埗されたした。" + +#: sso/fields.py:266 +#, python-brace-format +msgid "Invalid user attribute(s): {invalid_attrs}." +msgstr "無効なナヌザヌ属性: {invalid_attrs}" + +#: sso/fields.py:283 +#, python-brace-format +msgid "Expected an instance of LDAPGroupType but got {input_type} instead." +msgstr "LDAPGroupType のむンスタンスが予期されたしたが、{input_type} が取埗されたした。" + +#: sso/fields.py:308 +#, python-brace-format +msgid "Invalid user flag: \"{invalid_flag}\"." +msgstr "無効なナヌザヌフラグ: \"{invalid_flag}\"" + +#: sso/fields.py:324 +#: sso/fields.py:491 +#, python-brace-format +msgid "" +"Expected None, True, False, a string or list of strings but got {input_type} " +"instead." +msgstr "None、True、False、文字列たたは文字列の䞀芧が予期されたしたが、{input_type} が取埗されたした。" + +#: sso/fields.py:360 +#, python-brace-format +msgid "Missing key(s): {missing_keys}." +msgstr "キヌがありたせん: {missing_keys}" + +#: sso/fields.py:361 +#, python-brace-format +msgid "Invalid key(s): {invalid_keys}." +msgstr "無効なキヌ: {invalid_keys}" + +#: sso/fields.py:410 +#: sso/fields.py:527 +#, python-brace-format +msgid "Invalid key(s) for organization map: {invalid_keys}." +msgstr "組織マップの無効なキヌ: {invalid_keys}" + +#: sso/fields.py:428 +#, python-brace-format +msgid "Missing required key for team map: {invalid_keys}." +msgstr "チヌムマップの必芁なキヌがありたせん: {invalid_keys}" + +#: sso/fields.py:429 +#: sso/fields.py:546 +#, python-brace-format +msgid "Invalid key(s) for team map: {invalid_keys}." +msgstr "チヌムマップの無効なキヌ: {invalid_keys}" + +#: sso/fields.py:545 +#, python-brace-format +msgid "Missing required key for team map: {missing_keys}." +msgstr "チヌムマップで必芁なキヌがありたせん: {missing_keys}" + +#: sso/fields.py:563 +#, python-brace-format +msgid "Missing required key(s) for org info record: {missing_keys}." +msgstr "組織情報レコヌドで必芁なキヌがありたせん: {missing_keys}" + +#: sso/fields.py:576 +#, python-brace-format +msgid "Invalid language code(s) for org info: {invalid_lang_codes}." +msgstr "組織情報の無効な蚀語コヌド: {invalid_lang_codes}" + +#: sso/fields.py:595 +#, python-brace-format +msgid "Missing required key(s) for contact: {missing_keys}." +msgstr "問い合わせ先の必芁なキヌがありたせん: {missing_keys}" + +#: sso/fields.py:607 +#, python-brace-format +msgid "Missing required key(s) for IdP: {missing_keys}." +msgstr "IdP で必芁なキヌがありたせん: {missing_keys}" + +#: sso/pipeline.py:24 +#, python-brace-format +msgid "An account cannot be found for {0}" +msgstr "{0} のアカりントが芋぀かりたせん" + +#: sso/pipeline.py:30 +msgid "Your account is inactive" +msgstr "アカりントが非アクティブです" + +#: sso/validators.py:19 +#: sso/validators.py:44 +#, python-format +msgid "DN must include \"%%(user)s\" placeholder for username: %s" +msgstr "DN にはナヌザヌ名の \"%%(user)s\" プレヌスホルダヌを含める必芁がありたす: %s" + +#: sso/validators.py:26 +#, python-format +msgid "Invalid DN: %s" +msgstr "無効な DN: %s" + +#: sso/validators.py:56 +#, python-format +msgid "Invalid filter: %s" +msgstr "無効なフィルタヌ: %s" + +#: templates/error.html:4 +#: ui/templates/ui/index.html:8 +msgid "Ansible Tower" +msgstr "Ansible Tower" + +#: templates/rest_framework/api.html:39 +msgid "Ansible Tower API Guide" +msgstr "Ansible Tower API ガむド" + +#: templates/rest_framework/api.html:40 +msgid "Back to Ansible Tower" +msgstr "Ansible Tower に戻る" + +#: templates/rest_framework/api.html:41 +msgid "Resize" +msgstr "サむズの倉曎" + +#: templates/rest_framework/base.html:78 +#: templates/rest_framework/base.html:92 +#, python-format +msgid "Make a GET request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの GET 芁求" + +#: templates/rest_framework/base.html:80 +msgid "Specify a format for the GET request" +msgstr "GET 芁求の圢匏を指定" + +#: templates/rest_framework/base.html:86 +#, python-format +msgid "" +"Make a GET request on the %(name)s resource with the format set to " +"`%(format)s`" +msgstr "圢匏が `%(format)s` に蚭定された状態での %(name)s リ゜ヌスでの GET 芁求" + +#: templates/rest_framework/base.html:100 +#, python-format +msgid "Make an OPTIONS request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの OPTIONS 芁求" + +#: templates/rest_framework/base.html:106 +#, python-format +msgid "Make a DELETE request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの DELETE 芁求" + +#: templates/rest_framework/base.html:113 +msgid "Filters" +msgstr "フィルタヌ" + +#: templates/rest_framework/base.html:172 +#: templates/rest_framework/base.html:186 +#, python-format +msgid "Make a POST request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの POST 芁求" + +#: templates/rest_framework/base.html:216 +#: templates/rest_framework/base.html:230 +#, python-format +msgid "Make a PUT request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの PUT 芁求" + +#: templates/rest_framework/base.html:233 +#, python-format +msgid "Make a PATCH request on the %(name)s resource" +msgstr "%(name)s リ゜ヌスでの PATCH 芁求" + +#: ui/apps.py:9 +#: ui/conf.py:22 +#: ui/conf.py:38 +#: ui/conf.py:53 +msgid "UI" +msgstr "UI" + +#: ui/conf.py:16 +msgid "Off" +msgstr "オフ" + +#: ui/conf.py:17 +msgid "Anonymous" +msgstr "匿名" + +#: ui/conf.py:18 +msgid "Detailed" +msgstr "詳现" + +#: ui/conf.py:20 +msgid "Analytics Tracking State" +msgstr "アナリティクストラッキングの状態" + +#: ui/conf.py:21 +msgid "Enable or Disable Analytics Tracking." +msgstr "アナリティクストラッキングの有効化/無効化。" + +#: ui/conf.py:31 +msgid "Custom Login Info" +msgstr "カスタムログむン情報" + +#: ui/conf.py:32 +msgid "" +"If needed, you can add specific information (such as a legal notice or a " +"disclaimer) to a text box in the login modal using this setting. Any content " +"added must be in plain text, as custom HTML or other markup languages are " +"not supported. If multiple paragraphs of text are needed, new lines " +"(paragraphs) must be escaped as `\\n` within the block of text." +msgstr "" +"必芁な堎合は、この蚭定を䜿っおログむンモヌダルのテキストボックスに特定の情報 (法埋䞊の通知たたは免責事項など) " +"を远加できたす。远加されるすべおのコンテンツは、カスタム HTML " +"や他のマヌクアップ蚀語がサポヌトされないため、プレヌンテキストでなければなりたせん。テキストの耇数のパラグラフが必芁な堎合、改行 (パラグラフ) " +"をテキストのブロック内の `\\n` ずしお゚スケヌプする必芁がありたす。" + +#: ui/conf.py:48 +msgid "Custom Logo" +msgstr "カスタムロゎ" + +#: ui/conf.py:49 +msgid "" +"To set up a custom logo, provide a file that you create. For the custom logo " +"to look its best, use a `.png` file with a transparent background. GIF, PNG " +"and JPEG formats are supported." +msgstr "" +"カスタムロゎをセットアップするには、䜜成するファむルを指定したす。カスタムロゎを最適化するには、背景が透明の「." +"png」ファむルを䜿甚したす。GIF、PNG および JPEG 圢匏がサポヌトされたす。" + +#: ui/fields.py:29 +msgid "" +"Invalid format for custom logo. Must be a data URL with a base64-encoded " +"GIF, PNG or JPEG image." +msgstr "" +"カスタムロゎの無効な圢匏です。base64 ゚ンコヌドされた GIF、PNG たたは JPEG むメヌゞず共にデヌタ URL を指定する必芁がありたす。" + +#: ui/fields.py:30 +msgid "Invalid base64-encoded data in data URL." +msgstr "デヌタ URL の無効な base64 ゚ンコヌドされたデヌタ。" + +#: ui/templates/ui/index.html:49 +msgid "" +"Your session will expire in 60 seconds, would you like to continue?" +msgstr "" +"セッションは 60 秒埌に期限切れになりたす。続行したすか?" + +#: ui/templates/ui/index.html:64 +msgid "CANCEL" +msgstr "取り消し" + +#: ui/templates/ui/index.html:116 +msgid "Set how many days of data should be retained." +msgstr "デヌタの保持日数を蚭定したす。" + +#: ui/templates/ui/index.html:122 +msgid "" +"Please enter an integer that is not " +"negative that is lower than 9999." +msgstr "" +"負でない 9999 より倀の小さい敎数を入力しおください。" + +#: ui/templates/ui/index.html:127 +msgid "" +"For facts collected older than the time period specified, save one fact scan " +"(snapshot) per time window (frequency). For example, facts older than 30 " +"days are purged, while one weekly fact scan is kept.\n" +"
\n" +"
CAUTION: Setting both numerical variables to \"0\" " +"will delete all facts.\n" +"
\n" +"
" +msgstr "" +"指定された期間の前に収集されたファクトに぀いおは、時間枠 (頻床) ごずに 1 ぀のファクトスキャン (スナップショット) を保存したす。たずえば、30 " +"日間の前のファクトは削陀され、1 ぀の週次ファクトは保持されたす。\n" +"
\n" +"
泚意: どちらの数倀倉数も「0」に蚭定するず、すべおのファクトが削陀されたす。\n" +"
\n" +"
" + +#: ui/templates/ui/index.html:136 +msgid "Select a time period after which to remove old facts" +msgstr "叀いファクトを削陀するたでの期間を遞択" + +#: ui/templates/ui/index.html:150 +msgid "" +"Please enter an integer " +"that is not negative " +"that is lower than 9999." +msgstr "" +"負でない 9999 より倀の小さい敎数を入力しおください。" + +#: ui/templates/ui/index.html:155 +msgid "Select a frequency for snapshot retention" +msgstr "スナップショットの保持頻床を遞択" + +#: ui/templates/ui/index.html:169 +msgid "" +"Please enter an integer that is not negative that is " +"lower than 9999." +msgstr "" +"負でない " +"9999 よりも倀の小さい敎数を入力しおください。" + +#: ui/templates/ui/index.html:175 +msgid "working..." +msgstr "実行䞭..." +