URL: https://github.com/freeipa/freeipa/pull/2421
Author: abbra
 Title: #2421: Update list of contributors 
Action: opened

PR body:
"""
Another part of the preparation for the 4.7 release: update list of 
contributors.

I tried to sort the list of translators, thus there is a bit more churn in that 
part.
"""

To pull the PR as Git branch:
git remote add ghfreeipa https://github.com/freeipa/freeipa
git fetch ghfreeipa pull/2421/head:pr2421
git checkout pr2421
From a502fa939f7e0bc9212ac102202a0ba23a7ff75c Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Sat, 22 Sep 2018 21:49:40 +0300
Subject: [PATCH 01/22] Drop concatenated title of 'Add' dialog for details of
 entity

As for now the 'Add' dialog title, which is initialized within
details of the entity, contains translated concatenated texts,
like:
    'Add ${other_entity} into ${entity} ${primary_key}',
where 'other_entity' and 'entity' are also translatable texts.
This construction is used via method 'show_add_dialog' of
association_facet for the all 'Add' actions within details
of entities.
The concatenation leads to a bad quality translation and
should be changed to an entire sentence.

From now a mentioned title is taken from a spec and should be
specified explicitly.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/add.js         |  1 +
 install/ui/src/freeipa/association.js | 11 ++++-------
 install/ui/src/freeipa/dialog.js      |  1 +
 ipaserver/plugins/internal.py         | 10 +---------
 4 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/install/ui/src/freeipa/add.js b/install/ui/src/freeipa/add.js
index b93bd34631..4b80ed6798 100644
--- a/install/ui/src/freeipa/add.js
+++ b/install/ui/src/freeipa/add.js
@@ -32,6 +32,7 @@ IPA.entity_adder_dialog = function(spec) {
 
     spec = spec || {};
 
+    spec.title = spec.title || '@i18n:buttons.add';
     spec.name = spec.name || 'entity_adder_dialog';
 
     var that = IPA.dialog(spec);
diff --git a/install/ui/src/freeipa/association.js b/install/ui/src/freeipa/association.js
index 0a3db5df52..6d8edc2c06 100644
--- a/install/ui/src/freeipa/association.js
+++ b/install/ui/src/freeipa/association.js
@@ -453,7 +453,7 @@ IPA.association_table_widget = function (spec) {
     that.remove_method = spec.remove_method || 'remove_member';
 
     that.read_only = spec.read_only === undefined ? false : spec.read_only;
-    that.add_title = text.get(spec.add_title || '@i18n:association.add.member');
+    that.add_title = text.get(spec.add_title);
     that.remove_title = text.get(spec.remove_title);
 
     that.adder_columns = $.ordered_map();
@@ -926,7 +926,8 @@ exp.association_facet_pre_op = function(spec, context) {
         }
     }
 
-    spec.add_title = '@i18n:association.add.'+spec.attribute_member;
+    spec.add_title = spec.add_title ||
+                         '@i18n:association.add_title_default';
     spec.remove_title = spec.remove_title ||
                             '@i18n:association.remove_title_default';
 
@@ -1045,7 +1046,7 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
     that.add_method = spec.add_method || 'add_member';
     that.remove_method = spec.remove_method || 'remove_member';
 
-    that.add_title = text.get(spec.add_title || '@i18n:association.add.member');
+    that.add_title = text.get(spec.add_title);
     that.remove_title = text.get(spec.remove_title);
 
     that.adder_columns = $.ordered_map();
@@ -1203,14 +1204,10 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
 
     that.show_add_dialog = function() {
 
-        var entity_label = that.entity.metadata.label_singular;
         var pkey = that.get_pkey();
-        var other_entity_label = that.other_entity.metadata.label;
 
         var title = that.add_title;
-        title = title.replace('${entity}', entity_label);
         title = title.replace('${primary_key}', pkey);
-        title = title.replace('${other_entity}', other_entity_label);
 
         var pkeys = that.data.result.result[that.get_attribute_name()];
 
diff --git a/install/ui/src/freeipa/dialog.js b/install/ui/src/freeipa/dialog.js
index 5150527df1..c153120df0 100644
--- a/install/ui/src/freeipa/dialog.js
+++ b/install/ui/src/freeipa/dialog.js
@@ -801,6 +801,7 @@ IPA.adder_dialog = function(spec) {
 
     spec = spec || {};
 
+    spec.title = spec.title || '@i18n:buttons.add';
     spec.name = spec.name || 'adder_dialog';
 
     var that = IPA.dialog(spec);
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index c1ca95da57..e94aade9f1 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -169,15 +169,7 @@ class i18n_messages(Command):
             "title": _("Actions"),
         },
         "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}"),
-            },
+            "add_title_default": _("Add"),
             "added": _("${count} item(s) added"),
             "direct_membership": _("Direct Membership"),
             "filter_placeholder": _("Filter available ${other_entity}"),

From dda488efc26aa10718b751852deb87b4478d0ca9 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:26:16 +0300
Subject: [PATCH 02/22] Add title to 'add' dialog for details of 'Certificate'
 entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/certificate.js | 24 ++++++------------------
 ipaserver/plugins/internal.py         | 14 +++++++-------
 2 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/install/ui/src/freeipa/certificate.js b/install/ui/src/freeipa/certificate.js
index 0cb43c718f..542a156208 100644
--- a/install/ui/src/freeipa/certificate.js
+++ b/install/ui/src/freeipa/certificate.js
@@ -696,7 +696,6 @@ IPA.cert.request_action = function(spec) {
     spec.hide_cond = spec.hide_cond || ['ra_disabled'];
 
     var that = IPA.action(spec);
-    that.entity_label = spec.entity_label;
     that.generic = spec.generic !== undefined ? spec.generic : false;
 
     that.execute_action = function(facet) {
@@ -709,15 +708,12 @@ IPA.cert.request_action = function(spec) {
             var certificate = facet.certificate;
             if (!certificate) facet.refresh();
 
-            var entity_label = that.entity_label || facet.entity.metadata.label_singular;
-
             entity_principal = certificate.entity_info.principal;
             var entity_name = certificate.entity_info.name;
             cn = certificate.entity_info.cn || cn;
             cn_name = certificate.entity_info.cn_name || cn_name;
 
-            title = text.get('@i18n:objects.cert.issue_certificate');
-            title = title.replace('${entity}', entity_label);
+            title = text.get(spec.title) || title;
             title = title.replace('${primary_key}', entity_name);
         }
 
@@ -823,20 +819,16 @@ IPA.cert.revoke_action = function(spec) {
     spec.needs_confirm = spec.needs_confirm !== undefined ? spec.needs_confirm : true;
 
     var that = IPA.action(spec);
-    that.entity_label = spec.entity_label;
     that.confirm_msg = spec.request_message;
 
     that.update_confirm_dialog = function(facet) {
 
         var certificate = facet.certificate;
-
-        var entity_label = that.entity_label || facet.entity.metadata.label_singular;
         var entity_name = certificate.entity_info.name;
 
         var title = text.get('@i18n:objects.cert.revoke_certificate_simple');
-        if (entity_name && entity_label) {
-            title = text.get('@i18n:objects.cert.revoke_certificate');
-            title = title.replace('${entity}', entity_label);
+        if (entity_name) {
+            title = text.get(spec.title) || title;
             title = title.replace('${primary_key}', entity_name);
         }
 
@@ -879,20 +871,16 @@ IPA.cert.remove_hold_action = function(spec) {
     spec.needs_confirm = spec.needs_confirm !== undefined ? spec.needs_confirm : true;
 
     var that = IPA.action(spec);
-    that.entity_label = spec.entity_label;
 
     that.update_confirm_dialog = function(facet) {
 
         var certificate = facet.certificate;
 
-        var entity_label = that.entity_label || facet.entity.metadata.label_singular;
         var entity_name = certificate.entity_info.name;
-
         var title = text.get('@i18n:objects.cert.remove_certificate_hold_simple');
 
-        if (entity_name && entity_label) {
-            title = text.get('@i18n:objects.cert.remove_certificate_hold');
-            title = title.replace('${entity}', entity_label);
+        if (entity_name) {
+            title = text.get(spec.title) || title;
             title = title.replace('${primary_key}', entity_name);
         }
 
@@ -1203,7 +1191,7 @@ IPA.cert.certs_widget = function(spec) {
         var sn = row.widget.certificate.serial_number;
         var message = text.get('@i18n:actions.delete_confirm');
         message = message.replace('${object}',
-            text.get('@i18n:objects.cert.delete_cert_end') + sn);
+            text.get('@i18n:objects.cert.delete_cert_end') + ' ' + sn);
 
         return message;
     };
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index e94aade9f1..71f6437e5d 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -580,8 +580,10 @@ class i18n_messages(Command):
                 "fingerprints": _("Fingerprints"),
                 "get_certificate": _("Get Certificate"),
                 "hold_removed": _("Certificate Hold Removed"),
-                "issue_certificate": _("Issue New Certificate for ${entity} ${primary_key}"),
-                "issue_certificate_generic": _("Issue New Certificate"),
+                "issue_for_user": _(
+                    "Issue new certificate for user '${primary_key}'"
+                ),
+                "issue_certificate_generic": _("Issue new certificate"),
                 "issued_by": _("Issued By"),
                 "issued_on": _("Issued On"),
                 "issued_to": _("Issued To"),
@@ -595,17 +597,15 @@ class i18n_messages(Command):
                 "present": _("${count} certificate(s) present"),
                 "privilege_withdrawn": _("Privilege Withdrawn"),
                 "reason": _("Reason for Revocation"),
-                "remove_hold": _("Remove Hold"),
-                "remove_certificate_hold": _("Remove Certificate Hold for ${entity} ${primary_key}"),
-                "remove_certificate_hold_simple": _("Remove Certificate Hold"),
+                "remove_hold": _("Remove hold"),
+                "remove_certificate_hold_simple": _("Remove certificate hold"),
                 "remove_certificate_hold_confirmation": _("Do you want to remove the certificate hold?"),
                 "remove_from_crl": _("Remove from CRL"),
                 "request_message": _("<ol> <li>Create a certificate database or use an existing one. To create a new database:<br/> <code># certutil -N -d &lt;database path&gt;</code> </li> <li>Create a CSR with subject <em>CN=&lt;${cn_name}&gt;,O=&lt;realm&gt;</em>, for example:<br/> <code># certutil -R -d &lt;database path&gt; -a -g &lt;key size&gt; -s 'CN=${cn},O=${realm}'${san}</code> </li> <li> Copy and paste the CSR (from <em>-----BEGIN NEW CERTIFICATE REQUEST-----</em> to <em>-----END NEW CERTIFICATE REQUEST-----</em>) into the text area below: </li> </ol>"),
                 "request_message_san": _(" -8 '${cn}'"),
                 "requested": _("Certificate requested"),
                 "revocation_reason": _("Revocation reason"),
-                "revoke_certificate": _("Revoke Certificate for ${entity} ${primary_key}"),
-                "revoke_certificate_simple": _("Revoke Certificate"),
+                "revoke_certificate_simple": _("Revoke certificate"),
                 "revoke_confirmation": _("Do you want to revoke this certificate? Select a reason from the pull-down list."),
                 "revoked": _("Certificate Revoked"),
                 "revoked_status": _("REVOKED"),

From d588d3e9e4494e0750c4dd05b3195954ca5bf149 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 03/22] Add title to 'add' dialog for details of 'Users' entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/user.js |  8 +++++++-
 ipaserver/plugins/internal.py  | 15 +++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/install/ui/src/freeipa/user.js b/install/ui/src/freeipa/user.js
index f1e307c629..ecd0642114 100644
--- a/install/ui/src/freeipa/user.js
+++ b/install/ui/src/freeipa/user.js
@@ -417,7 +417,8 @@ return {
                 },
                 {
                     $type: 'cert_request',
-                    hide_cond: ['preserved-user']
+                    hide_cond: ['preserved-user'],
+                    title: '@i18n:objects.cert.issue_for_user'
                 }
             ],
             header_actions: [
@@ -464,6 +465,7 @@ return {
             $pre_ops: [ IPA.user.association_facet_ss_pre_op ],
             name: 'memberof_group',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.user.add_into_groups',
             remove_title: '@i18n:objects.user.remove_from_groups'
         },
         {
@@ -471,6 +473,7 @@ return {
             $pre_ops: [ IPA.user.association_facet_ss_pre_op ],
             name: 'memberof_netgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.user.add_into_netgroups',
             remove_title: '@i18n:objects.user.remove_from_netgroups'
         },
         {
@@ -478,6 +481,7 @@ return {
             $pre_ops: [ IPA.user.association_facet_ss_pre_op ],
             name: 'memberof_role',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.user.add_into_roles',
             remove_title: '@i18n:objects.user.remove_from_roles'
         },
         {
@@ -486,6 +490,7 @@ return {
             name: 'memberof_hbacrule',
             associator: IPA.serial_associator,
             add_method: 'add_user',
+            add_title: '@i18n:objects.user.add_into_hbac',
             remove_method: 'remove_user',
             remove_title: '@i18n:objects.user.remove_from_hbac'
         },
@@ -495,6 +500,7 @@ return {
             name: 'memberof_sudorule',
             associator: IPA.serial_associator,
             add_method: 'add_user',
+            add_title: '@i18n:objects.user.add_into_sudo',
             remove_method: 'remove_user',
             remove_title: '@i18n:objects.user.remove_from_sudo'
         }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 71f6437e5d..83258ba6f2 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1235,6 +1235,21 @@ class i18n_messages(Command):
                 "account_status": _("Account Status"),
                 "activeuser_label": _("Active users"),
                 "add": _("Add user"),
+                "add_into_groups": _(
+                    "Add user '${primary_key}' into user groups"
+                ),
+                "add_into_hbac": _(
+                    "Add user '${primary_key}' into HBAC rules"
+                ),
+                "add_into_netgroups": _(
+                    "Add user '${primary_key}' into netgroups"
+                ),
+                "add_into_roles": _(
+                    "Add user '${primary_key}' into roles"
+                ),
+                "add_into_sudo": _(
+                    "Add user '${primary_key}' into sudo rules"
+                ),
                 "contact": _("Contact Settings"),
                 "delete_mode": _("Delete mode"),
                 "employee": _("Employee Information"),

From dc9e5c57d575e215afba42078c662ccfe9dd0f0b Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 04/22] Add title to 'add' dialog for details of 'Hosts' entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/host.js | 11 ++++++++++-
 ipaserver/plugins/internal.py  | 21 +++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/install/ui/src/freeipa/host.js b/install/ui/src/freeipa/host.js
index 91de7d64c8..eda42e0f1b 100644
--- a/install/ui/src/freeipa/host.js
+++ b/install/ui/src/freeipa/host.js
@@ -374,7 +374,10 @@ return {
                     enable_cond: ['userpassword_w'],
                     show_cond: ['has_password']
                 },
-                'cert_request'
+                {
+                    $type: 'cert_request',
+                    title: '@i18n:objects.cert.issue_for_host'
+                }
             ],
             header_actions: ['automember_rebuild', 'unprovision', 'set_otp', 'reset_otp',
                 'request_cert'],
@@ -404,6 +407,7 @@ return {
             $type: 'association',
             name: 'managedby_host',
             add_method: 'add_managedby',
+            add_title: '@i18n:objects.host.add_hosts_managing',
             remove_method: 'remove_managedby',
             remove_title: '@i18n:objects.host.remove_hosts_managing'
         },
@@ -411,18 +415,21 @@ return {
             $type: 'association',
             name: 'memberof_hostgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.host.add_into_groups',
             remove_title: '@i18n:objects.host.remove_from_groups'
         },
         {
             $type: 'association',
             name: 'memberof_netgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.host.add_into_netgroups',
             remove_title: '@i18n:objects.host.remove_from_netgroups'
         },
         {
             $type: 'association',
             name: 'memberof_role',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.host.add_into_roles',
             remove_title: '@i18n:objects.host.remove_from_roles'
         },
         {
@@ -430,6 +437,7 @@ return {
             name: 'memberof_hbacrule',
             associator: IPA.serial_associator,
             add_method: 'add_host',
+            add_title: '@i18n:objects.host.add_into_hbac',
             remove_method: 'remove_host',
             remove_title: '@i18n:objects.host.remove_from_hbac'
         },
@@ -438,6 +446,7 @@ return {
             name: 'memberof_sudorule',
             associator: IPA.serial_associator,
             add_method: 'add_host',
+            add_title: '@i18n:objects.host.add_into_sudo',
             remove_method: 'remove_host',
             remove_title: '@i18n:objects.host.remove_from_sudo'
         }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 83258ba6f2..6bd8917967 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -580,6 +580,9 @@ class i18n_messages(Command):
                 "fingerprints": _("Fingerprints"),
                 "get_certificate": _("Get Certificate"),
                 "hold_removed": _("Certificate Hold Removed"),
+                "issue_for_host": _(
+                    "Issue new certificate for host '${primary_key}'"
+                ),
                 "issue_for_user": _(
                     "Issue new certificate for user '${primary_key}'"
                 ),
@@ -812,6 +815,24 @@ class i18n_messages(Command):
             },
             "host": {
                 "add": _("Add host"),
+                "add_hosts_managing": _(
+                    "Add hosts managing host '${primary_key}'"
+                ),
+                "add_into_groups": _(
+                    "Add host '${primary_key}' into host groups"
+                ),
+                "add_into_hbac": _(
+                    "Add host '${primary_key}' into HBAC rules"
+                ),
+                "add_into_netgroups": _(
+                    "Add host '${primary_key}' into netgroups"
+                ),
+                "add_into_roles": _(
+                    "Add host '${primary_key}' into roles"
+                ),
+                "add_into_sudo": _(
+                    "Add host '${primary_key}' into sudo rules"
+                ),
                 "certificate": _("Host Certificate"),
                 "cn": _("Host Name"),
                 "delete_key_unprovision": _("Delete Key, Unprovision"),

From ac52facac26f466e3997661a84f527454ad68f33 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 05/22] Add title to 'add' dialog for details of 'Services'
 entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/service.js | 7 ++++++-
 ipaserver/plugins/internal.py     | 9 +++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/install/ui/src/freeipa/service.js b/install/ui/src/freeipa/service.js
index da336fe8b5..8df325a5a4 100644
--- a/install/ui/src/freeipa/service.js
+++ b/install/ui/src/freeipa/service.js
@@ -345,7 +345,10 @@ return {
             ],
             actions: [
                 'service_unprovision',
-                'cert_request'
+                {
+                    $type: 'cert_request',
+                    title: '@i18n:objects.cert.issue_for_service'
+                }
             ],
             header_actions: [
                 'unprovision',
@@ -369,12 +372,14 @@ return {
         {
             $type: 'association',
             name: 'memberof_role',
+            add_title: '@i18n:objects.service.add_into_roles',
             remove_title: '@i18n:objects.service.remove_from_roles'
         },
         {
             $type: 'association',
             name: 'managedby_host',
             add_method: 'add_host',
+            add_title: '@i18n:objects.service.add_hosts_managing',
             remove_method: 'remove_host',
             remove_title: '@i18n:objects.service.remove_hosts_managing'
         }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 6bd8917967..dad816c0c5 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -583,6 +583,9 @@ class i18n_messages(Command):
                 "issue_for_host": _(
                     "Issue new certificate for host '${primary_key}'"
                 ),
+                "issue_for_service": _(
+                    "Issue new certificate for service '${primary_key}'"
+                ),
                 "issue_for_user": _(
                     "Issue new certificate for user '${primary_key}'"
                 ),
@@ -1082,6 +1085,12 @@ class i18n_messages(Command):
             },
             "service": {
                 "add": _("Add service"),
+                "add_hosts_managing": _(
+                    "Add hosts managing service '${primary_key}'"
+                ),
+                "add_into_roles": _(
+                    "Add service '${primary_key}' into roles"
+                ),
                 "certificate": _("Service Certificate"),
                 "delete_key_unprovision": _("Delete Key, Unprovision"),
                 "details": _("Service Settings"),

From 9e4de506cb4403da9c556f77487b72eb6d01fb30 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 06/22] Add title to 'add' dialog for details of 'Groups'
 entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/group.js     |  8 +++++
 install/ui/src/freeipa/hostgroup.js |  6 ++++
 install/ui/src/freeipa/netgroup.js  |  2 ++
 ipaserver/plugins/internal.py       | 48 +++++++++++++++++++++++++++++
 4 files changed, 64 insertions(+)

diff --git a/install/ui/src/freeipa/group.js b/install/ui/src/freeipa/group.js
index ca4bd0da52..3411543529 100644
--- a/install/ui/src/freeipa/group.js
+++ b/install/ui/src/freeipa/group.js
@@ -123,16 +123,19 @@ return {
                     primary_key: true
                 }
             ],
+            add_title: '@i18n:objects.group.add_users',
             remove_title: '@i18n:objects.group.remove_users'
         },
         {
             $type: 'association',
             name: 'member_group',
+            add_title: '@i18n:objects.group.add_groups',
             remove_title: '@i18n:objects.group.remove_groups'
         },
         {
             $type: 'association',
             name: 'member_service',
+            add_title: '@i18n:objects.group.add_services',
             remove_title: '@i18n:objects.group.remove_services'
         },
         {
@@ -152,18 +155,21 @@ return {
             $type: 'association',
             name: 'memberof_group',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.group.add_into_groups',
             remove_title: '@i18n:objects.group.remove_from_groups'
         },
         {
             $type: 'association',
             name: 'memberof_netgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.group.add_into_netgroups',
             remove_title: '@i18n:objects.group.remove_from_netgroups'
         },
         {
             $type: 'association',
             name: 'memberof_role',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.group.add_into_roles',
             remove_title: '@i18n:objects.group.remove_from_roles'
         },
         {
@@ -171,6 +177,7 @@ return {
             name: 'memberof_hbacrule',
             associator: IPA.serial_associator,
             add_method: 'add_user',
+            add_title: '@i18n:objects.group.add_into_hbac',
             remove_method: 'remove_user',
             remove_title: '@i18n:objects.group.remove_from_hbac'
         },
@@ -179,6 +186,7 @@ return {
             name: 'memberof_sudorule',
             associator: IPA.serial_associator,
             add_method: 'add_user',
+            add_title: '@i18n:objects.group.add_into_sudo',
             remove_method: 'remove_user',
             remove_title: '@i18n:objects.group.remove_from_sudo'
         }
diff --git a/install/ui/src/freeipa/hostgroup.js b/install/ui/src/freeipa/hostgroup.js
index c8cd2804de..5d599a785b 100644
--- a/install/ui/src/freeipa/hostgroup.js
+++ b/install/ui/src/freeipa/hostgroup.js
@@ -66,23 +66,27 @@ return {
         {
             $type: 'association',
             name: 'member_host',
+            add_title: '@i18n:objects.hostgroup.add_hosts',
             remove_title: '@i18n:objects.hostgroup.remove_hosts'
         },
         {
             $type: 'association',
             name: 'member_hostgroup',
+            add_title: '@i18n:objects.hostgroup.add_hostgroups',
             remove_title: '@i18n:objects.hostgroup.remove_hostgroups'
         },
         {
             $type: 'association',
             name: 'memberof_hostgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.hostgroup.add_into_hostgroups',
             remove_title: '@i18n:objects.hostgroup.remove_from_hostgroups'
         },
         {
             $type: 'association',
             name: 'memberof_netgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.hostgroup.add_into_netgroups',
             remove_title: '@i18n:objects.hostgroup.remove_from_netgroups'
         },
         {
@@ -90,6 +94,7 @@ return {
             name: 'memberof_hbacrule',
             associator: IPA.serial_associator,
             add_method: 'add_host',
+            add_title: '@i18n:objects.hostgroup.add_into_hbac',
             remove_method: 'remove_host',
             remove_title: '@i18n:objects.hostgroup.remove_from_hbac'
         },
@@ -98,6 +103,7 @@ return {
             name: 'memberof_sudorule',
             associator: IPA.serial_associator,
             add_method: 'add_host',
+            add_title: '@i18n:objects.hostgroup.add_into_sudo',
             remove_method: 'remove_host',
             remove_title: '@i18n:objects.hostgroup.remove_from_sudo'
         }
diff --git a/install/ui/src/freeipa/netgroup.js b/install/ui/src/freeipa/netgroup.js
index cab4653497..2457953391 100644
--- a/install/ui/src/freeipa/netgroup.js
+++ b/install/ui/src/freeipa/netgroup.js
@@ -60,12 +60,14 @@ var spec = {
         {
             $type: 'association',
             name: 'member_netgroup',
+            add_title: '@i18n:objects.netgroup.add_netgroups',
             remove_title: '@i18n:objects.netgroup.remove_netgroups'
         },
         {
             $type: 'association',
             name: 'memberof_netgroup',
             associator: IPA.serial_associator,
+            add_title: '@i18n:objects.netgroup.add_into_netgroups',
             remove_title: '@i18n:objects.netgroup.remove_from_netgroups'
         }
     ],
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index dad816c0c5..473171ca93 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -716,6 +716,30 @@ class i18n_messages(Command):
             },
             "group": {
                 "add": _("Add user group"),
+                "add_groups": _(
+                    "Add user groups into user group '${primary_key}'"
+                ),
+                "add_into_groups": _(
+                    "Add user group '${primary_key}' into user groups"
+                ),
+                "add_into_hbac": _(
+                    "Add user group '${primary_key}' into HBAC rules"
+                ),
+                "add_into_netgroups": _(
+                    "Add user group '${primary_key}' into netgroups"
+                ),
+                "add_into_roles": _(
+                    "Add user group '${primary_key}' into roles"
+                ),
+                "add_into_sudo": _(
+                    "Add user group '${primary_key}' into sudo rules"
+                ),
+                "add_services": _(
+                    "Add services into user group '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into user group '${primary_key}'"
+                ),
                 "details": _("Group Settings"),
                 "external": _("External"),
                 "groups": _("Groups"),
@@ -883,6 +907,24 @@ class i18n_messages(Command):
             },
             "hostgroup": {
                 "add": _("Add host group"),
+                "add_hosts": _(
+                    "Add hosts into host group '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into host group '${primary_key}'"
+                ),
+                "add_into_hostgroups": _(
+                    "Add host group '${primary_key}' into host groups"
+                ),
+                "add_into_hbac": _(
+                    "Add host group '${primary_key}' into HBAC rules"
+                ),
+                "add_into_netgroups": _(
+                    "Add host group '${primary_key}' into netgroups"
+                ),
+                "add_into_sudo": _(
+                    "Add host group '${primary_key}' into sudo rules"
+                ),
                 "host_group": _("Host Groups"),
                 "identity": _("Host Group Settings"),
                 "remove": _("Remove host groups"),
@@ -946,6 +988,12 @@ class i18n_messages(Command):
             },
             "netgroup": {
                 "add": _("Add netgroup"),
+                "add_into_netgroups": _(
+                    "Add netgroup '${primary_key}' into netgroups"
+                ),
+                "add_netgroups": _(
+                    "Add netgroups into netgroup '${primary_key}'"
+                ),
                 "any_host": _("Any Host"),
                 "anyone": _("Anyone"),
                 "external": _("External"),

From 01eba53c80d9b1cf8a10057b5665c00cba752698 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 07/22] Add title to 'add' dialog for details of 'ID Views'
 entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/idviews.js |  2 --
 ipaserver/plugins/internal.py     | 13 +++++++++----
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/install/ui/src/freeipa/idviews.js b/install/ui/src/freeipa/idviews.js
index 21a417935b..285f6d7d1e 100644
--- a/install/ui/src/freeipa/idviews.js
+++ b/install/ui/src/freeipa/idviews.js
@@ -718,10 +718,8 @@ idviews.apply_action = function(spec) {
 
         var pkey = facet.get_pkey();
         var other_entity = reg.entity.get(that.other_entity);
-        var other_entity_label = other_entity.metadata.label;
         var exclude = that.get_exclude(facet);
         var title = text.get(that.dialog_title);
-        title = title.replace('${entity}', other_entity_label);
         title = title.replace('${primary_key}', pkey);
 
         var dialog = IPA.association_adder_dialog({
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 473171ca93..04fe552782 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -966,9 +966,13 @@ class i18n_messages(Command):
                 "appliedtohosts": _("Applied to hosts"),
                 "appliedtohosts_title": _("Applied to hosts"),
                 "apply_hostgroups": _("Apply to host groups"),
-                "apply_hostgroups_title": _("Apply ID View ${primary_key} on hosts of ${entity}"),
+                "apply_hostgroups_title": _(
+                    "Apply ID view '${primary_key}' on hosts of host groups"
+                ),
                 "apply_hosts": _("Apply to hosts"),
-                "apply_hosts_title": _("Apply ID view ${primary_key} on ${entity}"),
+                "apply_hosts_title": _(
+                    "Apply ID view '${primary_key}' on hosts"
+                ),
                 "ipaassignedidview": _("Assigned ID View"),
                 "overrides_tab": _("${primary_key} overrides:"),
                 "remove": _("Remove ID views"),
@@ -976,12 +980,13 @@ class i18n_messages(Command):
                 "remove_groups": _("Remove group ID overrides"),
                 "unapply_hostgroups": _("Un-apply from host groups"),
                 "unapply_hostgroups_all_title": _("Un-apply ID Views from hosts of hostgroups"),
-                "unapply_hostgroups_title": _("Un-apply ID View ${primary_key} from hosts of ${entity}"),
                 "unapply_hosts": _("Un-apply"),
                 "unapply_hosts_all": _("Un-apply from hosts"),
                 "unapply_hosts_all_title": _("Un-apply ID Views from hosts"),
                 "unapply_hosts_confirm": _("Are you sure you want to un-apply ID view from selected entries?"),
-                "unapply_hosts_title": _("Un-apply ID View ${primary_key} from hosts"),
+                "unapply_hosts_title": _(
+                    "Un-apply ID view '${primary_key}' from hosts"
+                ),
             },
             "krbtpolicy": {
                 "identity": _("Kerberos Ticket Policy"),

From 30094d8212e1a8159916fffb62172f3a660246e1 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 08/22] Add title to 'add' dialog for details of 'HBAC' entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/hbac.js | 2 ++
 ipaserver/plugins/internal.py  | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/install/ui/src/freeipa/hbac.js b/install/ui/src/freeipa/hbac.js
index 46d10da67b..caf9a0e176 100644
--- a/install/ui/src/freeipa/hbac.js
+++ b/install/ui/src/freeipa/hbac.js
@@ -155,6 +155,7 @@ return {
                     width: '100px'
                 }
             ],
+            add_title: '@i18n:objects.hbacsvc.add_hbacsvcgroups',
             remove_title: '@i18n:objects.hbacsvc.remove_from_hbacsvcgroups'
         }
     ],
@@ -219,6 +220,7 @@ return {
                     width: '100px'
                 }
             ],
+            add_title: '@i18n:objects.hbacsvcgroup.add_hbacsvcs',
             remove_title: '@i18n:objects.hbacsvcgroup.remove_hbacsvcs'
         }
     ],
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 04fe552782..f1050d23b3 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -811,6 +811,10 @@ class i18n_messages(Command):
             },
             "hbacsvc": {
                 "add": _("Add HBAC service"),
+                "add_hbacsvcgroups": _(
+                    "Add HBAC service '${primary_key}' into HBAC service "
+                    "groups"
+                ),
                 "remove": _("Remove HBAC services"),
                 "remove_from_hbacsvcgroups": _(
                     "Remove HBAC service '${primary_key}' from HBAC service "
@@ -819,6 +823,10 @@ class i18n_messages(Command):
             },
             "hbacsvcgroup": {
                 "add": _("Add HBAC service group"),
+                "add_hbacsvcs": _(
+                    "Add HBAC services into HBAC service group "
+                    "'${primary_key}'"
+                ),
                 "remove": _("Remove HBAC service groups"),
                 "remove_hbacsvcs": _(
                     "Remove HBAC services from HBAC service group "

From 35b1b65a542e62c763d68eea60684c3a0cc35957 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 09/22] Add title to 'add' dialog for details of 'Sudo' entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/sudo.js | 2 ++
 ipaserver/plugins/internal.py  | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/install/ui/src/freeipa/sudo.js b/install/ui/src/freeipa/sudo.js
index c8880a671b..62112e53f3 100644
--- a/install/ui/src/freeipa/sudo.js
+++ b/install/ui/src/freeipa/sudo.js
@@ -156,6 +156,7 @@ return {
                     width: '100px'
                 }
             ],
+            add_title: '@i18n:objects.sudocmd.add_into_sudocmdgroups',
             remove_title: '@i18n:objects.sudocmd.remove_from_sudocmdgroups'
         }
     ],
@@ -221,6 +222,7 @@ return {
                     width: '100px'
                 }
             ],
+            add_title: '@i18n:objects.sudocmdgroup.add_sudocmds',
             remove_title: '@i18n:objects.sudocmdgroup.remove_sudocmds'
         }
     ],
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index f1050d23b3..ffe75b8d9e 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1202,6 +1202,10 @@ class i18n_messages(Command):
             },
             "sudocmd": {
                 "add": _("Add sudo command"),
+                "add_into_sudocmdgroups": _(
+                    "Add sudo command '${primary_key}' into sudo command "
+                    "groups"
+                ),
                 "groups": _("Groups"),
                 "remove": _("Remove sudo commands"),
                 "remove_from_sudocmdgroups": _(
@@ -1211,6 +1215,10 @@ class i18n_messages(Command):
             },
             "sudocmdgroup": {
                 "add": _("Add sudo command group"),
+                "add_sudocmds": _(
+                    "Add sudo commands into sudo command group "
+                    "'${primary_key}'"
+                ),
                 "commands": _("Commands"),
                 "remove": _("Remove sudo command groups"),
                 "remove_sudocmds": _(

From 958b10576172d2a73c491fcd97a51f7c46960375 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 10/22] Add title to 'add' dialog for details of 'OTP Tokens'
 entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/otptoken.js | 1 +
 ipaserver/plugins/internal.py      | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/install/ui/src/freeipa/otptoken.js b/install/ui/src/freeipa/otptoken.js
index 9cd13b3b44..b67dfcf2da 100644
--- a/install/ui/src/freeipa/otptoken.js
+++ b/install/ui/src/freeipa/otptoken.js
@@ -226,6 +226,7 @@ return {
             $type: 'association',
             name: 'managedby_user',
             add_method: 'add_managedby',
+            add_title: '@i18n:objects.otptoken.add_users_managing',
             remove_method: 'remove_managedby',
             remove_title: '@i18n:objects.otptoken.remove_users_managing'
         }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index ffe75b8d9e..03b1f1f352 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1042,6 +1042,9 @@ class i18n_messages(Command):
             },
             "otptoken": {
                 "add": _("Add OTP token"),
+                "add_users_managing": _(
+                    "Add users managing OTP token '${primary_key}'"
+                ),
                 "app_link": _("You can use <a href=\"${link}\" target=\"_blank\">FreeOTP<a/> as a software OTP token application."),
                 "config_title": _("Configure your token"),
                 "config_instructions": _("Configure your token by scanning the QR code below. Click on the QR code if you see this on the device you want to configure."),

From b3ac23041814213d50db646c37079f4f9dd54d4e Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Mon, 24 Sep 2018 11:41:58 +0300
Subject: [PATCH 11/22] Add title to 'add' dialog for details of 'RBAC' entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/aci.js |  9 +++++++++
 ipaserver/plugins/internal.py | 27 +++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/install/ui/src/freeipa/aci.js b/install/ui/src/freeipa/aci.js
index 26040cad86..1c6ed6ec40 100644
--- a/install/ui/src/freeipa/aci.js
+++ b/install/ui/src/freeipa/aci.js
@@ -206,6 +206,7 @@ return {
             $type: 'association',
             name: 'member_privilege',
             facet_group: 'privilege',
+            add_title: '@i18n:objects.acipermission.add_privileges',
             remove_title: '@i18n:objects.acipermission.remove_privileges'
         }
     ],
@@ -354,6 +355,7 @@ return {
             name: 'member_role',
             facet_group: 'role',
             add_method: 'add_privilege',
+            add_title: '@i18n:objects.aciprivilege.add_roles',
             remove_method: 'remove_privilege',
             associator: IPA.serial_associator,
             remove_title: '@i18n:objects.aciprivilege.remove_roles'
@@ -363,6 +365,7 @@ return {
             name: 'memberof_permission',
             facet_group: 'permission',
             add_method: 'add_permission',
+            add_title: '@i18n:objects.aciprivilege.add_into_permissions',
             remove_method: 'remove_permission',
             remove_title: '@i18n:objects.aciprivilege.remove_from_permissions'
         }
@@ -414,26 +417,31 @@ return {
         {
             $type: 'association',
             name: 'member_user',
+            add_title: '@i18n:objects.acirole.add_users',
             remove_title: '@i18n:objects.acirole.remove_users'
         },
         {
             $type: 'association',
             name: 'member_group',
+            add_title: '@i18n:objects.acirole.add_groups',
             remove_title: '@i18n:objects.acirole.remove_groups'
         },
         {
             $type: 'association',
             name: 'member_host',
+            add_title: '@i18n:objects.acirole.add_hosts',
             remove_title: '@i18n:objects.acirole.remove_hosts'
         },
         {
             $type: 'association',
             name: 'member_hostgroup',
+            add_title: '@i18n:objects.acirole.add_hostgroups',
             remove_title: '@i18n:objects.acirole.remove_hostgroups'
         },
         {
             $type: 'association',
             name: 'member_service',
+            add_title: '@i18n:objects.acirole.add_services',
             remove_title: '@i18n:objects.acirole.remove_services'
         },
         {
@@ -441,6 +449,7 @@ return {
             name: 'memberof_privilege',
             facet_group: 'privilege',
             add_method: 'add_privilege',
+            add_title: '@i18n:objects.acirole.add_into_privileges',
             remove_method: 'remove_privilege',
             remove_title: '@i18n:objects.acirole.remove_from_privileges'
         }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 03b1f1f352..5328af78a4 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -419,6 +419,9 @@ class i18n_messages(Command):
             },
             "acipermission": {
                 "add": _("Add permission"),
+                "add_privileges": _(
+                    "Add privileges into permission '${primary_key}'"
+                ),
                 "remove": _("Remove permissions"),
                 "remove_privileges": _(
                     "Remove privileges from permission '${primary_key}'"
@@ -426,6 +429,12 @@ class i18n_messages(Command):
             },
             "aciprivilege": {
                 "add": _("Add privilege"),
+                "add_into_permissions": _(
+                    "Add privilege '${primary_key}' into permissions"
+                ),
+                "add_roles": _(
+                    "Add roles into privilege '${primary_key}'"
+                ),
                 "remove": _("Remove privileges"),
                 "remove_from_permissions": _(
                     "Remove privilege '${primary_key}' from permissions"
@@ -437,6 +446,24 @@ class i18n_messages(Command):
             "acirole": {
                 "identity": _("Role Settings"),
                 "add": _("Add role"),
+                "add_groups": _(
+                    "Add user groups into role '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into role '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into role '${primary_key}'"
+                ),
+                "add_into_privileges": _(
+                    "Add role '${primary_key}' into privileges"
+                ),
+                "add_services": _(
+                    "Add services into role '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into role '${primary_key}'"
+                ),
                 "remove": _("Remove roles"),
                 "remove_from_privileges": _(
                     "Remove role '${primary_key}' from privileges"

From 171c6a01d8a7be0960fe76cd9a6bd67f41506f2e Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 10:44:47 +0300
Subject: [PATCH 12/22] Drop concatenated title of add dialog for
 association_table widget

As for now the default title of add dialogs, which are
initialized from 'association_table' widget, is set to something
like 'Add ${other_entity} into ${entity} ${primary_key}',
where 'other_entity' and 'entity' are also translatable texts.
This construction is used via method 'create_add_dialog' of
'association_table' widget for the all 'Add' actions within
details of entities.

Such concatenation leads to a bad quality translation and
should be changed to an entire sentence.

From now a mentioned title is taken from a spec and should be
specified explicitly.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/association.js | 6 +-----
 install/ui/src/freeipa/rule.js        | 4 ----
 2 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/install/ui/src/freeipa/association.js b/install/ui/src/freeipa/association.js
index 6d8edc2c06..8038e2d41d 100644
--- a/install/ui/src/freeipa/association.js
+++ b/install/ui/src/freeipa/association.js
@@ -184,7 +184,7 @@ IPA.attribute_adder_dialog = function(spec) {
             required: true
         }
     ];
-    spec.title = spec.title || text.get('@i18n:dialogs.add_title').replace('${entity}', metadata.label);
+    spec.title = spec.title || text.get('@i18n:dialogs.add_title_default');
     spec.subject = metadata.label;
 
     var that = IPA.entity_adder_dialog(spec);
@@ -638,14 +638,10 @@ IPA.association_table_widget = function (spec) {
 
     that.create_add_dialog = function() {
 
-        var entity_label = that.entity.metadata.label_singular;
         var pkey = that.facet.get_pkey();
-        var other_entity_label = that.other_entity.metadata.label;
 
         var title = that.add_title;
-        title = title.replace('${entity}', entity_label);
         title = title.replace('${primary_key}', pkey);
-        title = title.replace('${other_entity}', other_entity_label);
 
         return IPA.association_adder_dialog({
             title: title,
diff --git a/install/ui/src/freeipa/rule.js b/install/ui/src/freeipa/rule.js
index 0f39d434f8..7c7e6f1c1a 100644
--- a/install/ui/src/freeipa/rule.js
+++ b/install/ui/src/freeipa/rule.js
@@ -153,14 +153,10 @@ IPA.rule_association_table_widget = function(spec) {
 
     that.create_add_dialog = function() {
 
-        var entity_label = that.entity.metadata.label_singular;
         var pkey = that.facet.get_pkey();
-        var other_entity_label = that.other_entity.metadata.label;
 
         var title = that.add_title;
-        title = title.replace('${entity}', entity_label);
         title = title.replace('${primary_key}', pkey);
-        title = title.replace('${other_entity}', other_entity_label);
 
         var exclude = that.values;
         if (that.external) {

From 3c81e170f9117fc9b18e953d3f51b4e67edd942d Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 13/22] Add title to 'add' dialog for 'association_table'
 widget of Hosts entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/host.js | 16 ++++++++--------
 ipaserver/plugins/internal.py  | 26 ++++++++++++++++++++++++--
 2 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/install/ui/src/freeipa/host.js b/install/ui/src/freeipa/host.js
index eda42e0f1b..492cf3d95d 100644
--- a/install/ui/src/freeipa/host.js
+++ b/install/ui/src/freeipa/host.js
@@ -201,7 +201,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_users_retrieve',
                             remove_title: '@i18n:keytab.remove_users_retrieve',
                             columns: [
                                 {
@@ -218,7 +218,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_groups_retrieve',
                             remove_title: '@i18n:keytab.remove_groups_retrieve',
                             columns: [
                                 {
@@ -235,7 +235,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_hosts_retrieve',
                             remove_title: '@i18n:keytab.remove_hosts_retrieve',
                             columns: [
                                 {
@@ -252,7 +252,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_hostgroups_retrieve',
                             remove_title: '@i18n:keytab.remove_hostgroups_retrieve',
                             columns: [
                                 {
@@ -276,7 +276,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_users_create',
                             remove_title: '@i18n:keytab.remove_users_create',
                             columns: [
                                 {
@@ -293,7 +293,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_groups_create',
                             remove_title: '@i18n:keytab.remove_groups_create',
                             columns: [
                                 {
@@ -310,7 +310,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_hosts_create',
                             remove_title: '@i18n:keytab.remove_hosts_create',
                             columns: [
                                 {
@@ -327,7 +327,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_hostgroups_create',
                             remove_title: '@i18n:keytab.remove_hostgroups_create',
                             columns: [
                                 {
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 5328af78a4..05631f0373 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -306,8 +306,30 @@ class i18n_messages(Command):
         },
         "false": _("False"),
         "keytab": {
-            "add_create": _("Allow ${other_entity} to create keytab of ${primary_key}"),
-            "add_retrive": _("Allow ${other_entity} to retrieve keytab of ${primary_key}"),
+            "add_groups_create": _(
+                "Allow user groups to create keytab of '${primary_key}'"
+            ),
+            "add_groups_retrieve": _(
+                "Allow user groups to retrieve keytab of '${primary_key}'"
+            ),
+            "add_hostgroups_create": _(
+                "Allow host groups to create keytab of '${primary_key}'"
+            ),
+            "add_hostgroups_retrieve": _(
+                "Allow host groups to retrieve keytab of '${primary_key}'"
+            ),
+            "add_hosts_create": _(
+                "Allow hosts to create keytab of '${primary_key}'"
+            ),
+            "add_hosts_retrieve": _(
+                "Allow hosts to retrieve keytab of '${primary_key}'"
+            ),
+            "add_users_create": _(
+                "Allow users to create keytab of '${primary_key}'"
+            ),
+            "add_users_retrieve": _(
+                "Allow users to retrieve keytab of '${primary_key}'"
+            ),
             "allowed_to_create": _("Allowed to create keytab"),
             "allowed_to_retrieve": _("Allowed to retrieve keytab"),
             "remove_groups_create": _(

From 20688f0fa717cf1613e09c30dc848289c39ce290 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 14/22] Add title to 'add' dialog for 'association_table'
 widget of Services entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/service.js | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/install/ui/src/freeipa/service.js b/install/ui/src/freeipa/service.js
index 8df325a5a4..780ae1b253 100644
--- a/install/ui/src/freeipa/service.js
+++ b/install/ui/src/freeipa/service.js
@@ -204,7 +204,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_users_retrieve',
                             remove_title: '@i18n:keytab.remove_users_retrieve',
                             columns: [
                                 {
@@ -221,7 +221,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_groups_retrieve',
                             remove_title: '@i18n:keytab.remove_groups_retrieve',
                             columns: [
                                 {
@@ -238,7 +238,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_hosts_retrieve',
                             remove_title: '@i18n:keytab.remove_hosts_retrieve',
                             columns: [
                                 {
@@ -255,7 +255,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_retrieve_keytab',
                             remove_method: 'disallow_retrieve_keytab',
-                            add_title: '@i18n:keytab.add_retrive',
+                            add_title: '@i18n:keytab.add_hostgroups_retrieve',
                             remove_title: '@i18n:keytab.remove_hostgroups_retrieve',
                             columns: [
                                 {
@@ -279,7 +279,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_users_create',
                             remove_title: '@i18n:keytab.remove_users_create',
                             columns: [
                                 {
@@ -296,7 +296,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_groups_create',
                             remove_title: '@i18n:keytab.remove_groups_create',
                             columns: [
                                 {
@@ -313,7 +313,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_hosts_create',
                             remove_title: '@i18n:keytab.remove_hosts_create',
                             columns: [
                                 {
@@ -330,7 +330,7 @@ return {
                             flags: ['w_if_no_aci'],
                             add_method: 'allow_create_keytab',
                             remove_method: 'disallow_create_keytab',
-                            add_title: '@i18n:keytab.add_create',
+                            add_title: '@i18n:keytab.add_hostgroups_create',
                             remove_title: '@i18n:keytab.remove_hostgroups_create',
                             columns: [
                                 {

From c14ef57307da188d57ec9ea0dda5f6ea3f93ed62 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 15/22] Add title to 'add' dialog for 'association_table'
 widget of Groups entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/netgroup.js |  8 ++++----
 ipaserver/plugins/internal.py      | 12 ++++++++++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/install/ui/src/freeipa/netgroup.js b/install/ui/src/freeipa/netgroup.js
index 2457953391..db01890d48 100644
--- a/install/ui/src/freeipa/netgroup.js
+++ b/install/ui/src/freeipa/netgroup.js
@@ -190,7 +190,7 @@ var add_netgroup_details_facet_widgets = function (spec) {
                             name: 'memberuser_user',
                             add_method: 'add_member',
                             remove_method: 'remove_member',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.netgroup.add_users',
                             remove_title: '@i18n:objects.netgroup.remove_users',
                             columns: [
                                 {
@@ -206,7 +206,7 @@ var add_netgroup_details_facet_widgets = function (spec) {
                             name: 'memberuser_group',
                             add_method: 'add_member',
                             remove_method: 'remove_member',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.netgroup.add_groups',
                             remove_title: '@i18n:objects.netgroup.remove_groups',
                             columns: [
                                 {
@@ -279,7 +279,7 @@ var add_netgroup_details_facet_widgets = function (spec) {
                             add_method: 'add_member',
                             remove_method: 'remove_member',
                             external: 'externalhost',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.netgroup.add_hosts',
                             remove_title: '@i18n:objects.netgroup.remove_hosts',
                             columns: [
                                 {
@@ -301,7 +301,7 @@ var add_netgroup_details_facet_widgets = function (spec) {
                             name: 'memberhost_hostgroup',
                             add_method: 'add_member',
                             remove_method: 'remove_member',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.netgroup.add_hostgroups',
                             remove_title: '@i18n:objects.netgroup.remove_hostgroups',
                             columns: [
                                 {
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 05631f0373..db52f58e5c 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1056,6 +1056,18 @@ class i18n_messages(Command):
                 "add_netgroups": _(
                     "Add netgroups into netgroup '${primary_key}'"
                 ),
+                "add_groups": _(
+                    "Add user groups into netgroup '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into netgroup '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into netgroup '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into netgroup '${primary_key}'"
+                ),
                 "any_host": _("Any Host"),
                 "anyone": _("Anyone"),
                 "external": _("External"),

From 1ccafd487039e97ee9498bbe972d298dcbf960a4 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 16/22] Add title to 'add' dialog for 'association_table'
 widget of HBAC entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/hbac.js | 12 ++++++------
 ipaserver/plugins/internal.py  | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/install/ui/src/freeipa/hbac.js b/install/ui/src/freeipa/hbac.js
index caf9a0e176..911d1f5767 100644
--- a/install/ui/src/freeipa/hbac.js
+++ b/install/ui/src/freeipa/hbac.js
@@ -331,7 +331,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberuser_user',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_users',
                             remove_title: '@i18n:objects.hbacrule.remove_users'
                         },
                         {
@@ -340,7 +340,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberuser_group',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_groups',
                             remove_title: '@i18n:objects.hbacrule.remove_groups'
                         }
                     ]
@@ -404,7 +404,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberhost_host',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_hosts',
                             remove_title: '@i18n:objects.hbacrule.remove_hosts'
                         },
                         {
@@ -413,7 +413,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberhost_hostgroup',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_hostgroups',
                             remove_title: '@i18n:objects.hbacrule.remove_hostgroups'
                         }
                     ]
@@ -471,7 +471,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberservice_hbacsvc',
                             add_method: 'add_service',
                             remove_method: 'remove_service',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_services',
                             remove_title: '@i18n:objects.hbacrule.remove_services'
                         },
                         {
@@ -480,7 +480,7 @@ var add_hbacrule_details_facet_widgets = function (spec) {
                             name: 'memberservice_hbacsvcgroup',
                             add_method: 'add_service',
                             remove_method: 'remove_service',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.hbacrule.add_servicegroups',
                             remove_title: '@i18n:objects.hbacrule.remove_servicegroups'
                         }
                     ]
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index db52f58e5c..7eb456a7e0 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -827,6 +827,25 @@ class i18n_messages(Command):
             },
             "hbacrule": {
                 "add": _("Add HBAC rule"),
+                "add_groups": _(
+                    "Add user groups into HBAC rule '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into HBAC rule '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into HBAC rule '${primary_key}'"
+                ),
+                "add_servicegroups": _(
+                    "Add HBAC service groups into HBAC rule "
+                    "'${primary_key}'"
+                ),
+                "add_services": _(
+                    "Add HBAC services into HBAC rule '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into HBAC rule '${primary_key}'"
+                ),
                 "any_host": _("Any Host"),
                 "any_service": _("Any Service"),
                 "anyone": _("Anyone"),

From 2ea8f088ba59bdb232e75d21fa3d210c18d7723c Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 17/22] Add title to 'add' dialog for 'association_table'
 widget of Sudo entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/sudo.js | 22 ++++++++++----------
 ipaserver/plugins/internal.py  | 37 ++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/install/ui/src/freeipa/sudo.js b/install/ui/src/freeipa/sudo.js
index 62112e53f3..de219b8064 100644
--- a/install/ui/src/freeipa/sudo.js
+++ b/install/ui/src/freeipa/sudo.js
@@ -363,7 +363,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             add_method: 'add_user',
                             remove_method: 'remove_user',
                             external: 'externaluser',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.sudorule.add_users',
                             remove_title: '@i18n:objects.sudorule.remove_users'
                         },
                         {
@@ -372,7 +372,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberuser_group',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.sudorule.add_groups',
                             remove_title: '@i18n:objects.sudorule.remove_groups'
                         }
                     ]
@@ -438,7 +438,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             add_method: 'add_host',
                             remove_method: 'remove_host',
                             external: 'externalhost',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.sudorule.add_hosts',
                             remove_title: '@i18n:objects.sudorule.remove_hosts'
                         },
                         {
@@ -447,7 +447,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberhost_hostgroup',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.sudorule.add_hostgroups',
                             remove_title: '@i18n:objects.sudorule.remove_hostgroups'
                         }
                     ]
@@ -531,7 +531,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberallowcmd_sudocmd',
                             add_method: 'add_allow_command',
                             remove_method: 'remove_allow_command',
-                            add_title: '@i18n:association.add.memberallowcmd',
+                            add_title: '@i18n:objects.sudorule.add_allow_cmds',
                             remove_title: '@i18n:objects.sudorule.remove_allow_cmds'
                         },
                         {
@@ -540,7 +540,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberallowcmd_sudocmdgroup',
                             add_method: 'add_allow_command',
                             remove_method: 'remove_allow_command',
-                            add_title: '@i18n:association.add.memberallowcmd',
+                            add_title: '@i18n:objects.sudorule.add_allow_cmdgroups',
                             remove_title: '@i18n:objects.sudorule.remove_allow_cmdgroups'
                         },
                         {
@@ -555,7 +555,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberdenycmd_sudocmd',
                             add_method: 'add_deny_command',
                             remove_method: 'remove_deny_command',
-                            add_title: '@i18n:association.add.memberdenycmd',
+                            add_title: '@i18n:objects.sudorule.add_deny_cmds',
                             remove_title: '@i18n:objects.sudorule.remove_deny_cmds'
                         },
                         {
@@ -564,7 +564,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'memberdenycmd_sudocmdgroup',
                             add_method: 'add_deny_command',
                             remove_method: 'remove_deny_command',
-                            add_title: '@i18n:association.add.memberdenycmd',
+                            add_title: '@i18n:objects.sudorule.add_deny_cmdgroups',
                             remove_title: '@i18n:objects.sudorule.remove_deny_cmdgroups'
                         }
                     ]
@@ -636,7 +636,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             external: 'ipasudorunasextuser',
                             add_method: 'add_runasuser',
                             remove_method: 'remove_runasuser',
-                            add_title: '@i18n:association.add.ipasudorunas',
+                            add_title: '@i18n:objects.sudorule.add_runas_users',
                             remove_title: '@i18n:objects.sudorule.remove_runas_users'
                         },
                         {
@@ -645,7 +645,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                             name: 'ipasudorunas_group',
                             add_method: 'add_runasuser',
                             remove_method: 'remove_runasuser',
-                            add_title: '@i18n:association.add.ipasudorunas',
+                            add_title: '@i18n:objects.sudorule.add_runas_usergroups',
                             remove_title: '@i18n:objects.sudorule.remove_runas_usergroups'
                         }
                     ]
@@ -668,7 +668,7 @@ var add_sudorule_details_facet_widgets = function (spec) {
                         external: 'ipasudorunasextgroup',
                         add_method: 'add_runasgroup',
                         remove_method: 'remove_runasgroup',
-                        add_title: '@i18n:association.add.ipasudorunasgroup',
+                        add_title: '@i18n:objects.sudorule.add_runas_groups',
                         remove_title: '@i18n:objects.sudorule.remove_runas_groups'
                     }]
                 }
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 7eb456a7e0..f57a2b7815 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1312,6 +1312,43 @@ class i18n_messages(Command):
             "sudorule": {
                 "add": _("Add sudo rule"),
                 "add_option": _("Add sudo option"),
+                "add_allow_cmds": _(
+                    "Add allow sudo commands into sudo rule "
+                    "'${primary_key}'"
+                ),
+                "add_allow_cmdgroups": _(
+                    "Add allow sudo command groups into sudo rule "
+                    "'${primary_key}'"
+                ),
+                "add_deny_cmds": _(
+                    "Add deny sudo commands into sudo rule "
+                    "'${primary_key}'"
+                ),
+                "add_deny_cmdgroups": _(
+                    "Add deny sudo command groups into sudo rule "
+                    "'${primary_key}'"
+                ),
+                "add_groups": _(
+                    "Add user groups into sudo rule '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into sudo rule '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into sudo rule '${primary_key}'"
+                ),
+                "add_runas_users": _(
+                    "Add RunAs users into sudo rule '${primary_key}'"
+                ),
+                "add_runas_usergroups": _(
+                    "Add RunAs user groups into sudo rule '${primary_key}'"
+                ),
+                "add_runas_groups": _(
+                    "Add RunAs groups into sudo rule '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into sudo rule '${primary_key}'"
+                ),
                 "allow": _("Allow"),
                 "any_command": _("Any Command"),
                 "any_group": _("Any Group"),

From 0e1accdab4e3fe29bec4085ee4a2a87d545d9c96 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 18/22] Add title to 'add' dialog for 'association_table'
 widget of SELinux User Maps entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/selinux.js |  8 ++++----
 ipaserver/plugins/internal.py     | 12 ++++++++++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/install/ui/src/freeipa/selinux.js b/install/ui/src/freeipa/selinux.js
index 00385da230..8739726330 100644
--- a/install/ui/src/freeipa/selinux.js
+++ b/install/ui/src/freeipa/selinux.js
@@ -221,7 +221,7 @@ var add_selinux_details_facet_widgets = function (spec) {
                             name: 'memberuser_user',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.selinuxusermap.add_users',
                             remove_title: '@i18n:objects.selinuxusermap.remove_users'
                         },
                         {
@@ -230,7 +230,7 @@ var add_selinux_details_facet_widgets = function (spec) {
                             name: 'memberuser_group',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.selinuxusermap.add_groups',
                             remove_title: '@i18n:objects.selinuxusermap.remove_groups'
                         }
                     ]
@@ -294,7 +294,7 @@ var add_selinux_details_facet_widgets = function (spec) {
                             name: 'memberhost_host',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.selinuxusermap.add_hosts',
                             remove_title: '@i18n:objects.selinuxusermap.remove_hosts'
                         },
                         {
@@ -303,7 +303,7 @@ var add_selinux_details_facet_widgets = function (spec) {
                             name: 'memberhost_hostgroup',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.selinuxusermap.add_hostgroups',
                             remove_title: '@i18n:objects.selinuxusermap.remove_hostgroups'
                         }
                     ]
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index f57a2b7815..9538f17164 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1197,6 +1197,18 @@ class i18n_messages(Command):
             },
             "selinuxusermap": {
                 "add": _("Add SELinux user map"),
+                "add_groups": _(
+                    "Add user groups into SELinux user map '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into SELinux user map '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into SELinux user map '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into SELinux user map '${primary_key}'"
+                ),
                 "any_host": _("Any Host"),
                 "anyone": _("Anyone"),
                 "host": _("Host"),

From 073eac085a17fd4d80d476bb6b1f383dd69ed78b Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 19/22] Add title to 'add' dialog for 'association_table'
 widget of Certificates entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/plugins/caacl.js | 14 +++++++-------
 ipaserver/plugins/internal.py           | 22 ++++++++++++++++++++++
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/install/ui/src/freeipa/plugins/caacl.js b/install/ui/src/freeipa/plugins/caacl.js
index d5aaacb428..dd39876ac2 100644
--- a/install/ui/src/freeipa/plugins/caacl.js
+++ b/install/ui/src/freeipa/plugins/caacl.js
@@ -197,7 +197,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'ipamembercertprofile_certprofile',
                             add_method: 'add_profile',
                             remove_method: 'remove_profile',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_profiles',
                             remove_title: '@i18n:objects.caacl.remove_profiles'
                         }
                     ]
@@ -302,7 +302,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'memberuser_user',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_users',
                             remove_title: '@i18n:objects.caacl.remove_users'
                         },
                         {
@@ -311,7 +311,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'memberuser_group',
                             add_method: 'add_user',
                             remove_method: 'remove_user',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_groups',
                             remove_title: '@i18n:objects.caacl.remove_groups'
                         }
                     ]
@@ -341,7 +341,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'memberhost_host',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_hosts',
                             remove_title: '@i18n:objects.caacl.remove_hosts'
                         },
                         {
@@ -350,7 +350,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'memberhost_hostgroup',
                             add_method: 'add_host',
                             remove_method: 'remove_host',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_hostgroups',
                             remove_title: '@i18n:objects.caacl.remove_hostgroups'
                         }
                     ]
@@ -373,7 +373,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'memberservice_service',
                             add_method: 'add_service',
                             remove_method: 'remove_service',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_services',
                             remove_title: '@i18n:objects.caacl.remove_services'
                         }
                     ]
@@ -397,7 +397,7 @@ var add_caacl_details_facet_widgets = function (spec) {
                             name: 'ipamemberca_ca',
                             add_method: 'add_ca',
                             remove_method: 'remove_ca',
-                            add_title: '@i18n:association.add.member',
+                            add_title: '@i18n:objects.caacl.add_ca',
                             remove_title: '@i18n:objects.caacl.remove_ca'
                         }
                     ]
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 9538f17164..146de07607 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -558,6 +558,28 @@ class i18n_messages(Command):
             },
             "caacl": {
                 "add": _("Add CA ACL"),
+                "add_ca": _(
+                    "Add Certificate Authorities into CA ACL "
+                    "'${primary_key}'"
+                ),
+                "add_groups": _(
+                    "Add user groups into CA ACL '${primary_key}'"
+                ),
+                "add_hostgroups": _(
+                    "Add host groups into CA ACL '${primary_key}'"
+                ),
+                "add_hosts": _(
+                    "Add hosts into CA ACL '${primary_key}'"
+                ),
+                "add_profiles": _(
+                    "Add certificate profiles into CA ACL '${primary_key}'"
+                ),
+                "add_services": _(
+                    "Add services into CA ACL '${primary_key}'"
+                ),
+                "add_users": _(
+                    "Add users into CA ACL '${primary_key}'"
+                ),
                 "all": _("All"),
                 "any_ca": _("Any CA"),
                 "any_host": _("Any Host"),

From 29ca7bf30886e80e682bb7fc0ccdd2be0d226d4a Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 20/22] Add title to 'add' dialog for 'association_table'
 widget of Vaults entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/vault.js |  6 ++++++
 ipaserver/plugins/internal.py   | 18 ++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/install/ui/src/freeipa/vault.js b/install/ui/src/freeipa/vault.js
index b10073ee9c..2b4d116dbd 100644
--- a/install/ui/src/freeipa/vault.js
+++ b/install/ui/src/freeipa/vault.js
@@ -89,6 +89,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.user'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_member_users',
                         remove_title: '@i18n:objects.vault.remove_member_users'
                     },
                     {
@@ -103,6 +104,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.group'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_member_groups',
                         remove_title: '@i18n:objects.vault.remove_member_groups'
                     },
                     {
@@ -118,6 +120,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.service'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_member_services',
                         remove_title: '@i18n:objects.vault.remove_member_services'
                     }
                 ]
@@ -141,6 +144,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.user'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_owner_users',
                         remove_title: '@i18n:objects.vault.remove_owner_users'
                     },
                     {
@@ -157,6 +161,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.group'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_owner_groups',
                         remove_title: '@i18n:objects.vault.remove_owner_groups'
                     },
                     {
@@ -174,6 +179,7 @@ var make_vaults_details_page_spec = function() {
                                 label: '@i18n:objects.vault.service'
                             }
                         ],
+                        add_title: '@i18n:objects.vault.add_owner_services',
                         remove_title: '@i18n:objects.vault.remove_owner_services'
                     }
                 ]
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index 146de07607..cc7e503589 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1536,6 +1536,24 @@ class i18n_messages(Command):
             },
             "vault": {
                 "add": _("Add vault"),
+                "add_member_groups": _(
+                    "Add user groups into members of vault '${primary_key}'"
+                ),
+                "add_member_services": _(
+                    "Add services into members of vault '${primary_key}'"
+                ),
+                "add_member_users": _(
+                    "Add users into members of vault '${primary_key}'"
+                ),
+                "add_owner_groups": _(
+                    "Add user groups into owners of vault '${primary_key}'"
+                ),
+                "add_owner_services": _(
+                    "Add services into owners of vault '${primary_key}'"
+                ),
+                "add_owner_users": _(
+                    "Add users into owners of vault '${primary_key}'"
+                ),
                 "add_warn_arch_ret": _(
                     "Secrets can be added/retrieved to vault only by using "
                     "vault-archive and vault-retrieve from CLI."

From 0f30fd834576ab6e83247b1c2741e21e5ebeb8a5 Mon Sep 17 00:00:00 2001
From: Stanislav Levin <s...@altlinux.org>
Date: Tue, 25 Sep 2018 11:11:48 +0300
Subject: [PATCH 21/22] Add title to 'add' dialog for 'association_table'
 widget of Topology entity

To improve translation quality the title of 'Add' dialog,
which is initialized within details table of the entity, should be
specified explicitly in the spec and should be an entire sentence.

Fixes: https://pagure.io/freeipa/issue/7712
Fixes: https://pagure.io/freeipa/issue/7714
Reviewed-By: Serhii Tsymbaliuk <stsym...@redhat.com>
---
 install/ui/src/freeipa/topology.js | 6 ++----
 ipaserver/plugins/internal.py      | 3 +++
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/install/ui/src/freeipa/topology.js b/install/ui/src/freeipa/topology.js
index 1903f6acea..5f163d22e5 100644
--- a/install/ui/src/freeipa/topology.js
+++ b/install/ui/src/freeipa/topology.js
@@ -170,6 +170,7 @@ return {
         }
     ],
     adder_dialog: {
+        title: '@i18n:objects.topologysegment.add',
         fields: [
             {
                 name: 'cn',
@@ -449,6 +450,7 @@ return {
                                     name: 'service_relative_weight'
                                 }
                             ],
+                            add_title: '@i18n:objects.topologylocation.add_server',
                             remove_title: '@i18n:objects.topologylocation.remove_servers'
                         }
                     ]
@@ -714,14 +716,10 @@ topology.location_association_table_widget = function(spec) {
 
     that.create_add_dialog = function() {
 
-        var entity_label = that.entity.metadata.label_singular;
         var pkey = that.facet.get_pkey();
-        var other_entity_label = that.other_entity.metadata.label_singular;
 
         var title = that.add_title;
-        title = title.replace('${entity}', entity_label);
         title = title.replace('${primary_key}', pkey);
-        title = title.replace('${other_entity}', other_entity_label);
 
         return topology.location_server_adder_dialog({
             title: title,
diff --git a/ipaserver/plugins/internal.py b/ipaserver/plugins/internal.py
index cc7e503589..9ed44ccfaf 100644
--- a/ipaserver/plugins/internal.py
+++ b/ipaserver/plugins/internal.py
@@ -1452,6 +1452,9 @@ class i18n_messages(Command):
             },
             "topologylocation": {
                 "add": _("Add IPA location"),
+                "add_server": _(
+                    "Add IPA server into IPA location '${primary_key}'"
+                ),
                 "remove": _("Remove IPA locations"),
                 "remove_servers": _(
                     "Remove IPA servers from IPA location '${primary_key}'"

From 088ca6eae4044109567ab46c4ac3a03ebc19e37c Mon Sep 17 00:00:00 2001
From: Alexander Bokovoy <aboko...@redhat.com>
Date: Wed, 3 Oct 2018 12:19:58 +0300
Subject: [PATCH 22/22] Update list of contributors

---
 Contributors.txt | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/Contributors.txt b/Contributors.txt
index 735af33580..86a735e831 100644
--- a/Contributors.txt
+++ b/Contributors.txt
@@ -100,6 +100,7 @@ Developers:
 	Jan Pazdziora
 	W. Michael Petullo
 	Pavel Picka
+	Orion Poplawski
 	Gowrishankar Rajaiyan
 	realsobek
 	Michal Reznik
@@ -108,6 +109,7 @@ Developers:
 	Lynn Root
 	Pete Rowley
 	Lenka Ryznarova
+	Alexander Scheel
 	Thorsten Scherf
 	shanyin
 	Kaleemullah Siddiqui
@@ -115,18 +117,21 @@ Developers:
 	Lars Sjostrom
 	Filip Skola
 	Aleksei Slaikovskii
+	Alexey Slaykovsky
 	Lukáš Slebodník
 	Simo Sorce
 	Petr Špaček
 	David Spångberg
 	Justin Stephenson
 	Diane Trout
+	Serhii Tsymbaliuk
 	Fraser Tweedale
 	Petr Viktorin
 	Petr Voborník
 	Felipe Volpone
 	Pavel Vomáčka
 	Andrew Wnuk
+	Thomas Woerner
 	Jason Woods
 	Adam Young
 	Mohammad Rizwan Yusuf
@@ -157,15 +162,26 @@ Testing:
 	Yi Zhang
 
 Translators:
-	Héctor Daniel Cabrera
-	Yuri Chornoivan
-	Teguh DC
-	Piotr Drąg
-	Jérôme Fenal
+	Abhijeet Kasurde
+	Andi Chandler
+	Andrew Martynov
+	A S Alam
+	Emilio Herrera
 	Gundachandru
+	Héctor Daniel Cabrera
 	Jake Li
-	Andrew Martynov
+	Jérôme Fenal
+	Marco Aurélio Krause
+	Martin Bašti
+	Olesya Gerasimenko
+	Paul Ritter
+	Pavel Vomacka
+	Piotr Drąg
+	Robert Antoni Buj Gelonch
 	Sankarshan Mukhopadhyay
+	Teguh DC
+	Yuri Chornoivan
+	Zdenek
 
 Wiki, Solution and Idea Contributors:
 	James Hogarth
_______________________________________________
FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org
To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedorahosted.org/archives/list/freeipa-devel@lists.fedorahosted.org

Reply via email to