mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Fixed hard-coded UI messages.
Some hard-coded messages in ipa.js have been moved into internal.py. The messages in internal.py have been rearranged to match the output (ipa_init.json). A new method IPA.get_message() has been added to take a message ID and return the translated message or a default message if not found. Ticket #1701
This commit is contained in:
parent
6a2dfde086
commit
6c6748748b
@ -138,8 +138,7 @@ IPA.facet = function (spec) {
|
||||
that.entity.redirect_facet);
|
||||
};
|
||||
|
||||
var redirect_errors =
|
||||
["IPA Error 4001"];
|
||||
var redirect_errors = [4001];
|
||||
|
||||
that.on_error = function(xhr, text_status, error_thrown) {
|
||||
|
||||
@ -147,7 +146,7 @@ IPA.facet = function (spec) {
|
||||
as there is nothing any other facet can do either. */
|
||||
if (that.entity.redirect_facet) {
|
||||
for (var i=0; i<redirect_errors.length; i++) {
|
||||
if (error_thrown.name === redirect_errors[i]) {
|
||||
if (error_thrown.code === redirect_errors[i]) {
|
||||
that.redirect();
|
||||
return;
|
||||
}
|
||||
|
@ -156,8 +156,8 @@ IPA.hbacrule_details_facet = function(spec) {
|
||||
section.radio({
|
||||
name: 'ipaenabledflag',
|
||||
options:[
|
||||
{'value': 'TRUE',label: IPA.messages['true']},
|
||||
{'value': 'FALSE',label:IPA.messages['false']}
|
||||
{ value: 'TRUE', label: IPA.get_message('true') },
|
||||
{ value: 'FALSE', label: IPA.get_message('false') }
|
||||
]
|
||||
});
|
||||
return section;
|
||||
|
@ -76,7 +76,7 @@ var IPA = ( function () {
|
||||
|
||||
// On IE the request is missing after authentication,
|
||||
// so the request needs to be resent.
|
||||
if (error_thrown.name == 'IPA Error 909') {
|
||||
if (error_thrown.code === 909) {
|
||||
batch.execute();
|
||||
|
||||
} else {
|
||||
@ -208,6 +208,35 @@ var IPA = ( function () {
|
||||
}
|
||||
};
|
||||
|
||||
that.get_message = function(id, default_message) {
|
||||
var messages = IPA.messages;
|
||||
var keys = id.split(/\./);
|
||||
|
||||
for (var i=0; messages && i<keys.length; i++) {
|
||||
var key = keys[i];
|
||||
var value = messages[key];
|
||||
|
||||
// undefined key => not found
|
||||
if (!value) return default_message;
|
||||
|
||||
// if value is string
|
||||
if (typeof value === 'string') {
|
||||
|
||||
// and it's the last key => found
|
||||
if (i === keys.length-1) return value;
|
||||
|
||||
// otherwise value should have been a container => not found
|
||||
return default_message;
|
||||
}
|
||||
|
||||
// value is container => check next key
|
||||
messages = value;
|
||||
}
|
||||
|
||||
// no more keys/messages => not found
|
||||
return default_message;
|
||||
};
|
||||
|
||||
return that;
|
||||
}());
|
||||
|
||||
@ -242,8 +271,7 @@ IPA.command = function(spec) {
|
||||
|
||||
that.retry = typeof spec.retry == 'undefined' ? true : spec.retry;
|
||||
|
||||
that.error_message = spec.error_message || (IPA.messages.dialogs ?
|
||||
IPA.messages.dialogs.batch_error_message : 'Some operations failed.');
|
||||
that.error_message = spec.error_message || IPA.get_message('dialogs.batch_error_message', 'Some operations failed.');
|
||||
|
||||
that.get_command = function() {
|
||||
return (that.entity ? that.entity+'_' : '') + that.method;
|
||||
@ -299,22 +327,19 @@ IPA.command = function(spec) {
|
||||
|
||||
if (xhr.status === 401) {
|
||||
error_thrown = {}; // error_thrown is string
|
||||
error_thrown.name = 'Kerberos ticket no longer valid.';
|
||||
if (IPA.messages && IPA.messages.ajax) {
|
||||
error_thrown.message = IPA.messages.ajax["401"];
|
||||
} else {
|
||||
error_thrown.message =
|
||||
"Your kerberos ticket is no longer valid. "+
|
||||
"Please run kinit and then click 'Retry'. "+
|
||||
"If this is your first time running the IPA Web UI "+
|
||||
"<a href='/ipa/config/unauthorized.html'>"+
|
||||
"follow these directions</a> to configure your browser.";
|
||||
}
|
||||
error_thrown.name = IPA.get_message('ajax.401.title',
|
||||
'Kerberos ticket no longer valid.');
|
||||
error_thrown.message = IPA.get_message('ajax.401.message',
|
||||
"Your kerberos ticket is no longer valid. "+
|
||||
"Please run kinit and then click 'Retry'. "+
|
||||
"If this is your first time running the IPA Web UI "+
|
||||
"<a href='/ipa/config/unauthorized.html'>"+
|
||||
"follow these directions</a> to configure your browser.");
|
||||
|
||||
} else if (!error_thrown) {
|
||||
error_thrown = {
|
||||
name: xhr.responseText || 'Unknown Error',
|
||||
message: xhr.statusText || 'Unknown Error'
|
||||
name: xhr.responseText || IPA.get_message('errors.unknown_error', 'Unknown Error'),
|
||||
message: xhr.statusText || IPA.get_message('errors.unknown_error', 'Unknown Error')
|
||||
};
|
||||
|
||||
} else if (typeof error_thrown == 'string') {
|
||||
@ -338,15 +363,16 @@ IPA.command = function(spec) {
|
||||
if (!data) {
|
||||
// error_handler() calls IPA.hide_activity_icon()
|
||||
error_handler.call(this, xhr, text_status, /* error_thrown */ {
|
||||
name: 'HTTP Error '+xhr.status,
|
||||
name: IPA.get_message('errors.http_error', 'HTTP Error')+' '+xhr.status,
|
||||
url: this.url,
|
||||
message: data ? xhr.statusText : 'No response'
|
||||
message: data ? xhr.statusText : IPA.get_message('errors.no_response', 'No response')
|
||||
});
|
||||
|
||||
} else if (data.error) {
|
||||
// error_handler() calls IPA.hide_activity_icon()
|
||||
error_handler.call(this, xhr, text_status, /* error_thrown */ {
|
||||
name: 'IPA Error '+data.error.code,
|
||||
name: IPA.get_message('errors.ipa_error', 'IPA Error')+' '+data.error.code,
|
||||
code: data.error.code,
|
||||
message: data.error.message,
|
||||
data: data
|
||||
});
|
||||
@ -361,8 +387,7 @@ IPA.command = function(spec) {
|
||||
xhr: xhr,
|
||||
text_status: text_status,
|
||||
error_thrown: {
|
||||
name: IPA.messages.dialogs ? IPA.messages.dialogs.batch_error_title :
|
||||
'Operations Error',
|
||||
name: IPA.get_message('dialogs.batch_error_title', 'Operations Error'),
|
||||
message: that.error_message
|
||||
},
|
||||
command: that,
|
||||
@ -416,7 +441,7 @@ IPA.command = function(spec) {
|
||||
var member = result.failed[association][member_name];
|
||||
for(var i = 0; i < member.length; i++) {
|
||||
if(member[i].length > 1) {
|
||||
var name = 'IPA Error';
|
||||
var name = IPA.get_message('errors.ipa_error', 'IPA Error');
|
||||
var message = member[i][1];
|
||||
if(member[i][0])
|
||||
message = member[i][0] + ': ' + message;
|
||||
@ -502,8 +527,8 @@ IPA.batch_command = function (spec) {
|
||||
var message = '';
|
||||
|
||||
if (!result) {
|
||||
name = 'Internal Error '+xhr.status;
|
||||
message = result ? xhr.statusText : "Internal error";
|
||||
name = IPA.get_message('errors.internal_error', 'Internal Error')+' '+xhr.status;
|
||||
message = result ? xhr.statusText : IPA.get_message('errors.internal_error', 'Internal Error');
|
||||
|
||||
that.errors.add(command, name, message, text_status);
|
||||
|
||||
@ -518,7 +543,7 @@ IPA.batch_command = function (spec) {
|
||||
);
|
||||
|
||||
} else if (result.error) {
|
||||
name = 'IPA Error ' + (result.error.code || '');
|
||||
name = IPA.get_message('errors.ipa_error', 'IPA Error')+(result.error.code ? ' '+result.error.code : '');
|
||||
message = result.error.message || result.error;
|
||||
|
||||
that.errors.add(command, name, message, text_status);
|
||||
@ -529,6 +554,7 @@ IPA.batch_command = function (spec) {
|
||||
text_status,
|
||||
{
|
||||
name: name,
|
||||
code: result.error.code,
|
||||
message: message,
|
||||
data: result
|
||||
}
|
||||
@ -548,8 +574,7 @@ IPA.batch_command = function (spec) {
|
||||
xhr: xhr,
|
||||
text_status: text_status,
|
||||
error_thrown: {
|
||||
name: IPA.messages.dialogs ? IPA.messages.dialogs.batch_error_title :
|
||||
'Operations Error',
|
||||
name: IPA.get_message('dialogs.batch_error_title', 'Operations Error'),
|
||||
message: that.error_message
|
||||
},
|
||||
command: that,
|
||||
@ -728,7 +753,7 @@ IPA.error_dialog = function(spec) {
|
||||
that.create = function() {
|
||||
if (that.error_thrown.url) {
|
||||
$('<p/>', {
|
||||
text: 'URL: '+that.error_thrown.url
|
||||
text: IPA.get_message('errors.url', 'URL')+': '+that.error_thrown.url
|
||||
}).appendTo(that.container);
|
||||
}
|
||||
|
||||
@ -794,21 +819,21 @@ IPA.error_dialog = function(spec) {
|
||||
var label;
|
||||
|
||||
if(that.visible_buttons.indexOf('retry') > -1) {
|
||||
label = IPA.messages.buttons ? IPA.messages.buttons.retry : 'Retry';
|
||||
label = IPA.get_message('buttons.retry', 'Retry');
|
||||
that.add_button(label, function() {
|
||||
that.on_retry();
|
||||
});
|
||||
}
|
||||
|
||||
if(that.visible_buttons.indexOf('ok') > -1) {
|
||||
label = IPA.messages.buttons ? IPA.messages.buttons.ok : 'OK';
|
||||
label = IPA.get_message('buttons.ok', 'OK');
|
||||
that.add_button(label, function() {
|
||||
that.on_ok();
|
||||
});
|
||||
}
|
||||
|
||||
if(that.visible_buttons.indexOf('cancel') > -1) {
|
||||
label = IPA.messages.buttons ? IPA.messages.buttons.cancel : 'Cancel';
|
||||
label = IPA.get_message('buttons.cancel', 'Cancel');
|
||||
that.add_button(label, function() {
|
||||
that.on_cancel();
|
||||
});
|
||||
|
@ -2578,6 +2578,7 @@
|
||||
"class": "Password",
|
||||
"cli_name": "password",
|
||||
"cli_short_name": null,
|
||||
"confirm": false,
|
||||
"default": null,
|
||||
"doc": "Registration password",
|
||||
"exclude": null,
|
||||
@ -9057,6 +9058,7 @@
|
||||
"ipadefaultprimarygroup",
|
||||
"ipaenabledflag",
|
||||
"ipaentitlementid",
|
||||
"ipaexternalmember",
|
||||
"ipagroupobjectclasses",
|
||||
"ipagroupsearchfields",
|
||||
"ipahomesrootdir",
|
||||
@ -15474,6 +15476,7 @@
|
||||
"class": "Password",
|
||||
"cli_name": "password",
|
||||
"cli_short_name": null,
|
||||
"confirm": true,
|
||||
"default": null,
|
||||
"doc": "Prompt to set the user password",
|
||||
"exclude": [
|
||||
@ -15912,7 +15915,10 @@
|
||||
"error": null,
|
||||
"messages": {
|
||||
"ajax": {
|
||||
"401": "Your Kerberos ticket is no longer valid. Please run kinit and then click 'Retry'. If this is your first time running the IPA Web UI <a href='/ipa/config/unauthorized.html'>follow these directions</a> to configure your browser."
|
||||
"401": {
|
||||
"message": "Your Kerberos ticket is no longer valid. Please run kinit and then click 'Retry'. If this is your first time running the IPA Web UI <a href='/ipa/config/unauthorized.html'>follow these directions</a> to configure your browser.",
|
||||
"title": "Kerberos ticket no longer valid."
|
||||
}
|
||||
},
|
||||
"association": {
|
||||
"add": {
|
||||
@ -15984,8 +15990,16 @@
|
||||
"remove_empty": "Select entries to be removed.",
|
||||
"remove_title": "Remove ${entity}",
|
||||
"show_details": "Show details",
|
||||
"validation_title": "Validation error",
|
||||
"validation_message": "Input form contains invalid or missing values."
|
||||
"validation_message": "Input form contains invalid or missing values.",
|
||||
"validation_title": "Validation error"
|
||||
},
|
||||
"errors": {
|
||||
"http_error": "HTTP Error",
|
||||
"internal_error": "Internal Error",
|
||||
"ipa_error": "IPA Error",
|
||||
"no_response": "No response",
|
||||
"unknown_error": "Unknown Error",
|
||||
"url": "URL"
|
||||
},
|
||||
"facet_groups": {
|
||||
"managedby": "${primary_key} is managed by:",
|
||||
@ -16278,7 +16292,7 @@
|
||||
"Administrator"
|
||||
],
|
||||
"gidnumber": [
|
||||
"166000000"
|
||||
"1890800000"
|
||||
],
|
||||
"has_keytab": true,
|
||||
"has_password": true,
|
||||
@ -16286,24 +16300,18 @@
|
||||
"/home/admin"
|
||||
],
|
||||
"ipauniqueid": [
|
||||
"a632c9f6-cdf7-11e0-89ce-525400e135d8"
|
||||
"dcc874a0-d2d1-11e0-83f8-525400e135d8"
|
||||
],
|
||||
"krbextradata": [
|
||||
{
|
||||
"__base64__": "AAJyYFROcm9vdC9hZG1pbkBJRE0uTEFCLkJPUy5SRURIQVQuQ09NAA=="
|
||||
},
|
||||
{
|
||||
"__base64__": "AAgBAA=="
|
||||
"__base64__": "AAJ/hFxOcm9vdC9hZG1pbkBJRE0uTEFCLkJPUy5SRURIQVQuQ09NAA=="
|
||||
}
|
||||
],
|
||||
"krblastpwdchange": [
|
||||
"20110824022242Z"
|
||||
],
|
||||
"krblastsuccessfulauth": [
|
||||
"20110824023056Z"
|
||||
"20110830063439Z"
|
||||
],
|
||||
"krbpasswordexpiration": [
|
||||
"20111122022242Z"
|
||||
"20111128063439Z"
|
||||
],
|
||||
"krbprincipalname": [
|
||||
"admin@IDM.LAB.BOS.REDHAT.COM"
|
||||
@ -16331,7 +16339,7 @@
|
||||
"admin"
|
||||
],
|
||||
"uidnumber": [
|
||||
"166000000"
|
||||
"1890800000"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
@ -92,365 +92,375 @@ api.register(json_metadata)
|
||||
class i18n_messages(Command):
|
||||
NO_CLI = True
|
||||
|
||||
messages={
|
||||
"login": {"header" :_("Logged In As")},
|
||||
"true": "True",
|
||||
"false": "False",
|
||||
"objects": {
|
||||
"aci": {
|
||||
"attribute":_("Attribute"),
|
||||
},
|
||||
"automountlocation": {
|
||||
"identity":_("Automount Location Settings")
|
||||
},
|
||||
"automountmap": {
|
||||
"map_type":_("Map Type"),
|
||||
"direct":_("Direct"),
|
||||
"indirect":_("Indirect"),
|
||||
},
|
||||
"automountkey": {
|
||||
},
|
||||
"cert": {
|
||||
"unspecified":_("Unspecified"),
|
||||
"key_compromise":_("Key Compromise"),
|
||||
"ca_compromise":_("CA Compromise"),
|
||||
"affiliation_changed":_("Affiliation Changed"),
|
||||
"superseded":_("Superseded"),
|
||||
"cessation_of_operation":_("Cessation of Operation"),
|
||||
"certificate_hold":_("Certificate Hold"),
|
||||
"remove_from_crl":_("Remove from CRL"),
|
||||
"privilege_withdrawn":_("Privilege Withdrawn"),
|
||||
"aa_compromise":_("AA Compromise"),
|
||||
"revoke_confirmation":_(
|
||||
"To confirm your intention to revoke this certificate, select a reason from the pull-down list, and click the \"Revoke\" button."),
|
||||
"note":_("Note"),
|
||||
"reason":_("Reason for Revocation"),
|
||||
"restore_confirmation":_(
|
||||
"To confirm your intention to restore this certificate, click the \"Restore\" button."),
|
||||
"issued_to":_("Issued To"),
|
||||
"common_name":_("Common Name"),
|
||||
"organization":_("Organization"),
|
||||
"organizational_unit":_("Organizational Unit"),
|
||||
"serial_number":_("Serial Number"),
|
||||
"issued_by":_("Issued By"),
|
||||
"validity":_("Validity"),
|
||||
"issued_on":_("Issued On"),
|
||||
"expires_on":_("Expires On"),
|
||||
"fingerprints":_("Fingerprints"),
|
||||
"sha1_fingerprint":_("SHA1 Fingerprint"),
|
||||
"md5_fingerprint":_("MD5 Fingerprint"),
|
||||
"enter_csr":_("Enter the Base64-encoded CSR below"),
|
||||
"valid":_("Valid Certificate Present"),
|
||||
"new_certificate":_("New Certificate"),
|
||||
"revoked":_("Certificate Revoked"),
|
||||
"missing":_("No Valid Certificate"),
|
||||
"view_certificate":_("Certificate for ${entity} ${primary_key}"),
|
||||
"issue_certificate":_("Issue New Certificate for ${entity} ${primary_key}"),
|
||||
"revoke_certificate":_("Revoke Certificate for ${entity} ${primary_key}"),
|
||||
"restore_certificate":_("Restore Certificate for ${entity} ${primary_key}"),
|
||||
},
|
||||
"config": {
|
||||
"user":_("User Options"),
|
||||
"search":_("Search Options"),
|
||||
"group":_("Group Options"),
|
||||
},
|
||||
"delegation": {
|
||||
},
|
||||
"dnszone": {
|
||||
"identity":_("DNS Zone Settings"),
|
||||
},
|
||||
"dnsrecord": {
|
||||
"type":_("Record Type"),
|
||||
"data":_("Data"),
|
||||
"deleted_no_data":_("DNS record was deleted because it contained no data."),
|
||||
"redirection_dnszone":_("You will be redirected to DNS Zone."),
|
||||
"title":_("Records for DNS Zone"),
|
||||
"standard":_("Standard Record Types"),
|
||||
"other":_("Other Record Types"),
|
||||
},
|
||||
"entitle": {
|
||||
"account":_("Account"),
|
||||
"certificate":_("Certificate"),
|
||||
"certificates":_("Certificates"),
|
||||
"consume":_("Consume"),
|
||||
"consume_entitlement":_("Consume Entitlement"),
|
||||
"consumed":_("Consumed"),
|
||||
"download":_("Download"),
|
||||
"download_certificate":_("Download Certificate"),
|
||||
"end":_("End"),
|
||||
"import_button":_("Import"),
|
||||
"import_certificate":_("Import Certificate"),
|
||||
"import_message":_("Enter the Base64-encoded entitlement certificate below:"),
|
||||
"loading":_("Loading..."),
|
||||
"no_certificate":_("No Certificate."),
|
||||
"product":_("Product"),
|
||||
"register":_("Register"),
|
||||
"registration":_("Registration"),
|
||||
"start":_("Start"),
|
||||
"status":_("Status"),
|
||||
},
|
||||
"group": {
|
||||
"details":_("Group Settings"),
|
||||
"posix":_("Is this a POSIX group?"),
|
||||
},
|
||||
"hbacrule": {
|
||||
"active":_("Active"),
|
||||
"allow":_("Allow"),
|
||||
"deny":_("Deny"),
|
||||
"inactive":_("Inactive"),
|
||||
"ipaenabledflag":_("Rule status"),
|
||||
"user":_("Who"),
|
||||
"anyone":_("Anyone"),
|
||||
"specified_users":_("Specified Users and Groups"),
|
||||
"host":_("Accessing"),
|
||||
"any_host":_("Any Host"),
|
||||
"specified_hosts":_("Specified Hosts and Groups"),
|
||||
"service":_("Via Service"),
|
||||
"any_service":_("Any Service"),
|
||||
"specified_services":_("Specified Services and Groups"),
|
||||
"sourcehost":_("From"),
|
||||
},
|
||||
"hbacsvc": {
|
||||
},
|
||||
"hbacsvcgroup": {
|
||||
"services":_("Services"),
|
||||
},
|
||||
"host": {
|
||||
"certificate":_("Host Certificate"),
|
||||
"cn":_("Host Name"),
|
||||
"delete_key_unprovision":_("Delete Key, Unprovision"),
|
||||
"details":_("Host Settings"),
|
||||
"enrolled":_("Enrolled?"),
|
||||
"enrollment":_("Enrollment"),
|
||||
"fqdn":_("Fully Qualified Host Name"),
|
||||
"keytab":_("Kerberos Key"),
|
||||
"keytab_missing":_("Kerberos Key Not Present"),
|
||||
"keytab_present":_("Kerberos Key Present, Host Provisioned"),
|
||||
"password":_("One-Time-Password"),
|
||||
"password_missing":_("One-Time-Password Not Present"),
|
||||
"password_present":_("One-Time-Password Present"),
|
||||
"password_reset_button":_("Reset OTP"),
|
||||
"password_reset_title":_("Reset One-Time-Password"),
|
||||
"password_set_button":_("Set OTP"),
|
||||
"password_set_title":_("Set One-Time-Password"),
|
||||
"status":_("Status"),
|
||||
"unprovision":_("Unprovision"),
|
||||
"unprovision_confirmation":_("Are you sure you want to unprovision this host?"),
|
||||
"unprovision_title":_("Unprovisioning ${entity}"),
|
||||
},
|
||||
"hostgroup": {
|
||||
"identity":_("Host Group Settings"),
|
||||
},
|
||||
"krbtpolicy": {
|
||||
"identity":_("Kerberos ticket policy"),
|
||||
},
|
||||
"netgroup": {
|
||||
"identity":_("Netgroup Settings"),
|
||||
},
|
||||
"permission": {
|
||||
"identity":_("Identity"),
|
||||
"rights":_("Rights"),
|
||||
"target":_("Target"),
|
||||
"filter":_("Filter"),
|
||||
"subtree":_("By Subtree"),
|
||||
"targetgroup":_("Target Group"),
|
||||
"type":_("Object By Type"),
|
||||
"invalid_target":_("Permission with invalid target specification"),
|
||||
},
|
||||
"privilege": {
|
||||
"identity":_("Privilege Settings"),
|
||||
},
|
||||
"pwpolicy": {
|
||||
"identity":_("Password Policy"),
|
||||
},
|
||||
"role": {
|
||||
"identity":_("Role Settings"),
|
||||
},
|
||||
"selfservice": {
|
||||
},
|
||||
"service": {
|
||||
"certificate":_("Service Certificate"),
|
||||
"details":_("Service Settings"),
|
||||
"host":_("Host Name"),
|
||||
"provisioning":_("Provisioning"),
|
||||
"service":_("Service"),
|
||||
"status":_("Status"),
|
||||
"valid":_("Kerberos Key Present, Service Provisioned"),
|
||||
"delete_key_unprovision":_("Delete Key, Unprovision"),
|
||||
"missing":_("Kerberos Key Not Present"),
|
||||
"unprovision_title":_("Unprovisioning ${entity}"),
|
||||
"unprovision_confirmation":_("Are you sure you want to unprovision this service?"),
|
||||
"unprovision":_("Unprovision"),
|
||||
},
|
||||
"sudocmd": {
|
||||
"groups":_("Groups"),
|
||||
},
|
||||
"sudocmdgroup": {
|
||||
"commands":_("Commands"),
|
||||
},
|
||||
"sudorule": {
|
||||
"active":_("Active"),
|
||||
"inactive":_("Inactive"),
|
||||
"allow":_("Allow"),
|
||||
"deny":_("Deny"),
|
||||
"user":_("Who"),
|
||||
"anyone":_("Anyone"),
|
||||
"specified_users":_("Specified Users and Groups"),
|
||||
"host":_("Access this host"),
|
||||
"any_host":_("Any Host"),
|
||||
"specified_hosts":_("Specified Hosts and Groups"),
|
||||
"command":_("Run Commands"),
|
||||
"any_command":_("Any Command"),
|
||||
"specified_commands":_("Specified Commands and Groups"),
|
||||
"options":_("Options"),
|
||||
"runas":_("As Whom"),
|
||||
"any_group":_("Any Group"),
|
||||
"specified_groups":_("Specified Groups"),
|
||||
"ipaenabledflag":_("Rule status"),
|
||||
"external":_("External"),
|
||||
},
|
||||
"user": {
|
||||
"account":_("Account Settings"),
|
||||
"account_status":_("Account Status"),
|
||||
"activate":_("Activate"),
|
||||
"activation_link":_("Click to ${action}"),
|
||||
"activation_confirmation":_("Are you sure you want to ${action} the user?<br/>The change will take effect immediately."),
|
||||
"active":_("Active"),
|
||||
"contact":_("Contact Settings"),
|
||||
"deactivate":_("Deactivate"),
|
||||
"employee":_("Employee Information"),
|
||||
"error_changing_status":_("Error changing account status"),
|
||||
"inactive":_("Inactive"),
|
||||
"mailing":_("Mailing Address"),
|
||||
"misc":_("Misc. Information"),
|
||||
},
|
||||
messages = {
|
||||
"ajax": {
|
||||
"401": {
|
||||
"message": _("Your Kerberos ticket is no longer valid. Please run kinit and then click 'Retry'. If this is your first time running the IPA Web UI <a href='/ipa/config/unauthorized.html'>follow these directions</a> to configure your browser."),
|
||||
"title": _("Kerberos ticket no longer valid."),
|
||||
},
|
||||
},
|
||||
"association": {
|
||||
"add": {
|
||||
"ipasudorunas": _("Add RunAs ${other_entity} into ${entity} ${primary_key}"),
|
||||
"ipasudorunasgroup": _("Add RunAs Groups into ${entity} ${primary_key}"),
|
||||
"managedby": _("Add ${other_entity} Managing ${entity} ${primary_key}"),
|
||||
"member": _("Add ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberallowcmd": _("Add Allow ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberdenycmd": _("Add Deny ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberof": _("Add ${entity} ${primary_key} into ${other_entity}"),
|
||||
"sourcehost": _("Add Source ${other_entity} into ${entity} ${primary_key}"),
|
||||
},
|
||||
"direct_enrollment": _("Direct Enrollment"),
|
||||
"indirect_enrollment": _("Indirect Enrollment"),
|
||||
"no_entries": _("No entries."),
|
||||
"paging": _("Showing ${start} to ${end} of ${total} entries."),
|
||||
"remove": {
|
||||
"ipasudorunas": _("Remove RunAs ${other_entity} from ${entity} ${primary_key}"),
|
||||
"ipasudorunasgroup": _("Remove RunAs Groups from ${entity} ${primary_key}"),
|
||||
"managedby": _("Remove ${other_entity} Managing ${entity} ${primary_key}"),
|
||||
"member": _("Remove ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberallowcmd": _("Remove Allow ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberdenycmd": _("Remove Deny ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberof": _("Remove ${entity} ${primary_key} from ${other_entity}"),
|
||||
"sourcehost": _("Remove Source ${other_entity} from ${entity} ${primary_key}"),
|
||||
},
|
||||
"show_results": _("Show Results"),
|
||||
},
|
||||
"buttons": {
|
||||
"add":_("Add"),
|
||||
"add_and_add_another":_("Add and Add Another"),
|
||||
"add_and_edit":_("Add and Edit"),
|
||||
"add_and_close":_("Add and Close"),
|
||||
"add_many":_("Add Many"),
|
||||
"add": _("Add"),
|
||||
"add_and_add_another": _("Add and Add Another"),
|
||||
"add_and_close": _("Add and Close"),
|
||||
"add_and_edit": _("Add and Edit"),
|
||||
"add_many": _("Add Many"),
|
||||
"cancel": _("Cancel"),
|
||||
"close": _("Close"),
|
||||
"enroll":_("Enroll"),
|
||||
"enroll": _("Enroll"),
|
||||
"find": _("Find"),
|
||||
"get": _("Get"),
|
||||
"issue": _("Issue"),
|
||||
"ok": _("OK"),
|
||||
"reset":_("Reset"),
|
||||
"remove":_("Delete"),
|
||||
"restore":_("Restore"),
|
||||
"retry":_("Retry"),
|
||||
"revoke":_("Revoke"),
|
||||
"update":_("Update"),
|
||||
"view":_("View"),
|
||||
},
|
||||
"dialogs": {
|
||||
"add_title":_("Add ${entity}"),
|
||||
"available":_("Available"),
|
||||
"batch_error_message":_("Some operations failed."),
|
||||
"batch_error_title":_("Operations Error"),
|
||||
"confirmation":_("Confirmation"),
|
||||
"dirty_message":_("This page has unsaved changes. Please save or revert."),
|
||||
"dirty_title":_("Unsaved Changes"),
|
||||
"hide_details":_("Hide details"),
|
||||
"redirection":_("Redirection"),
|
||||
"remove_empty":_("Select entries to be removed."),
|
||||
"remove_title":_("Remove ${entity}"),
|
||||
"prospective":_("Prospective"),
|
||||
"show_details":_("Show details"),
|
||||
"validation_title":_("Validation error"),
|
||||
"validation_message":_("Input form contains invalid or missing values."),
|
||||
},
|
||||
"facet_groups": {
|
||||
"managedby":_("${primary_key} is managed by:"),
|
||||
"member":_("Entities enrolled in ${primary_key}:"),
|
||||
"memberof":_("${primary_key} is a member of these:"),
|
||||
},
|
||||
"facets": {
|
||||
"search":_("Search"),
|
||||
"details": _("Settings"),
|
||||
},
|
||||
"password": {
|
||||
"new_password":_("New Password"),
|
||||
"password_change_complete":_("Password change complete"),
|
||||
"password_must_match":_("Passwords must match"),
|
||||
"reset_password":_("Reset Password"),
|
||||
"verify_password":_("Verify Password"),
|
||||
},
|
||||
"search": {
|
||||
"partial_delete":_("Some entries were not deleted"),
|
||||
"quick_links":_("Quick Links"),
|
||||
"select_all":_("Select All"),
|
||||
"unselect_all":_("Unselect All"),
|
||||
"delete_confirm":_("Are you sure you want to delete selected entries?"),
|
||||
"truncated":_(
|
||||
"Query returned more results than the configured size limit. Displaying the first ${counter} results."),
|
||||
},
|
||||
"remove": _("Delete"),
|
||||
"reset": _("Reset"),
|
||||
"restore": _("Restore"),
|
||||
"retry": _("Retry"),
|
||||
"revoke": _("Revoke"),
|
||||
"update": _("Update"),
|
||||
"view": _("View"),
|
||||
},
|
||||
"details": {
|
||||
"collapse_all":_("Collapse All"),
|
||||
"expand_all":_("Expand All"),
|
||||
"general":_("General"),
|
||||
"identity":_("Identity Settings"),
|
||||
"settings":_("${entity} ${primary_key} Settings"),
|
||||
"to_top":_("Back to Top")
|
||||
"collapse_all": _("Collapse All"),
|
||||
"expand_all": _("Expand All"),
|
||||
"general": _("General"),
|
||||
"identity": _("Identity Settings"),
|
||||
"settings": _("${entity} ${primary_key} Settings"),
|
||||
"to_top": _("Back to Top")
|
||||
},
|
||||
"dialogs": {
|
||||
"add_title": _("Add ${entity}"),
|
||||
"available": _("Available"),
|
||||
"batch_error_message": _("Some operations failed."),
|
||||
"batch_error_title": _("Operations Error"),
|
||||
"confirmation": _("Confirmation"),
|
||||
"dirty_message": _("This page has unsaved changes. Please save or revert."),
|
||||
"dirty_title": _("Unsaved Changes"),
|
||||
"hide_details": _("Hide details"),
|
||||
"prospective": _("Prospective"),
|
||||
"redirection": _("Redirection"),
|
||||
"remove_empty": _("Select entries to be removed."),
|
||||
"remove_title": _("Remove ${entity}"),
|
||||
"show_details": _("Show details"),
|
||||
"validation_title": _("Validation error"),
|
||||
"validation_message": _("Input form contains invalid or missing values."),
|
||||
},
|
||||
"errors": {
|
||||
"http_error": _("HTTP Error"),
|
||||
"internal_error": _("Internal Error"),
|
||||
"ipa_error": _("IPA Error"),
|
||||
"no_response": _("No response"),
|
||||
"unknown_error": _("Unknown Error"),
|
||||
"url": _("URL"),
|
||||
},
|
||||
"facet_groups": {
|
||||
"managedby": _("${primary_key} is managed by:"),
|
||||
"member": _("Entities enrolled in ${primary_key}:"),
|
||||
"memberof": _("${primary_key} is a member of these:"),
|
||||
},
|
||||
"facets": {
|
||||
"details": _("Settings"),
|
||||
"search": _("Search"),
|
||||
},
|
||||
"false": _("False"),
|
||||
"login": {
|
||||
"header": _("Logged In As")
|
||||
},
|
||||
"objects": {
|
||||
"aci": {
|
||||
"attribute": _("Attribute"),
|
||||
},
|
||||
"tabs": {
|
||||
"dns":_("DNS"),
|
||||
"identity":_("Identity"),
|
||||
"policy":_("Policy"),
|
||||
"audit": _("Audit"),
|
||||
"ipaserver":_("IPA Server"),
|
||||
"sudo":_("Sudo"),
|
||||
"hbac":_("Host Based Access Control"),
|
||||
"role":_("Role Based Access Control"),
|
||||
"automount":_("Automount")
|
||||
"automountkey": {
|
||||
},
|
||||
"association": {
|
||||
"add": {
|
||||
"ipasudorunas":_("Add RunAs ${other_entity} into ${entity} ${primary_key}"),
|
||||
"ipasudorunasgroup":_("Add RunAs Groups into ${entity} ${primary_key}"),
|
||||
"managedby":_("Add ${other_entity} Managing ${entity} ${primary_key}"),
|
||||
"member":_("Add ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberallowcmd":_("Add Allow ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberdenycmd":_("Add Deny ${other_entity} into ${entity} ${primary_key}"),
|
||||
"memberof":_("Add ${entity} ${primary_key} into ${other_entity}"),
|
||||
"sourcehost":_("Add Source ${other_entity} into ${entity} ${primary_key}"),
|
||||
"automountlocation": {
|
||||
"identity": _("Automount Location Settings")
|
||||
},
|
||||
"direct_enrollment":_("Direct Enrollment"),
|
||||
"indirect_enrollment":_("Indirect Enrollment"),
|
||||
"no_entries":_("No entries."),
|
||||
"paging":_("Showing ${start} to ${end} of ${total} entries."),
|
||||
"remove": {
|
||||
"ipasudorunas":_("Remove RunAs ${other_entity} from ${entity} ${primary_key}"),
|
||||
"ipasudorunasgroup":_("Remove RunAs Groups from ${entity} ${primary_key}"),
|
||||
"managedby":_("Remove ${other_entity} Managing ${entity} ${primary_key}"),
|
||||
"member":_("Remove ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberallowcmd":_("Remove Allow ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberdenycmd":_("Remove Deny ${other_entity} from ${entity} ${primary_key}"),
|
||||
"memberof":_("Remove ${entity} ${primary_key} from ${other_entity}"),
|
||||
"sourcehost":_("Remove Source ${other_entity} from ${entity} ${primary_key}"),
|
||||
"automountmap": {
|
||||
"map_type": _("Map Type"),
|
||||
"direct": _("Direct"),
|
||||
"indirect": _("Indirect"),
|
||||
},
|
||||
"show_results":_("Show Results"),
|
||||
"cert": {
|
||||
"aa_compromise": _("AA Compromise"),
|
||||
"affiliation_changed": _("Affiliation Changed"),
|
||||
"ca_compromise": _("CA Compromise"),
|
||||
"certificate_hold": _("Certificate Hold"),
|
||||
"cessation_of_operation": _("Cessation of Operation"),
|
||||
"common_name": _("Common Name"),
|
||||
"enter_csr": _("Enter the Base64-encoded CSR below"),
|
||||
"expires_on": _("Expires On"),
|
||||
"fingerprints": _("Fingerprints"),
|
||||
"issue_certificate": _("Issue New Certificate for ${entity} ${primary_key}"),
|
||||
"issued_by": _("Issued By"),
|
||||
"issued_on": _("Issued On"),
|
||||
"issued_to": _("Issued To"),
|
||||
"key_compromise": _("Key Compromise"),
|
||||
"md5_fingerprint": _("MD5 Fingerprint"),
|
||||
"missing": _("No Valid Certificate"),
|
||||
"new_certificate": _("New Certificate"),
|
||||
"note": _("Note"),
|
||||
"organization": _("Organization"),
|
||||
"organizational_unit": _("Organizational Unit"),
|
||||
"privilege_withdrawn": _("Privilege Withdrawn"),
|
||||
"reason": _("Reason for Revocation"),
|
||||
"remove_from_crl": _("Remove from CRL"),
|
||||
"restore_certificate": _("Restore Certificate for ${entity} ${primary_key}"),
|
||||
"restore_confirmation": _("To confirm your intention to restore this certificate, click the \"Restore\" button."),
|
||||
"revoke_certificate": _("Revoke Certificate for ${entity} ${primary_key}"),
|
||||
"revoke_confirmation": _("To confirm your intention to revoke this certificate, select a reason from the pull-down list, and click the \"Revoke\" button."),
|
||||
"revoked": _("Certificate Revoked"),
|
||||
"serial_number": _("Serial Number"),
|
||||
"sha1_fingerprint": _("SHA1 Fingerprint"),
|
||||
"superseded": _("Superseded"),
|
||||
"unspecified": _("Unspecified"),
|
||||
"valid": _("Valid Certificate Present"),
|
||||
"validity": _("Validity"),
|
||||
"view_certificate": _("Certificate for ${entity} ${primary_key}"),
|
||||
},
|
||||
"widget": {
|
||||
"next":_("Next"),
|
||||
"optional":_("Optional field: click to show"),
|
||||
"page":_("Page"),
|
||||
"prev":_("Prev"),
|
||||
"validation": {
|
||||
"error":_("Text does not match field pattern"),
|
||||
"integer": _("Must be an integer"),
|
||||
"max_value": _("Maximum value is ${value}"),
|
||||
"min_value": _("Minimum value is ${value}"),
|
||||
"required": _("Required field"),
|
||||
"config": {
|
||||
"group": _("Group Options"),
|
||||
"search": _("Search Options"),
|
||||
"user": _("User Options"),
|
||||
},
|
||||
"delegation": {
|
||||
},
|
||||
"dnsrecord": {
|
||||
"data": _("Data"),
|
||||
"deleted_no_data": _("DNS record was deleted because it contained no data."),
|
||||
"other": _("Other Record Types"),
|
||||
"redirection_dnszone": _("You will be redirected to DNS Zone."),
|
||||
"standard": _("Standard Record Types"),
|
||||
"title": _("Records for DNS Zone"),
|
||||
"type": _("Record Type"),
|
||||
},
|
||||
"dnszone": {
|
||||
"identity": _("DNS Zone Settings"),
|
||||
},
|
||||
"entitle": {
|
||||
"account": _("Account"),
|
||||
"certificate": _("Certificate"),
|
||||
"certificates": _("Certificates"),
|
||||
"consume": _("Consume"),
|
||||
"consume_entitlement": _("Consume Entitlement"),
|
||||
"consumed": _("Consumed"),
|
||||
"download": _("Download"),
|
||||
"download_certificate": _("Download Certificate"),
|
||||
"end": _("End"),
|
||||
"import_button": _("Import"),
|
||||
"import_certificate": _("Import Certificate"),
|
||||
"import_message": _("Enter the Base64-encoded entitlement certificate below:"),
|
||||
"loading": _("Loading..."),
|
||||
"no_certificate": _("No Certificate."),
|
||||
"product": _("Product"),
|
||||
"register": _("Register"),
|
||||
"registration": _("Registration"),
|
||||
"start": _("Start"),
|
||||
"status": _("Status"),
|
||||
},
|
||||
"group": {
|
||||
"details": _("Group Settings"),
|
||||
"posix": _("Is this a POSIX group?"),
|
||||
},
|
||||
"hbacrule": {
|
||||
"active": _("Active"),
|
||||
"allow": _("Allow"),
|
||||
"any_host": _("Any Host"),
|
||||
"any_service": _("Any Service"),
|
||||
"anyone": _("Anyone"),
|
||||
"deny": _("Deny"),
|
||||
"host": _("Accessing"),
|
||||
"inactive": _("Inactive"),
|
||||
"ipaenabledflag": _("Rule status"),
|
||||
"service": _("Via Service"),
|
||||
"sourcehost": _("From"),
|
||||
"specified_hosts": _("Specified Hosts and Groups"),
|
||||
"specified_services": _("Specified Services and Groups"),
|
||||
"specified_users": _("Specified Users and Groups"),
|
||||
"user": _("Who"),
|
||||
},
|
||||
"hbacsvc": {
|
||||
},
|
||||
"hbacsvcgroup": {
|
||||
"services": _("Services"),
|
||||
},
|
||||
"host": {
|
||||
"certificate": _("Host Certificate"),
|
||||
"cn": _("Host Name"),
|
||||
"delete_key_unprovision": _("Delete Key, Unprovision"),
|
||||
"details": _("Host Settings"),
|
||||
"enrolled": _("Enrolled?"),
|
||||
"enrollment": _("Enrollment"),
|
||||
"fqdn": _("Fully Qualified Host Name"),
|
||||
"keytab": _("Kerberos Key"),
|
||||
"keytab_missing": _("Kerberos Key Not Present"),
|
||||
"keytab_present": _("Kerberos Key Present, Host Provisioned"),
|
||||
"password": _("One-Time-Password"),
|
||||
"password_missing": _("One-Time-Password Not Present"),
|
||||
"password_present": _("One-Time-Password Present"),
|
||||
"password_reset_button": _("Reset OTP"),
|
||||
"password_reset_title": _("Reset One-Time-Password"),
|
||||
"password_set_button": _("Set OTP"),
|
||||
"password_set_title": _("Set One-Time-Password"),
|
||||
"status": _("Status"),
|
||||
"unprovision": _("Unprovision"),
|
||||
"unprovision_confirmation": _("Are you sure you want to unprovision this host?"),
|
||||
"unprovision_title": _("Unprovisioning ${entity}"),
|
||||
},
|
||||
"hostgroup": {
|
||||
"identity": _("Host Group Settings"),
|
||||
},
|
||||
"krbtpolicy": {
|
||||
"identity": _("Kerberos ticket policy"),
|
||||
},
|
||||
"netgroup": {
|
||||
"identity": _("Netgroup Settings"),
|
||||
},
|
||||
"permission": {
|
||||
"filter": _("Filter"),
|
||||
"identity": _("Identity"),
|
||||
"invalid_target": _("Permission with invalid target specification"),
|
||||
"rights": _("Rights"),
|
||||
"subtree": _("By Subtree"),
|
||||
"target": _("Target"),
|
||||
"targetgroup": _("Target Group"),
|
||||
"type": _("Object By Type"),
|
||||
},
|
||||
"ajax": {
|
||||
"401":_("Your Kerberos ticket is no longer valid. Please run kinit and then click 'Retry'. If this is your first time running the IPA Web UI <a href='/ipa/config/unauthorized.html'>follow these directions</a> to configure your browser.")
|
||||
"privilege": {
|
||||
"identity": _("Privilege Settings"),
|
||||
},
|
||||
}
|
||||
"pwpolicy": {
|
||||
"identity": _("Password Policy"),
|
||||
},
|
||||
"role": {
|
||||
"identity": _("Role Settings"),
|
||||
},
|
||||
"selfservice": {
|
||||
},
|
||||
"service": {
|
||||
"certificate": _("Service Certificate"),
|
||||
"delete_key_unprovision": _("Delete Key, Unprovision"),
|
||||
"details": _("Service Settings"),
|
||||
"host": _("Host Name"),
|
||||
"missing": _("Kerberos Key Not Present"),
|
||||
"provisioning": _("Provisioning"),
|
||||
"service": _("Service"),
|
||||
"status": _("Status"),
|
||||
"unprovision": _("Unprovision"),
|
||||
"unprovision_confirmation": _("Are you sure you want to unprovision this service?"),
|
||||
"unprovision_title": _("Unprovisioning ${entity}"),
|
||||
"valid": _("Kerberos Key Present, Service Provisioned"),
|
||||
},
|
||||
"sudocmd": {
|
||||
"groups": _("Groups"),
|
||||
},
|
||||
"sudocmdgroup": {
|
||||
"commands": _("Commands"),
|
||||
},
|
||||
"sudorule": {
|
||||
"active": _("Active"),
|
||||
"allow": _("Allow"),
|
||||
"any_command": _("Any Command"),
|
||||
"any_group": _("Any Group"),
|
||||
"any_host": _("Any Host"),
|
||||
"anyone": _("Anyone"),
|
||||
"command": _("Run Commands"),
|
||||
"deny": _("Deny"),
|
||||
"external": _("External"),
|
||||
"host": _("Access this host"),
|
||||
"inactive": _("Inactive"),
|
||||
"ipaenabledflag": _("Rule status"),
|
||||
"options": _("Options"),
|
||||
"runas": _("As Whom"),
|
||||
"specified_commands": _("Specified Commands and Groups"),
|
||||
"specified_groups": _("Specified Groups"),
|
||||
"specified_hosts": _("Specified Hosts and Groups"),
|
||||
"specified_users": _("Specified Users and Groups"),
|
||||
"user": _("Who"),
|
||||
},
|
||||
"user": {
|
||||
"account": _("Account Settings"),
|
||||
"account_status": _("Account Status"),
|
||||
"activate": _("Activate"),
|
||||
"activation_confirmation": _("Are you sure you want to ${action} the user?<br/>The change will take effect immediately."),
|
||||
"activation_link": _("Click to ${action}"),
|
||||
"active": _("Active"),
|
||||
"contact": _("Contact Settings"),
|
||||
"deactivate": _("Deactivate"),
|
||||
"employee": _("Employee Information"),
|
||||
"error_changing_status": _("Error changing account status"),
|
||||
"inactive": _("Inactive"),
|
||||
"mailing": _("Mailing Address"),
|
||||
"misc": _("Misc. Information"),
|
||||
},
|
||||
},
|
||||
"password": {
|
||||
"new_password": _("New Password"),
|
||||
"password_change_complete": _("Password change complete"),
|
||||
"password_must_match": _("Passwords must match"),
|
||||
"reset_password": _("Reset Password"),
|
||||
"verify_password": _("Verify Password"),
|
||||
},
|
||||
"search": {
|
||||
"delete_confirm": _("Are you sure you want to delete selected entries?"),
|
||||
"partial_delete": _("Some entries were not deleted"),
|
||||
"quick_links": _("Quick Links"),
|
||||
"select_all": _("Select All"),
|
||||
"truncated": _("Query returned more results than the configured size limit. Displaying the first ${counter} results."),
|
||||
"unselect_all": _("Unselect All"),
|
||||
},
|
||||
"tabs": {
|
||||
"audit": _("Audit"),
|
||||
"automount": _("Automount"),
|
||||
"dns": _("DNS"),
|
||||
"hbac": _("Host Based Access Control"),
|
||||
"identity": _("Identity"),
|
||||
"ipaserver": _("IPA Server"),
|
||||
"policy": _("Policy"),
|
||||
"role": _("Role Based Access Control"),
|
||||
"sudo": _("Sudo"),
|
||||
},
|
||||
"true": _("True"),
|
||||
"widget": {
|
||||
"next": _("Next"),
|
||||
"optional": _("Optional field: click to show"),
|
||||
"page": _("Page"),
|
||||
"prev": _("Prev"),
|
||||
"validation": {
|
||||
"error": _("Text does not match field pattern"),
|
||||
"integer": _("Must be an integer"),
|
||||
"max_value": _("Maximum value is ${value}"),
|
||||
"min_value": _("Minimum value is ${value}"),
|
||||
"required": _("Required field"),
|
||||
},
|
||||
},
|
||||
}
|
||||
has_output = (
|
||||
Output('messages', dict, doc=_('Dict of I18N messages')),
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user