mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 01:57:35 -03:30
Merge pull request #3784 from fujiwarat/i18n-#2
Update I18N patch under awx/ui to reflect pull request #3363
This commit is contained in:
commit
cf8f12c1f0
@ -312,7 +312,7 @@ var tower = angular.module('Tower', [
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
parent: 'setup',
|
||||
label: 'CREDENTIALS'
|
||||
label: N_('CREDENTIALS')
|
||||
}
|
||||
})
|
||||
});
|
||||
@ -336,7 +336,7 @@ var tower = angular.module('Tower', [
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
parent: 'setup',
|
||||
label: 'TEAMS'
|
||||
label: N_('TEAMS')
|
||||
}
|
||||
})
|
||||
});
|
||||
@ -360,7 +360,7 @@ var tower = angular.module('Tower', [
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
parent: 'setup',
|
||||
label: 'USERS'
|
||||
label: N_('USERS')
|
||||
}
|
||||
})
|
||||
});
|
||||
@ -500,7 +500,7 @@ var tower = angular.module('Tower', [
|
||||
templateUrl: urlPrefix + 'partials/sockets.html',
|
||||
controller: SocketsController,
|
||||
ncyBreadcrumb: {
|
||||
label: 'SOCKETS'
|
||||
label: N_('SOCKETS')
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ export function ProjectsList($scope, $rootScope, $location, $log, $stateParams,
|
||||
function buildTooltips(project) {
|
||||
project.statusIcon = GetProjectIcon(project.status);
|
||||
project.statusTip = GetProjectToolTip(project.status);
|
||||
project.scm_update_tooltip = "Start an SCM update";
|
||||
project.scm_update_tooltip = i18n._("Start an SCM update");
|
||||
project.scm_schedule_tooltip = i18n._("Schedule future SCM updates");
|
||||
project.scm_type_class = "";
|
||||
|
||||
@ -153,13 +153,13 @@ export function ProjectsList($scope, $rootScope, $location, $log, $stateParams,
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'),
|
||||
msg: i18n.format(i18n._('Call to %s failed. DELETE returned status: '), url) + status });
|
||||
msg: i18n.sprintf(i18n._('Call to %s failed. DELETE returned status: '), url) + status });
|
||||
});
|
||||
};
|
||||
|
||||
Prompt({
|
||||
hdr: i18n._('Delete'),
|
||||
body: i18n._('<div class="Prompt-bodyQuery">Are you sure you want to delete the project below?</div>') + '<div class="Prompt-bodyTarget">' + $filter('sanitize')(name) + '</div>',
|
||||
body: '<div class="Prompt-bodyQuery">' + i18n._('Are you sure you want to delete the project below?') + '</div>' + '<div class="Prompt-bodyTarget">' + $filter('sanitize')(name) + '</div>',
|
||||
action: action,
|
||||
actionText: 'DELETE'
|
||||
});
|
||||
@ -177,7 +177,7 @@ export function ProjectsList($scope, $rootScope, $location, $log, $stateParams,
|
||||
$scope.refresh();
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'), msg: i18n.format(i18n._('Call to %s failed. POST status: '), url) + status });
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'), msg: i18n.sprintf(i18n._('Call to %s failed. POST status: '), url) + status });
|
||||
});
|
||||
});
|
||||
|
||||
@ -193,12 +193,12 @@ export function ProjectsList($scope, $rootScope, $location, $log, $stateParams,
|
||||
if (data.can_cancel) {
|
||||
$scope.$emit('Cancel_Update', url);
|
||||
} else {
|
||||
Alert(i18n._('Cancel Not Allowed'), i18n._('<div>Either you do not have access or the SCM update process completed. ' +
|
||||
'Click the <em>Refresh</em> button to view the latest status.</div>'), 'alert-info', null, null, null, null, true);
|
||||
Alert(i18n._('Cancel Not Allowed'), '<div>' + i18n.sprintf(i18n._('Either you do not have access or the SCM update process completed. ' +
|
||||
'Click the %sRefresh%s button to view the latest status.'), '<em>', '</em>') + '</div>', 'alert-info', null, null, null, null, true);
|
||||
}
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'), msg: i18n.format(i18n._('Call to %s failed. GET status: '), url) + status });
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'), msg: i18n.sprintf(i18n._('Call to %s failed. GET status: '), url) + status });
|
||||
});
|
||||
});
|
||||
|
||||
@ -214,11 +214,11 @@ export function ProjectsList($scope, $rootScope, $location, $log, $stateParams,
|
||||
})
|
||||
.error(function (data, status) {
|
||||
ProcessErrors($scope, data, status, null, { hdr: i18n._('Error!'),
|
||||
msg: i18n.format(i18n._('Call to %s failed. GET status: '), data.related.current_update) + status });
|
||||
msg: i18n.sprintf(i18n._('Call to %s failed. GET status: '), data.related.current_update) + status });
|
||||
});
|
||||
} else {
|
||||
Alert(i18n._('Update Not Found'), i18n.format(i18n._('<div>An SCM update does not appear to be running for project: %s. Click the <em>Refresh</em> ' +
|
||||
'button to view the latest status.</div>'), $filter('sanitize')(name)), 'alert-info',undefined,undefined,undefined,undefined,true);
|
||||
Alert(i18n._('Update Not Found'), '<div>' + i18n.sprintf(i18n._('An SCM update does not appear to be running for project: %s. Click the %sRefresh%s ' +
|
||||
'button to view the latest status.'), $filter('sanitize')(name), '<em>', '</em>') + '</div>', 'alert-info',undefined,undefined,undefined,undefined,true);
|
||||
}
|
||||
})
|
||||
.error(function (data, status) {
|
||||
@ -377,27 +377,29 @@ export function ProjectsAdd($scope, $rootScope, $compile, $location, $log,
|
||||
if ($scope.scm_type.value) {
|
||||
switch ($scope.scm_type.value) {
|
||||
case 'git':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for GIT SCM include:</p><ul class=\"no-bullets\"><li>https://github.com/ansible/ansible.git</li>' +
|
||||
$scope.urlPopover = '<p>' +
|
||||
i18n._('Example URLs for GIT SCM include:') +
|
||||
'</p><ul class=\"no-bullets\"><li>https://github.com/ansible/ansible.git</li>' +
|
||||
'<li>git@github.com:ansible/ansible.git</li><li>git://servername.example.com/ansible.git</li></ul>' +
|
||||
'<p><strong>Note:</strong> When using SSH protocol for GitHub or Bitbucket, enter an SSH key only, ' +
|
||||
'<p>' + i18n.sprintf(i18n._('%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.');
|
||||
'SSH. GIT read only protocol (git://) does not use username or password information.'), '<strong>', '</strong>');
|
||||
break;
|
||||
case 'svn':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for Subversion SCM include:</p>' +
|
||||
$scope.urlPopover = '<p>' + i18n._('Example URLs for Subversion SCM include:') + '</p>' +
|
||||
'<ul class=\"no-bullets\"><li>https://github.com/ansible/ansible</li><li>svn://servername.example.com/path</li>' +
|
||||
'<li>svn+ssh://servername.example.com/path</li></ul>');
|
||||
'<li>svn+ssh://servername.example.com/path</li></ul>';
|
||||
break;
|
||||
case 'hg':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for Mercurial SCM include:</p>' +
|
||||
$scope.urlPopover = '<p>' + i18n._('Example URLs for Mercurial SCM include:') + '</p>' +
|
||||
'<ul class=\"no-bullets\"><li>https://bitbucket.org/username/project</li><li>ssh://hg@bitbucket.org/username/project</li>' +
|
||||
'<li>ssh://server.example.com/path</li></ul>' +
|
||||
'<p><strong>Note:</strong> Mercurial does not support password authentication for SSH. ' +
|
||||
'<p>' + i18n.sprintf(i18n._('%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.');
|
||||
'If using Bitbucket and SSH, do not supply your Bitbucket username.'), '<strong>', '</strong>');
|
||||
break;
|
||||
default:
|
||||
$scope.urlPopover = i18n._('<p> URL popover text');
|
||||
$scope.urlPopover = '<p> ' + i18n._('URL popover text');
|
||||
}
|
||||
}
|
||||
|
||||
@ -535,14 +537,14 @@ export function ProjectsEdit($scope, $rootScope, $compile, $location, $log,
|
||||
});
|
||||
|
||||
$scope.scmBranchLabel = ($scope.scm_type.value === 'svn') ? 'Revision #' : 'SCM Branch';
|
||||
$scope.scm_update_tooltip = "Start an SCM update";
|
||||
$scope.scm_update_tooltip = i18n._("Start an SCM update");
|
||||
$scope.scm_type_class = "";
|
||||
if (data.status === 'running' || data.status === 'updating') {
|
||||
$scope.scm_update_tooltip = "SCM update currently running";
|
||||
$scope.scm_update_tooltip = i18n._("SCM update currently running");
|
||||
$scope.scm_type_class = "btn-disabled";
|
||||
}
|
||||
if (Empty(data.scm_type)) {
|
||||
$scope.scm_update_tooltip = 'Manual projects do not require an SCM update';
|
||||
$scope.scm_update_tooltip = i18n._('Manual projects do not require an SCM update');
|
||||
$scope.scm_type_class = "btn-disabled";
|
||||
}
|
||||
|
||||
@ -641,7 +643,7 @@ export function ProjectsEdit($scope, $rootScope, $compile, $location, $log,
|
||||
|
||||
Prompt({
|
||||
hdr: i18n._('Delete'),
|
||||
body: i18n.format(i18n._('<div class="Prompt-bodyQuery">Are you sure you want to remove the %s below from %s?</div>'), title, $scope.name) + '<div class="Prompt-bodyTarget">' + name + '</div>',
|
||||
body: '<div class="Prompt-bodyQuery">' + i18n.sprintf(i18n._('Are you sure you want to remove the %s below from %s?'), title, $scope.name) + '</div>' + '<div class="Prompt-bodyTarget">' + name + '</div>',
|
||||
action: action,
|
||||
actionText: 'DELETE'
|
||||
});
|
||||
@ -658,27 +660,27 @@ export function ProjectsEdit($scope, $rootScope, $compile, $location, $log,
|
||||
if ($scope.scm_type.value) {
|
||||
switch ($scope.scm_type.value) {
|
||||
case 'git':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for GIT SCM include:</p><ul class=\"no-bullets\"><li>https://github.com/ansible/ansible.git</li>' +
|
||||
$scope.urlPopover = '<p>' + i18n._('Example URLs for GIT SCM include:') + '</p><ul class=\"no-bullets\"><li>https://github.com/ansible/ansible.git</li>' +
|
||||
'<li>git@github.com:ansible/ansible.git</li><li>git://servername.example.com/ansible.git</li></ul>' +
|
||||
'<p><strong>Note:</strong> When using SSH protocol for GitHub or Bitbucket, enter an SSH key only, ' +
|
||||
'<p>' + i18n.sprintf(i18n._('%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.');
|
||||
'SSH. GIT read only protocol (git://) does not use username or password information.'), '<strong>', '</strong>');
|
||||
break;
|
||||
case 'svn':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for Subversion SCM include:</p>' +
|
||||
$scope.urlPopover = '<p>' + i18n._('Example URLs for Subversion SCM include:') + '</p>' +
|
||||
'<ul class=\"no-bullets\"><li>https://github.com/ansible/ansible</li><li>svn://servername.example.com/path</li>' +
|
||||
'<li>svn+ssh://servername.example.com/path</li></ul>');
|
||||
'<li>svn+ssh://servername.example.com/path</li></ul>';
|
||||
break;
|
||||
case 'hg':
|
||||
$scope.urlPopover = i18n._('<p>Example URLs for Mercurial SCM include:</p>' +
|
||||
$scope.urlPopover = '<p>' + i18n._('Example URLs for Mercurial SCM include:') + '</p>' +
|
||||
'<ul class=\"no-bullets\"><li>https://bitbucket.org/username/project</li><li>ssh://hg@bitbucket.org/username/project</li>' +
|
||||
'<li>ssh://server.example.com/path</li></ul>' +
|
||||
'<p><strong>Note:</strong> Mercurial does not support password authentication for SSH. ' +
|
||||
'<p>' + i18n.sprintf(i18n._('%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.');
|
||||
'If using Bitbucket and SSH, do not supply your Bitbucket username.'), '<strong>', '</strong>');
|
||||
break;
|
||||
default:
|
||||
$scope.urlPopover = i18n._('<p> URL popover text');
|
||||
$scope.urlPopover = '<p> ' + i18n._('URL popover text');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -51,7 +51,7 @@ export default
|
||||
list: 'OrganizationList',
|
||||
sourceModel: 'organization',
|
||||
sourceField: 'name',
|
||||
awPopOver: i18n._("<p>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.</p>"),
|
||||
awPopOver: "<p>" + i18n._("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.") + "</p>",
|
||||
dataTitle: i18n._('Organization') + ' ',
|
||||
dataPlacement: 'bottom',
|
||||
dataContainer: "body",
|
||||
@ -64,24 +64,24 @@ export default
|
||||
ngOptions: 'kind.label for kind in credential_kind_options track by kind.value', // select as label for value in array 'kind.label for kind in credential_kind_options',
|
||||
ngChange: 'kindChange()',
|
||||
required: true,
|
||||
awPopOver: i18n._('<dl>\n' +
|
||||
'<dt>Machine</dt>\n' +
|
||||
'<dd>Authentication for remote machine access. This can include SSH keys, usernames, passwords, ' +
|
||||
awPopOver: '<dl>\n' +
|
||||
'<dt>' + i18n._('Machine') + '</dt>\n' +
|
||||
'<dd>' + i18n._('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.</dd>' +
|
||||
'<dt>Network</dt>\n' +
|
||||
'<dd>Authentication for network device access. This can include SSH keys, usernames, passwords, ' +
|
||||
'remote hosts.') + '</dd>' +
|
||||
'<dt>' + i18n._('Network') + '</dt>\n' +
|
||||
'<dd>' + i18n._('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.</dd>' +
|
||||
'<dt>Source Control</dt>\n' +
|
||||
'<dd>Used to check out and synchronize playbook repositories with a remote source control ' +
|
||||
'network devices.') + '</dd>' +
|
||||
'<dt>' + i18n._('Source Control') + '</dt>\n' +
|
||||
'<dd>' + i18n._('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.</dd>\n' +
|
||||
'<dt>Others (Cloud Providers)</dt>\n' +
|
||||
'<dd>Usernames, passwords, and access keys for authenticating to the specified cloud or infrastructure ' +
|
||||
'used by Projects.') + '</dd>\n' +
|
||||
'<dt>' + i18n._('Others (Cloud Providers)') + '</dt>\n' +
|
||||
'<dd>' + i18n._('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.</dd>\n' +
|
||||
'</dl>\n'),
|
||||
'in playbook runs.') + '</dd>\n' +
|
||||
'</dl>\n',
|
||||
dataTitle: i18n._('Type'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -122,7 +122,8 @@ export default
|
||||
ngShow: "kind.value == 'aws'",
|
||||
autocomplete: false,
|
||||
apiField: 'security_token',
|
||||
awPopOver: i18n._("<div>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.</div><div style='padding-top: 10px'>To learn more about the IAM STS Token, refer to the <a href='http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html' target='_blank'>Amazon documentation</a>.</div>"),
|
||||
awPopOver: "<div>" + i18n._("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.") + "</div><div style='padding-top: 10px'>" +
|
||||
i18n.sprintf(i18n._("To learn more about the IAM STS Token, refer to the %sAmazon documentation%s."), "<a href='http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html' target='_blank'>", "</a>") + "</div>",
|
||||
hasShowInputButton: true,
|
||||
dataTitle: i18n._('STS Token'),
|
||||
dataPlacement: 'right',
|
||||
@ -158,7 +159,7 @@ export default
|
||||
|
||||
|
||||
autocomplete: false,
|
||||
awPopOver: i18n._('<p>Subscription ID is an Azure construct, which is mapped to a username.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Subscription ID is an Azure construct, which is mapped to a username.') + '</p>',
|
||||
dataTitle: i18n._('Subscription ID'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -187,7 +188,7 @@ export default
|
||||
init: false
|
||||
},
|
||||
autocomplete: false,
|
||||
awPopOver: i18n._('<p>The email address assigned to the Google Compute Engine <b><i>service account.</b></i></p>'),
|
||||
awPopOver: '<p>' + i18n.sprintf(i18n._('The email address assigned to the Google Compute Engine %sservice account.'), '<b><i>') + '</b></i></p>',
|
||||
dataTitle: i18n._('Email'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -281,9 +282,10 @@ export default
|
||||
ngShow: "kind.value == 'ssh'",
|
||||
dataTitle: i18n._('Privilege Escalation'),
|
||||
ngOptions: 'become.label for become in become_options track by become.value',
|
||||
awPopOver: i18n._("<p>Specify a method for 'become' operations. " +
|
||||
// i18n.sprintf() does not support the order of multiple "%s"
|
||||
awPopOver: "<p>" + i18n.sprintf(i18n._("Specify a method for 'become' operations. " +
|
||||
"This is equivalent to specifying the <code>--become-method=BECOME_METHOD</code> parameter, where <code>BECOME_METHOD</code> could be "+
|
||||
"<code>sudo | su | pbrun | pfexec | runas</code> <br>(defaults to <code>sudo</code>)</p>"),
|
||||
"%s"), "<code>sudo | su | pbrun | pfexec | runas</code>") + " <br>" + i18n.sprintf(i18n._("(defaults to %s)"), "<code>sudo</code>") + "</p>",
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
subForm: 'credentialSubForm',
|
||||
@ -373,11 +375,11 @@ export default
|
||||
labelBind: 'domainLabel',
|
||||
type: 'text',
|
||||
ngShow: "kind.value == 'openstack'",
|
||||
awPopOver: i18n._("<p>OpenStack domains define administrative " +
|
||||
awPopOver: "<p>" + i18n._("OpenStack domains define administrative " +
|
||||
"boundaries. It is only needed for Keystone v3 authentication URLs. " +
|
||||
"Common scenarios include:<ul><li><b>v2 URLs</b> - leave blank</li>" +
|
||||
"<li><b>v3 default</b> - set to 'default'</br></li>" +
|
||||
"<li><b>v3 multi-domain</b> - your domain name</p></li></ul></p>"),
|
||||
"Common scenarios include:") + "<ul><li><b>" + i18n.sprintf(i18n._("v2 URLs%s - leave blank"), "</b>") + "</li>" +
|
||||
"<li><b>" + i18n.sprintf(i18n._("v3 default%s - set to 'default'"), "</b>") + "</br></li>" +
|
||||
"<li><b>" + i18n.sprintf(i18n._("v3 multi-domain%s - your domain name"), "</b>") + "</p></li></ul></p>",
|
||||
dataTitle: i18n._('Domain Name'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -438,7 +440,7 @@ export default
|
||||
label: 'Add',
|
||||
awToolTip: i18n._('Add a permission'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: '(credential_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
@ -15,7 +15,7 @@ angular.module('InventoryFormDefinition', ['ScanJobsListDefinition'])
|
||||
.factory('InventoryFormObject', ['i18n', function(i18n) {
|
||||
return {
|
||||
|
||||
addTitle: 'New Inventory',
|
||||
addTitle: i18n._('New Inventory'),
|
||||
editTitle: '{{ inventory_name }}',
|
||||
name: 'inventory',
|
||||
basePath: 'inventory',
|
||||
@ -57,14 +57,14 @@ angular.module('InventoryFormDefinition', ['ScanJobsListDefinition'])
|
||||
class: 'Form-formGroup--fullWidth',
|
||||
rows: 6,
|
||||
"default": "---",
|
||||
awPopOver: "<p>Enter inventory variables using either JSON or YAML syntax. Use the radio button to toggle between the two.</p>" +
|
||||
awPopOver: "<p>" + i18n._("Enter inventory variables using either JSON or YAML syntax. Use the radio button to toggle between the two.") + "</p>" +
|
||||
"JSON:<br />\n" +
|
||||
"<blockquote>{<br /> \"somevar\": \"somevalue\",<br /> \"password\": \"magic\"<br /> }</blockquote>\n" +
|
||||
"YAML:<br />\n" +
|
||||
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n" +
|
||||
'<p>View JSON examples at <a href="http://www.json.org" target="_blank">www.json.org</a></p>' +
|
||||
'<p>View YAML examples at <a href="http://docs.ansible.com/YAMLSyntax.html" target="_blank">docs.ansible.com</a></p>',
|
||||
dataTitle: 'Inventory Variables',
|
||||
'<p>' + i18n.sprintf(i18n._('View JSON examples at %s'), '<a href="http://www.json.org" target="_blank">www.json.org</a>') + '</p>' +
|
||||
'<p>' + i18n.sprintf(i18n._('View YAML examples at %s'), '<a href="http://docs.ansible.com/YAMLSyntax.html" target="_blank">docs.ansible.com</a>') + '</p>',
|
||||
dataTitle: i18n._('Inventory Variables'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: 'body',
|
||||
ngDisabled: '!(inventory_obj.summary_fields.user_capabilities.edit || canAdd)' // TODO: get working
|
||||
@ -150,7 +150,7 @@ angular.module('InventoryFormDefinition', ['ScanJobsListDefinition'])
|
||||
label: i18n._('Add'),
|
||||
awToolTip: i18n._('Add a permission'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: '(inventory_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
@ -51,10 +51,13 @@ export default
|
||||
"default": 0,
|
||||
required: true,
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>When this template is submitted as a job, setting the type to <em>run</em> will execute the playbook, running tasks " +
|
||||
" on the selected hosts.</p> <p>Setting the type to <em>check</em> will not execute the playbook. Instead, <code>ansible</code> will check playbook " +
|
||||
" syntax, test environment setup and report problems.</p> <p>Setting the type to <em>scan</em> will execute the playbook and store any " +
|
||||
" scanned facts for use with Tower's System Tracking feature.</p>"),
|
||||
awPopOver: "<p>" + i18n._("When this template is submitted as a job, setting the type to <em>run</em> will execute the playbook, running tasks " +
|
||||
" on the selected hosts.") + "</p> <p>" +
|
||||
i18n.sprintf(i18n._("Setting the type to %scheck%s will not execute the playbook."), "<em>", "</em>") + " " +
|
||||
i18n.sprintf(i18n._("Instead, %s will check playbook " +
|
||||
" syntax, test environment setup and report problems."), "<code>ansible</code>") + "</p> <p>" +
|
||||
i18n.sprintf(i18n._("Setting the type to %sscan%s will execute the playbook and store any " +
|
||||
" scanned facts for use with Tower's System Tracking feature."), "<em>", "</em>") + "</p>",
|
||||
dataTitle: i18n._('Job Type'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -78,7 +81,7 @@ export default
|
||||
},
|
||||
requiredErrorMsg: "Please select an Inventory or check the Prompt on launch option.",
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>Select the inventory containing the hosts you want this job to manage.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Select the inventory containing the hosts you want this job to manage.") + "</p>",
|
||||
dataTitle: i18n._('Inventory'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -106,7 +109,7 @@ export default
|
||||
init: "true"
|
||||
},
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>Select the project containing the playbook you want this job to execute.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Select the project containing the playbook you want this job to execute.") + "</p>",
|
||||
dataTitle: i18n._('Project'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -123,7 +126,7 @@ export default
|
||||
init: "true"
|
||||
},
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>Select the playbook to be executed by this job.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Select the playbook to be executed by this job.") + "</p>",
|
||||
dataTitle: i18n._('Playbook'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -145,8 +148,8 @@ export default
|
||||
},
|
||||
requiredErrorMsg: "Please select a Machine Credential or check the Prompt on launch option.",
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>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.</p>"),
|
||||
awPopOver: "<p>" + i18n._("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.") + "</p>",
|
||||
dataTitle: i18n._('Credential'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -167,8 +170,8 @@ export default
|
||||
sourceModel: 'cloud_credential',
|
||||
sourceField: 'name',
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>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.</p>"),
|
||||
awPopOver:"<p>" + i18n._("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.") + "</p>",
|
||||
dataTitle: i18n._('Cloud Credential'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -185,7 +188,7 @@ export default
|
||||
sourceModel: 'network_credential',
|
||||
sourceField: 'name',
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>Network credentials are used by Ansible networking modules to connect to and manage networking devices.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Network credentials are used by Ansible networking modules to connect to and manage networking devices.") + "</p>",
|
||||
dataTitle: i18n._('Network Credential'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -201,9 +204,10 @@ export default
|
||||
"default": '0',
|
||||
'class': "input-small",
|
||||
column: 1,
|
||||
awPopOver: i18n._('<p>The number of parallel or simultaneous processes to use while executing the playbook. 0 signifies ' +
|
||||
'the default value from the <a id="ansible_forks_docs" href=\"http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file\" ' +
|
||||
' target=\"_blank\">ansible configuration file</a>.</p>'),
|
||||
awPopOver: '<p>' + i18n.sprintf(i18n._('The number of parallel or simultaneous processes to use while executing the playbook. 0 signifies ' +
|
||||
'the default value from the %sansible configuration file%s.'), '' +
|
||||
'<a id="ansible_forks_docs" href=\"http://docs.ansible.com/intro_configuration.html#the-ansible-configuration-file\" ' +
|
||||
' target=\"_blank\">', '</a>') +'</p>',
|
||||
dataTitle: i18n._('Forks'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -213,9 +217,10 @@ export default
|
||||
label: i18n._('Limit'),
|
||||
type: 'text',
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>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 ; : or ,</p><p>For more information and examples see " +
|
||||
"<a href=\"http://docs.ansible.com/intro_patterns.html\" target=\"_blank\">the Patterns topic at docs.ansible.com</a>.</p>"),
|
||||
awPopOver: "<p>" + i18n.sprintf(i18n._("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"), ";", ":", ",") + "</p><p>" +
|
||||
i18n.sprintf(i18n._("For more information and examples see " +
|
||||
"%sthe Patterns topic at docs.ansible.com%s."), "<a href=\"http://docs.ansible.com/intro_patterns.html\" target=\"_blank\">", "</a>") + "</p>",
|
||||
dataTitle: i18n._('Limit'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -232,7 +237,7 @@ export default
|
||||
"default": 1,
|
||||
required: true,
|
||||
column: 1,
|
||||
awPopOver: i18n._("<p>Control the level of output ansible will produce as the playbook executes.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Control the level of output ansible will produce as the playbook executes.") + "</p>",
|
||||
dataTitle: i18n._('Verbosity'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -244,9 +249,9 @@ export default
|
||||
rows: 5,
|
||||
'elementClass': 'Form-textInput',
|
||||
column: 2,
|
||||
awPopOver: i18n._("<p>Provide a comma separated list of tags.</p>\n" +
|
||||
"<p>Tags are useful when you have a large playbook, and you want to run a specific part of a play or task.</p>" +
|
||||
"<p>Consult the Ansible documentation for further details on the usage of tags.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Provide a comma separated list of tags.") + "</p>\n" +
|
||||
"<p>" + i18n._("Tags are useful when you have a large playbook, and you want to run a specific part of a play or task.") + "</p>" +
|
||||
"<p>" + i18n._("Consult the Ansible documentation for further details on the usage of tags.") + "</p>",
|
||||
dataTitle: i18n._("Job Tags"),
|
||||
dataPlacement: "right",
|
||||
dataContainer: "body",
|
||||
@ -262,9 +267,9 @@ export default
|
||||
rows: 5,
|
||||
'elementClass': 'Form-textInput',
|
||||
column: 2,
|
||||
awPopOver: i18n._("<p>Provide a comma separated list of tags.</p>\n" +
|
||||
"<p>Skip tags are useful when you have a large playbook, and you want to skip specific parts of a play or task.</p>" +
|
||||
"<p>Consult the Ansible documentation for further details on the usage of tags.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Provide a comma separated list of tags.") + "</p>\n" +
|
||||
"<p>" + i18n._("Skip tags are useful when you have a large playbook, and you want to skip specific parts of a play or task.") + "</p>" +
|
||||
"<p>" + i18n._("Consult the Ansible documentation for further details on the usage of tags.") + "</p>",
|
||||
dataTitle: i18n._("Skip Tags"),
|
||||
dataPlacement: "right",
|
||||
dataContainer: "body",
|
||||
@ -282,7 +287,7 @@ export default
|
||||
label: i18n._('Enable Privilege Escalation'),
|
||||
type: 'checkbox',
|
||||
column: 2,
|
||||
awPopOver: i18n._("<p>If enabled, run this playbook as an administrator. This is the equivalent of passing the <code>--become</code> option to the <code>ansible-playbook</code> command. </p>"),
|
||||
awPopOver: "<p>" + i18n.sprintf(i18n._("If enabled, run this playbook as an administrator. This is the equivalent of passing the %s option to the %s command."), '<code>--become</code>', '<code>ansible-playbook</code>') + " </p>",
|
||||
dataPlacement: 'right',
|
||||
dataTitle: i18n._('Become Privilege Escalation'),
|
||||
dataContainer: "body",
|
||||
@ -294,8 +299,8 @@ export default
|
||||
type: 'checkbox',
|
||||
ngChange: "toggleCallback('host_config_key')",
|
||||
column: 2,
|
||||
awPopOver: i18n._("<p>Enables creation of a provisioning callback URL. Using the URL a host can contact Tower and request a configuration update " +
|
||||
"using this job template.</p>"),
|
||||
awPopOver: "<p>" + i18n._("Enables creation of a provisioning callback URL. Using the URL a host can contact Tower and request a configuration update " +
|
||||
"using this job template.") + "</p>",
|
||||
dataPlacement: 'right',
|
||||
dataTitle: i18n._('Allow Provisioning Callbacks'),
|
||||
dataContainer: "body",
|
||||
@ -338,7 +343,7 @@ export default
|
||||
multiSelect: true,
|
||||
dataTitle: i18n._('Labels'),
|
||||
dataPlacement: 'right',
|
||||
awPopOver: i18n._("<p>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.</p>"),
|
||||
awPopOver: "<p>" + i18n._("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.") + "</p>",
|
||||
dataContainer: 'body',
|
||||
ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAddJobTemplate)'
|
||||
},
|
||||
@ -349,12 +354,12 @@ export default
|
||||
rows: 6,
|
||||
"default": "---",
|
||||
column: 2,
|
||||
awPopOver: i18n._("<p>Pass extra command line variables to the playbook. This is the <code>-e</code> or <code>--extra-vars</code> command line parameter " +
|
||||
"for <code>ansible-playbook</code>. Provide key/value pairs using either YAML or JSON.</p>" +
|
||||
awPopOver: "<p>" + i18n.sprintf(i18n._("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."), '<code>-e</code>', '<code>--extra-vars</code>', '<code>ansible-playbook</code>') + "</p>" +
|
||||
"JSON:<br />\n" +
|
||||
"<blockquote>{<br /> \"somevar\": \"somevalue\",<br /> \"password\": \"magic\"<br /> }</blockquote>\n" +
|
||||
"YAML:<br />\n" +
|
||||
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n"),
|
||||
"<blockquote>---<br />somevar: somevalue<br />password: magic<br /></blockquote>\n",
|
||||
dataTitle: i18n._('Extra Variables'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
|
||||
@ -72,7 +72,7 @@ export default
|
||||
label: i18n._('Add'),
|
||||
awToolTip: i18n._('Add a permission'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: '(organization_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
@ -77,9 +77,9 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
class: 'Form-textUneditable',
|
||||
showonly: true,
|
||||
ngShow: "scm_type.value == 'manual' " ,
|
||||
awPopOver: i18n._('<p>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.</p>' +
|
||||
'<p>Use PROJECTS_ROOT in your environment settings file to determine the base path value.</p>'),
|
||||
awPopOver: '<p>' + i18n._('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.') + '</p>' +
|
||||
'<p>' + i18n.sprintf(i18n._('Use %s in your environment settings file to determine the base path value.'), 'PROJECTS_ROOT') + '</p>',
|
||||
dataTitle: i18n._('Project Base Path'),
|
||||
dataContainer: 'body',
|
||||
dataPlacement: 'right',
|
||||
@ -95,9 +95,9 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
init: false
|
||||
},
|
||||
ngShow: "scm_type.value == 'manual' && !showMissingPlaybooksAlert",
|
||||
awPopOver: i18n._('<p>Select from the list of directories found in the base path.' +
|
||||
'Together the base path and the playbook directory provide the full path used to locate playbooks.</p>' +
|
||||
'<p>Use PROJECTS_ROOT in your environment settings file to determine the base path value.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Select from the list of directories found in the base path.' +
|
||||
'Together the base path and the playbook directory provide the full path used to locate playbooks.') + '</p>' +
|
||||
'<p>' + i18n.sprintf(i18n._('Use %s in your environment settings file to determine the base path value.'), 'PROJECTS_ROOT') + '</p>',
|
||||
dataTitle: i18n._('Project Path'),
|
||||
dataContainer: 'body',
|
||||
dataPlacement: 'right',
|
||||
@ -151,7 +151,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
name: 'scm_clean',
|
||||
label: i18n._('Clean'),
|
||||
type: 'checkbox',
|
||||
awPopOver: i18n._('<p>Remove any local modifications prior to performing an update.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Remove any local modifications prior to performing an update.') + '</p>',
|
||||
dataTitle: i18n._('SCM Clean'),
|
||||
dataContainer: 'body',
|
||||
dataPlacement: 'right',
|
||||
@ -161,8 +161,8 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
name: 'scm_delete_on_update',
|
||||
label: i18n._('Delete on Update'),
|
||||
type: 'checkbox',
|
||||
awPopOver: i18n._('<p>Delete the local repository in its entirety prior to performing an update.</p><p>Depending on the size of the ' +
|
||||
'repository this may significantly increase the amount of time required to complete an update.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Delete the local repository in its entirety prior to performing an update.') + '</p><p>' + i18n._('Depending on the size of the ' +
|
||||
'repository this may significantly increase the amount of time required to complete an update.') + '</p>',
|
||||
dataTitle: i18n._('SCM Delete'),
|
||||
dataContainer: 'body',
|
||||
dataPlacement: 'right',
|
||||
@ -172,7 +172,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
name: 'scm_update_on_launch',
|
||||
label: i18n._('Update on Launch'),
|
||||
type: 'checkbox',
|
||||
awPopOver: i18n._('<p>Each time a job runs using this project, perform an update to the local repository prior to starting the job.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Each time a job runs using this project, perform an update to the local repository prior to starting the job.') + '</p>',
|
||||
dataTitle: i18n._('SCM Update'),
|
||||
dataContainer: 'body',
|
||||
dataPlacement: 'right',
|
||||
@ -181,7 +181,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
}]
|
||||
},
|
||||
scm_update_cache_timeout: {
|
||||
label: i18n._(`Cache Timeout<span class="small-text"> (seconds)</span>`),
|
||||
label: i18n.sprintf(i18n._('Cache Timeout%s (seconds)%s'), '<span class="small-text">', '</span>'),
|
||||
id: 'scm-cache-timeout',
|
||||
type: 'number',
|
||||
integer: true,
|
||||
@ -189,9 +189,9 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
ngShow: "scm_update_on_launch && projectSelected && scm_type.value !== 'manual'",
|
||||
spinner: true,
|
||||
"default": '0',
|
||||
awPopOver: i18n._('<p>Time in seconds to consider a project to be current. During job runs and callbacks the task system will ' +
|
||||
awPopOver: '<p>' + i18n._('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.</p>'),
|
||||
'and a new project update will be performed.') + '</p>',
|
||||
dataTitle: i18n._('Cache Timeout'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -235,7 +235,7 @@ angular.module('ProjectFormDefinition', ['SchedulesListDefinition'])
|
||||
label: 'Add',
|
||||
awToolTip: i18n._('Add a permission'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: '(project_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
@ -83,7 +83,7 @@ export default
|
||||
label: 'Add',
|
||||
awToolTip: i18n._('Add user to team'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: '(team_obj.summary_fields.user_capabilities.edit || canAdd)'
|
||||
}
|
||||
},
|
||||
|
||||
@ -38,7 +38,7 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.key_required = false; // JT -- doing the same for key and project
|
||||
scope.project_required = false;
|
||||
scope.subscription_required = false;
|
||||
scope.key_description = i18n._("Paste the contents of the SSH private key file.<div class=\"popover-footer\"><span class=\"key\">esc</span> or click to close</div>");
|
||||
scope.key_description = i18n.sprintf(i18n._("Paste the contents of the SSH private key file.%s or click to close%s"), "<div class=\"popover-footer\"><span class=\"key\">Esc</span>", "</div>");
|
||||
scope.host_required = false;
|
||||
scope.password_required = false;
|
||||
scope.hostLabel = '';
|
||||
@ -71,8 +71,8 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.domainLabel = '';
|
||||
scope.project_required = false;
|
||||
scope.passwordLabel = i18n._('Password (API Key)');
|
||||
scope.projectPopOver = i18n._("<p>The project value</p>");
|
||||
scope.hostPopOver = i18n._("<p>The host value</p>");
|
||||
scope.projectPopOver = "<p>" + i18n._("The project value") + "</p>";
|
||||
scope.hostPopOver = "<p>" + i18n._("The host value") + "</p>";
|
||||
scope.ssh_key_data_api_error = '';
|
||||
if (!Empty(scope.kind)) {
|
||||
// Apply kind specific settings
|
||||
@ -102,10 +102,10 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.key_description = i18n._('Paste the contents of the PEM file associated with the service account email.');
|
||||
scope.projectLabel = i18n._("Project");
|
||||
scope.project_required = false;
|
||||
scope.projectPopOver = i18n._("<p>The Project ID is the " +
|
||||
scope.projectPopOver = "<p>" + i18n._("The Project ID is the " +
|
||||
"GCE assigned identification. It is constructed as " +
|
||||
"two words followed by a three digit number. Such " +
|
||||
"as: </p><p>adjective-noun-000</p>");
|
||||
"as: ") + "</p><p>adjective-noun-000</p>";
|
||||
break;
|
||||
case 'azure':
|
||||
scope.sshKeyDataLabel = i18n._('Management Certificate');
|
||||
@ -135,11 +135,11 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.project_required = true;
|
||||
scope.host_required = true;
|
||||
scope.username_required = true;
|
||||
scope.projectPopOver = i18n._("<p>This is the tenant name. " +
|
||||
scope.projectPopOver = "<p>" + i18n._("This is the tenant name. " +
|
||||
" This value is usually the same " +
|
||||
" as the username.</p>");
|
||||
scope.hostPopOver = i18n._("<p>The host to authenticate with." +
|
||||
"<br />For example, https://openstack.business.com/v2.0/");
|
||||
" as the username.") + "</p>";
|
||||
scope.hostPopOver = "<p>" + i18n._("The host to authenticate with.") +
|
||||
"<br />" + i18n.sprintf(i18n._("For example, %s"), "https://openstack.business.com/v2.0/");
|
||||
break;
|
||||
case 'satellite6':
|
||||
scope.username_required = true;
|
||||
@ -147,8 +147,8 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.passwordLabel = i18n._('Password');
|
||||
scope.host_required = true;
|
||||
scope.hostLabel = i18n._("Satellite 6 Host");
|
||||
scope.hostPopOver = i18n._("Enter the hostname or IP address name which <br />" +
|
||||
"corresponds to your Red Hat Satellite 6 server.");
|
||||
scope.hostPopOver = i18n.sprintf(i18n._("Enter the hostname or IP address name which %s" +
|
||||
"corresponds to your Red Hat Satellite 6 server."), "<br />");
|
||||
break;
|
||||
case 'cloudforms':
|
||||
scope.username_required = true;
|
||||
@ -156,8 +156,8 @@ angular.module('CredentialsHelper', ['Utilities'])
|
||||
scope.passwordLabel = i18n._('Password');
|
||||
scope.host_required = true;
|
||||
scope.hostLabel = i18n._("CloudForms Host");
|
||||
scope.hostPopOver = i18n._("Enter the hostname or IP address for the virtual <br />" +
|
||||
" machine which is hosting the CloudForm appliance.");
|
||||
scope.hostPopOver = i18n.sprintf(i18n._("Enter the hostname or IP address for the virtual %s" +
|
||||
" machine which is hosting the CloudForm appliance."), "<br />");
|
||||
break;
|
||||
case 'net':
|
||||
scope.username_required = true;
|
||||
|
||||
@ -1,16 +1,6 @@
|
||||
/* jshint ignore:start */
|
||||
|
||||
function isString(arg) {
|
||||
return typeof arg === 'string';
|
||||
}
|
||||
|
||||
function isNull(arg) {
|
||||
return arg === null;
|
||||
}
|
||||
|
||||
function isObject(arg) {
|
||||
return typeof arg === 'object' && arg !== null;
|
||||
}
|
||||
var sprintf = require('sprintf-js').sprintf;
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
@ -24,55 +14,6 @@ export function N_(s) {
|
||||
return s;
|
||||
}
|
||||
|
||||
// Copied format() from util/util.js. util.js includes "require()".
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name function:i18n#format
|
||||
* @methodOf function:format
|
||||
* @description this function provides C-style's formatted sprintf().
|
||||
*
|
||||
*/
|
||||
export function format(f) {
|
||||
var i;
|
||||
var formatRegExp = /%[sdj%]/g;
|
||||
if (!isString(f)) {
|
||||
var objects = [];
|
||||
for (i = 0; i < arguments.length; i++) {
|
||||
objects.push(JSON.stringify(arguments[i]));
|
||||
}
|
||||
return objects.join(' ');
|
||||
}
|
||||
|
||||
i = 1;
|
||||
var args = arguments;
|
||||
var len = args.length;
|
||||
var str = String(f).replace(formatRegExp, function(x) {
|
||||
if (x === '%%') return '%';
|
||||
if (i >= len) return x;
|
||||
switch (x) {
|
||||
case '%s': return String(args[i++]);
|
||||
case '%d': return Number(args[i++]);
|
||||
case '%j':
|
||||
case '%j':
|
||||
try {
|
||||
return JSON.stringify(args[i++]);
|
||||
} catch (_) {
|
||||
return '[Circular]';
|
||||
}
|
||||
default:
|
||||
return x;
|
||||
}
|
||||
});
|
||||
for (var x = args[i]; i < len; x = args[++i]) {
|
||||
if (isNull(x) || !isObject(x)) {
|
||||
str += ' ' + x;
|
||||
} else {
|
||||
str += ' ' + JSON.stringify(x);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
export default
|
||||
angular.module('I18N', [])
|
||||
.factory('I18NInit', ['$window', 'gettextCatalog',
|
||||
@ -94,7 +35,7 @@ export default
|
||||
return {
|
||||
_: function (s) { return gettextCatalog.getString (s); },
|
||||
N_: N_,
|
||||
format: format,
|
||||
sprintf: sprintf,
|
||||
hasTranslation: function () {
|
||||
return gettextCatalog.strings[gettextCatalog.currentLanguage] !== undefined;
|
||||
}
|
||||
|
||||
@ -55,8 +55,8 @@ export default ['i18n', function(i18n) {
|
||||
awDropFile: true,
|
||||
ngDisabled: '!(inventory_script_obj.summary_fields.user_capabilities.edit || canAdd)',
|
||||
rows: 10,
|
||||
awPopOver: i18n._("<p>Drag and drop your custom inventory script file here or create one in the field to import your custom inventory. " +
|
||||
"<br><br> Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python</p>"),
|
||||
awPopOver: "<p>" + i18n._("Drag and drop your custom inventory script file here or create one in the field to import your custom inventory.") + " " +
|
||||
"<br><br> " + i18n.sprintf(i18n._("Script must begin with a hashbang sequence: i.e.... %s"), "#!/usr/bin/env python") + "</p>",
|
||||
dataTitle: i18n._('Custom Script'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body"
|
||||
|
||||
@ -42,7 +42,7 @@ export default ['i18n', function(i18n){
|
||||
ngClick: 'addCustomInv()',
|
||||
awToolTip: i18n._('Create a new custom inventory'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: 'canAdd'
|
||||
}
|
||||
},
|
||||
|
||||
@ -56,7 +56,7 @@ export default
|
||||
ngClick: 'addCredential()',
|
||||
awToolTip: i18n._('Create a new credential'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: "true"
|
||||
}
|
||||
},
|
||||
|
||||
@ -66,7 +66,7 @@ export default
|
||||
ngClick: 'addInventory()',
|
||||
awToolTip: i18n._('Create a new inventory'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: 'canAdd'
|
||||
}
|
||||
},
|
||||
|
||||
@ -58,7 +58,7 @@ export default
|
||||
ngClick: 'addProject()',
|
||||
awToolTip: i18n._('Create a new project'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: "canAdd"
|
||||
},
|
||||
refresh: {
|
||||
|
||||
@ -48,7 +48,7 @@ export default
|
||||
ngClick: 'addTeam()',
|
||||
awToolTip: i18n._('Create a new team'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: 'canAdd'
|
||||
}
|
||||
},
|
||||
|
||||
@ -55,7 +55,7 @@ export default
|
||||
basePaths: ['organizations', 'users'], // base path must be in list, or action not available
|
||||
awToolTip: i18n._('Create a new user'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: 'canAdd'
|
||||
}
|
||||
},
|
||||
|
||||
@ -15,19 +15,19 @@
|
||||
</div>
|
||||
<div class="LoginModal-alert LoginModal-alert--error" ng-show="sessionExpired">
|
||||
<i class="LoginModal-alertIcon fa fa-exclamation-triangle"></i>
|
||||
<div class="LoginModal-alertText">
|
||||
<div class="LoginModal-alertText" translate>
|
||||
Your session timed out due to inactivity. Please sign in.
|
||||
</div>
|
||||
</div>
|
||||
<div class="LoginModal-alert LoginModal-alert--error" ng-show="sessionLimitExpired">
|
||||
<i class="LoginModal-alertIcon fa fa-exclamation-triangle"></i>
|
||||
<div class="LoginModal-alertText">
|
||||
<div class="LoginModal-alertText" translate>
|
||||
Maximum per-user sessions reached. Please sign in.
|
||||
</div>
|
||||
</div>
|
||||
<div class="LoginModal-alert LoginModal-alert--error" ng-show="attemptFailed">
|
||||
<i class="LoginModal-alertIcon fa fa-exclamation-triangle"></i>
|
||||
<div class="LoginModal-alertText">
|
||||
<div class="LoginModal-alertText" translate>
|
||||
Invalid username and/or password. Please try again.
|
||||
</div>
|
||||
</div>
|
||||
@ -53,7 +53,7 @@
|
||||
autocomplete="off" required>
|
||||
<div class="error"
|
||||
ng-show="loginForm.login_username.$dirty &&
|
||||
loginForm.login_username.$error.required">
|
||||
loginForm.login_username.$error.required" translate>
|
||||
Please enter a username.
|
||||
</div>
|
||||
<div class="error api-error"
|
||||
@ -74,7 +74,7 @@
|
||||
<div class="error"
|
||||
ng-show="loginForm.login_password.$dirty
|
||||
&&
|
||||
loginForm.login_password.$error.required">
|
||||
loginForm.login_password.$error.required" translate>
|
||||
Please enter a password.
|
||||
</div>
|
||||
<div class="error api-error"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<div class="ThirdPartySignOn" ng-if="thirdPartyLoginSupported">
|
||||
<div class="ThirdPartySignOn-label">
|
||||
<div class="ThirdPartySignOn-label" translate>
|
||||
SIGN IN WITH
|
||||
</div>
|
||||
<div ng-repeat="item in loginItems" class="ThirdPartySignOn-item">
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
*/
|
||||
|
||||
export default
|
||||
['$http', 'ProcessErrors', function($http, ProcessErrors) {
|
||||
['$http', 'ProcessErrors', 'i18n', function($http, ProcessErrors, i18n) {
|
||||
return function (params) {
|
||||
var scope = params.scope,
|
||||
url = params.url;
|
||||
@ -31,7 +31,7 @@
|
||||
newOption.type = "google";
|
||||
newOption.icon = "ThirdPartySignOn-icon--fontCustom icon-google";
|
||||
newOption.link = option.login_url;
|
||||
newOption.tooltip = "Sign in with Google";
|
||||
newOption.tooltip = i18n.sprintf(i18n._("Sign in with %s"), "Google");
|
||||
|
||||
return newOption;
|
||||
}
|
||||
@ -42,15 +42,15 @@
|
||||
newOption.type = "github";
|
||||
newOption.icon = "fa-github ThirdPartySignOn-icon--gitHub";
|
||||
newOption.link = option.login_url;
|
||||
newOption.tooltip = "Sign in with GitHub";
|
||||
newOption.tooltip = i18n.sprintf(i18n._("Sign in with %s"), "GitHub");
|
||||
|
||||
// if this is a GitHub team or org, add that to
|
||||
// the tooltip
|
||||
if (key.split("-")[1]){
|
||||
if (key.split("-")[1] === "team") {
|
||||
newOption.tooltip += " Teams";
|
||||
newOption.tooltip = i18n.sprintf(i18n._("Sign in with %s Teams"), "GitHub");
|
||||
} else if (key.split("-")[1] === "org") {
|
||||
newOption.tooltip += " Organizations";
|
||||
newOption.tooltip = i18n.sprintf(i18n._("Sign in with %s Organizations"), "GitHub");
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
newOption.type = "saml";
|
||||
newOption.icon = "ThirdPartySignOn-icon--fontCustom icon-saml-02";
|
||||
newOption.link = option.login_url;
|
||||
newOption.tooltip = "Sign in with SAML";
|
||||
newOption.tooltip = i18n.sprintf(i18n._("Sign in with %s"), "SAML");
|
||||
|
||||
// add the idp of the saml type to the tooltip
|
||||
if (key.split(":")[1]){
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
*************************************************/
|
||||
|
||||
import {templateUrl} from '../../shared/template-url/template-url.factory';
|
||||
import {N_} from "../../i18n";
|
||||
|
||||
export default {
|
||||
name: 'managementJobsList',
|
||||
@ -17,6 +18,6 @@ export default {
|
||||
},
|
||||
ncyBreadcrumb: {
|
||||
parent: 'setup',
|
||||
label: 'MANAGEMENT JOBS'
|
||||
label: N_('MANAGEMENT JOBS')
|
||||
},
|
||||
};
|
||||
|
||||
@ -94,8 +94,8 @@ export default ['i18n', function(i18n) {
|
||||
label: i18n._('Recipient List'),
|
||||
type: 'textarea',
|
||||
rows: 3,
|
||||
awPopOver: i18n._('<p>Type an option on each line.</p>'+
|
||||
'<p>For example:<br>alias1@email.com<br>\n alias2@email.com<br>\n'),
|
||||
awPopOver: '<p>' + i18n._('Type an option on each line.') + '</p>'+
|
||||
'<p>' + i18n._('For example:') + '<br>alias1@email.com<br>\n alias2@email.com<br>\n',
|
||||
dataTitle: i18n._('Recipient List'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -138,8 +138,8 @@ export default ['i18n', function(i18n) {
|
||||
label: i18n._('Destination Channels'),
|
||||
type: 'textarea',
|
||||
rows: 3,
|
||||
awPopOver: i18n._('<p>Type an option on each line. The pound symbol (#) is not required.</p>'+
|
||||
'<p>For example:<br>engineering<br>\n #support<br>\n'),
|
||||
awPopOver: '<p>' + i18n._('Type an option on each line. The pound symbol (#) is not required.') + '</p>'+
|
||||
'<p>' + i18n._('For example:') + '<br>engineering<br>\n #support<br>\n',
|
||||
dataTitle: i18n._('Destination Channels'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -155,8 +155,8 @@ export default ['i18n', function(i18n) {
|
||||
label: i18n._('Destination Channels'),
|
||||
type: 'textarea',
|
||||
rows: 3,
|
||||
awPopOver: i18n._('<p>Type an option on each line. The pound symbol (#) is not required.</p>'+
|
||||
'<p>For example:<br>engineering<br>\n #support<br>\n'),
|
||||
awPopOver: '<p>' + i18n._('Type an option on each line. The pound symbol (#) is not required.') + '</p>'+
|
||||
'<p>' + i18n._('For example:') + '<br>engineering<br>\n #support<br>\n',
|
||||
dataTitle: i18n._('Destination Channels'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -195,8 +195,8 @@ export default ['i18n', function(i18n) {
|
||||
from_number: {
|
||||
label: i18n._('Source Phone Number'),
|
||||
type: 'text',
|
||||
awPopOver: i18n._('<p>Number associated with the "Messaging Service" in Twilio.</p>'+
|
||||
'<p>This must be of the form <code>+18005550199</code>.</p>'),
|
||||
awPopOver: '<p>' + i18n._('Number associated with the "Messaging Service" in Twilio.') + '</p>'+
|
||||
'<p>' + i18n.sprintf(i18n._('This must be of the form %s.'), '<code>+18005550199</code>') + '</p>',
|
||||
awRequiredWhen: {
|
||||
reqExpression: "twilio_required",
|
||||
init: "false"
|
||||
@ -209,8 +209,8 @@ export default ['i18n', function(i18n) {
|
||||
label: i18n._('Destination SMS Number'),
|
||||
type: 'textarea',
|
||||
rows: 3,
|
||||
awPopOver: i18n._('<p>Type an option on each line.</p>'+
|
||||
'<p>For example:<br><code>+12125552368</code><br>\n<code>+19105556162</code><br>\n'),
|
||||
awPopOver: '<p>' + i18n._('Type an option on each line.') + '</p>'+
|
||||
'<p>' + i18n._('For example:') + '<br><code>+12125552368</code><br>\n<code>+19105556162</code><br>\n',
|
||||
dataTitle: i18n._('Destination SMS Number'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
@ -292,8 +292,8 @@ export default ['i18n', function(i18n) {
|
||||
color: {
|
||||
label: i18n._('Notification Color'),
|
||||
type: 'text',
|
||||
awPopOver: i18n._('<p>Color can be one of <code>yellow</code>, <code>green</code>, <code>red</code>, ' +
|
||||
'<code>purple</code>, <code>gray</code>, or <code>random</code>.\n'),
|
||||
awPopOver: '<p>' + i18n.sprintf(i18n._('Color can be one of %s.'), '<code>yellow</code>, <code>green</code>, <code>red</code>, ' +
|
||||
'<code>purple</code>, <code>gray</code>, <code>random</code>') + '\n',
|
||||
awRequiredWhen: {
|
||||
reqExpression: "hipchat_required",
|
||||
init: "false"
|
||||
@ -329,13 +329,13 @@ export default ['i18n', function(i18n) {
|
||||
reqExpression: "webhook_required",
|
||||
init: "false"
|
||||
},
|
||||
awPopOver: i18n._('<p>Specify HTTP Headers in JSON format</p>' +
|
||||
'<p>For example:<br><pre>\n' +
|
||||
awPopOver: '<p>' + i18n._('Specify HTTP Headers in JSON format') + '</p>' +
|
||||
'<p>' + i18n._('For example:') + '<br><pre>\n' +
|
||||
'{\n' +
|
||||
' "X-Auth-Token": "828jf0",\n' +
|
||||
' "X-Ansible": "Is great!"\n' +
|
||||
'}\n' +
|
||||
'</pre></p>'),
|
||||
'</pre></p>',
|
||||
dataPlacement: 'right',
|
||||
ngShow: "notification_type.value == 'webhook' ",
|
||||
subForm: 'typeSubForm',
|
||||
@ -367,8 +367,8 @@ export default ['i18n', function(i18n) {
|
||||
label: i18n._('Destination Channels or Users'),
|
||||
type: 'textarea',
|
||||
rows: 3,
|
||||
awPopOver: i18n._('<p>Type an option on each line. The pound symbol (#) is not required.</p>'+
|
||||
'<p>For example:<br>#support or support<br>\n @username or username<br>\n'),
|
||||
awPopOver: '<p>' + i18n._('Type an option on each line. The pound symbol (#) is not required.') + '</p>'+
|
||||
'<p>' + i18n._('For example:') + '<br>' + i18n.sprintf(i18n._('%s or %s'), '#support', 'support') + '<br>\n ' + i18n.sprintf(i18n._('%s or %s'), '@username', 'username') + '<br>\n',
|
||||
dataTitle: i18n._('Destination Channels'),
|
||||
dataPlacement: 'right',
|
||||
dataContainer: "body",
|
||||
|
||||
@ -49,7 +49,7 @@ export default ['i18n', function(i18n){
|
||||
ngClick: 'addNotification()',
|
||||
awToolTip: i18n._('Create a new custom inventory'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD'),
|
||||
buttonContent: '+ ' + i18n._('ADD'),
|
||||
ngShow: 'canAdd'
|
||||
}
|
||||
},
|
||||
|
||||
@ -65,7 +65,7 @@ export default ['i18n', function(i18n){
|
||||
ngClick: 'addNotificationTemplate()',
|
||||
awToolTip: i18n._('Create a new notification template'),
|
||||
actionClass: 'btn List-buttonSubmit',
|
||||
buttonContent: i18n._('+ ADD NOTIFICATION TEMPLATE'),
|
||||
buttonContent: '+ ' + i18n._('ADD NOTIFICATION TEMPLATE'),
|
||||
ngShow: 'current_user.is_superuser || (current_user_admin_orgs && current_user_admin_orgs.length > 0)'
|
||||
}
|
||||
}
|
||||
|
||||
@ -961,7 +961,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
this.form.name + "_form." + fld + `.$error.email'>${error_message}</div>`;
|
||||
}
|
||||
if (field.awPassMatch) {
|
||||
error_message = error_message = i18n._("This value does not match the password you entered previously. Please confirm that password.");
|
||||
error_message = i18n._("This value does not match the password you entered previously. Please confirm that password.");
|
||||
html += "<div class='error' id='" + this.form.name + "-" + fld + "-passmatch-error' ng-show='" + this.form.name + "_form." + fld +
|
||||
`.$error.awpassmatch'>${error_message}</div>`;
|
||||
}
|
||||
@ -973,7 +973,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
if (field.chkPass && $AnsibleConfig) {
|
||||
// password strength
|
||||
if ($AnsibleConfig.password_length) {
|
||||
error_message = i18n.format(i18n._("Your password must be %d characters long."), $AnsibleConfig.password_length);
|
||||
error_message = i18n.sprintf(i18n._("Your password must be %d characters long."), $AnsibleConfig.password_length);
|
||||
html += "<div class=\"error\" ng-show=\"" + this.form.name + '_form.' + fld +
|
||||
`.$error.password_length">${error_message}</div>`;
|
||||
}
|
||||
@ -993,7 +993,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
`.$error.hasNumber">${error_message}</div>`;
|
||||
}
|
||||
if ($AnsibleConfig.password_hasSymbol) {
|
||||
i18n.format(i18n._("Your password must contain one of the following characters: %s"), "`~!@#$%^&*()_-+=|}\]{\[;:\"\'?\/>.<,");
|
||||
error_message = i18n.sprintf(i18n._("Your password must contain one of the following characters: %s"), "`~!@#$%^&*()_-+=|}\]{\[;:\"\'?\/>.<,");
|
||||
html += "<div class=\"error\" ng-show=\"" + this.form.name + '_form.' + fld +
|
||||
`.$error.hasSymbol">${error_message}</div>`;
|
||||
}
|
||||
@ -1097,7 +1097,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
if(!field.multiSelect && !field.disableChooseOption){
|
||||
html += "<option value=\"\">";
|
||||
// Add a custom default select 'value' (default text)
|
||||
html += (field.defaultText) ? field.defaultText : i18n.format(i18n._("Choose a %s"), field.label.toLowerCase());
|
||||
html += (field.defaultText) ? field.defaultText : i18n.sprintf(i18n._("Choose a %s"), field.label.toLowerCase());
|
||||
html += "</option>\n";
|
||||
}
|
||||
|
||||
@ -1459,9 +1459,9 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
html += (options.mode === 'edit') ? this.form.editTitle : this.form.addTitle;
|
||||
if(this.form.name === "user"){
|
||||
html+= "<span class=\"Form-title--is_superuser\" "+
|
||||
"ng-show='is_superuser'>Admin</span>";
|
||||
"ng-show='is_superuser'>" + i18n._("Admin") + "</span>";
|
||||
html+= "<span class=\"Form-title--is_system_auditor\" "+
|
||||
"ng-show='is_system_auditor'>Auditor</span>";
|
||||
"ng-show='is_system_auditor'>" + i18n._("Auditor") + "</span>";
|
||||
html+= "<span class=\"Form-title--is_ldap_user\" "+
|
||||
"ng-show='ldap_user'>LDAP</span>";
|
||||
html+= "<span class=\"Form-title--is_external_account\" "+
|
||||
@ -1966,7 +1966,7 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
|
||||
|
||||
// Message for loading
|
||||
html += "<tr ng-show=\"" + collection.iterator + "Loading == true\">\n";
|
||||
html += "<td colspan=\"" + cnt + "\"><div class=\"loading-info\">Loading...</div></td>\n";
|
||||
html += "<td colspan=\"" + cnt + "\"><div class=\"loading-info\">" + i18n._("Loading...") + "</div></td>\n";
|
||||
html += "</tr>\n";
|
||||
|
||||
// End List
|
||||
|
||||
@ -4,8 +4,8 @@ module.exports = {
|
||||
markerNames: ['_', 'N_']
|
||||
},
|
||||
files: {
|
||||
'po/ansible-tower.pot': ['client/src/**/*.js',
|
||||
'client/src/**/*.html']
|
||||
'po/ansible-tower-ui.pot': ['client/src/**/*.js',
|
||||
'client/src/**/*.html']
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
@ -108,6 +108,7 @@
|
||||
"ng-toast": "leigh-johnson/ngToast#2.0.1",
|
||||
"nvd3": "leigh-johnson/nvd3#1.7.1",
|
||||
"reconnectingwebsocket": "^1.0.0",
|
||||
"select2": "^4.0.2"
|
||||
"select2": "^4.0.2",
|
||||
"sprintf-js": "^1.0.3"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,7 @@ var vendorPkgs = [
|
||||
'ng-toast',
|
||||
'nvd3',
|
||||
'select2',
|
||||
'sprintf-js',
|
||||
'reconnectingwebsocket'
|
||||
];
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user