From a19fc6ba7b00dc89c3388b46f712274f131157f6 Mon Sep 17 00:00:00 2001
From: Yves Pratter <yves.pratter@gmail.com>
Date: Tue, 20 Apr 2021 18:25:34 +0200
Subject: [PATCH] controllers translation : starting (with plurals)

---
 .../BulkActionsAbstractController.php         |  7 +--
 .../DataUpdateActionsController.php           |  5 +-
 .../ModerationActionsController.php           |  6 ++-
 src/Controller/Admin/UserAdminController.php  | 11 +++--
 translations/admin+intl-icu.fr.yaml           | 47 ++++++++++++++-----
 5 files changed, 51 insertions(+), 25 deletions(-)

diff --git a/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php b/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php
index 5ae787744..a92d2d7a6 100755
--- a/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php
+++ b/src/Controller/Admin/BulkActions/BulkActionsAbstractController.php
@@ -4,6 +4,7 @@ namespace App\Controller\Admin\BulkActions;
 
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as Controller;
 use App\Document\ElementStatus;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 class BulkActionsAbstractController extends Controller
 {
@@ -13,7 +14,7 @@ class BulkActionsAbstractController extends Controller
     protected $batchSize = 1000;
     protected $automaticRedirection = true;
 
-    protected function elementsBulkAction($functionToExecute, $dm, $request, $session)
+    protected function elementsBulkAction($functionToExecute, $dm, $request, $session, TranslatorInterface $t)
     {
         $isStillElementsToProceed = false;
 
@@ -47,7 +48,7 @@ class BulkActionsAbstractController extends Controller
                     $renderedViews[] = $view;
                 }
             } catch (\Exception $e) {
-                $renderedViews[] = "Erreur en traitant l'élement {$element->getId()} : {$e->getMessage()} FILE {$e->getFile()} LINE {$e->getLine()}"; // TODO translate ?
+                $renderedViews[] = $t->trans('bulk.errorElement', [$id=$element->getId(), $error=$e->getMessage(), $file=$e->getFile(), $line=$e->getLine()], 'admin');
             }
 
             if (0 == (++$i % 100)) {
@@ -65,7 +66,7 @@ class BulkActionsAbstractController extends Controller
         }
 
         if ($this->automaticRedirection) {
-            $session->getFlashBag()->add('success', 'Tous les éléments ont été traité avec succès'); // TODO translate ?
+            $session->getFlashBag()->add('success', $t->trans('bulk.batchDone'), [], 'admin');
 
             return $this->redirectToIndex();
         }
diff --git a/src/Controller/Admin/BulkActions/DataUpdateActionsController.php b/src/Controller/Admin/BulkActions/DataUpdateActionsController.php
index b2ad65e14..b6384b640 100755
--- a/src/Controller/Admin/BulkActions/DataUpdateActionsController.php
+++ b/src/Controller/Admin/BulkActions/DataUpdateActionsController.php
@@ -6,11 +6,12 @@ use App\Application\Sonata\UserBundle\Services\GamificationService;
 use Doctrine\ODM\MongoDB\DocumentManager;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Session\SessionInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 class DataUpdateActionsController extends BulkActionsAbstractController
 {
     public function updateGamificationAction(Request $request, SessionInterface $session, DocumentManager $dm,
-                                            GamificationService $gamificationService)
+                                            GamificationService $gamificationService, TranslatorInterface $t)
     {
         $qb = $dm->query('User');
         $qb->field('email')->notEqual(null);
@@ -30,7 +31,7 @@ class DataUpdateActionsController extends BulkActionsAbstractController
         $dm->flush();
         $dm->clear();
 
-        $session->getFlashBag()->add('success', count($users).' utilisateurs ont été mis à jour'); // TODO translate
+        $session->getFlashBag()->add('success', $t->trans('bulk.updateUser', ['%count%' => count($users)], 'admin'));
 
         return $this->redirect($this->generateUrl('admin_app_user_list'));
     }
diff --git a/src/Controller/Admin/BulkActions/ModerationActionsController.php b/src/Controller/Admin/BulkActions/ModerationActionsController.php
index 50d656a86..4a2d47113 100755
--- a/src/Controller/Admin/BulkActions/ModerationActionsController.php
+++ b/src/Controller/Admin/BulkActions/ModerationActionsController.php
@@ -6,12 +6,14 @@ use App\Services\ElementActionService;
 use Doctrine\ODM\MongoDB\DocumentManager;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Session\SessionInterface;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 class ModerationActionsController extends BulkActionsAbstractController
 {
     public function deleteElementReportedAsNoMoreExistingAction(Request $request, SessionInterface $session,
                                                                DocumentManager $dm,
-                                                               ElementActionService $actionService)
+                                                               ElementActionService $actionService,
+                                                               TranslatorInterface $t)
     {
         $repo = $dm->get('Element');
         $elements = $repo->findModerationNeeded(false, 1);
@@ -34,7 +36,7 @@ class ModerationActionsController extends BulkActionsAbstractController
         $dm->flush();
         $dm->clear();
 
-        $session->getFlashBag()->add('success', $count.' éléments ont été supprimés'); // TODO translate
+        $session->getFlashBag()->add('success', $t->trans('bulk.deleteElement', ['%count%' => $count], 'admin'));
 
         return $this->redirectToIndex();
     }
diff --git a/src/Controller/Admin/UserAdminController.php b/src/Controller/Admin/UserAdminController.php
index a58187dac..db0b2c5c5 100755
--- a/src/Controller/Admin/UserAdminController.php
+++ b/src/Controller/Admin/UserAdminController.php
@@ -6,12 +6,14 @@ use App\Services\MailService;
 use Sonata\AdminBundle\Controller\CRUDController as Controller;
 use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 class UserAdminController extends Controller
 {
-    public function __construct(MailService $mailService)
+    public function __construct(MailService $mailService, TranslatorInterface $t)
     {
         $this->mailService = $mailService;
+        $this->t = $t;
     }
 
     public function batchActionSendMail(ProxyQueryInterface $selectedModelQuery)
@@ -41,19 +43,18 @@ class UserAdminController extends Controller
         }
 
         if (!$request->get('mail-subject') || !$request->get('mail-content')) {
-            $this->addFlash('sonata_flash_error', 'Vous devez renseigner un objet et un contenu. Veuillez recommencer'); // TODO translate
+            $this->addFlash('sonata_flash_error', $this->t->trans('mailError', [], 'admin'));
         } elseif (count($mails) > 0) {
             $result = $this->mailService->sendMail(null, $request->get('mail-subject'), $request->get('mail-content'), $request->get('from'), $mails);
             if ($result['success']) {
-                $this->addFlash('sonata_flash_success', count($mails).' mails ont bien été envoyés'); // TODO translate
-                // $this->addFlash('sonata_flash_success', $this->t('sendmails', $count=count($mails))); // $this->t not found
+                $this->addFlash('sonata_flash_success', $this->t->trans('batch.sendmails', ['%count%' => count($mails)], 'admin'));
             } else {
                 $this->addFlash('sonata_flash_error', $result['message']);
             }
         }
 
         if ($usersWithoutEmail > 0) {
-            $this->addFlash('sonata_flash_error', $usersWithoutEmail." mails n'ont pas pu être envoyé car aucune adresse mail n'était renseignée"); // TODO translate
+            $this->addFlash('sonata_flash_error', $this->t->trans('usersWithoutEmail', ['%count%' => $usersWithoutEmail], 'admin'));
         }
 
         if ($nbreModelsToProceed >= 5000) {
diff --git a/translations/admin+intl-icu.fr.yaml b/translations/admin+intl-icu.fr.yaml
index fe34a760b..2749c2e0f 100644
--- a/translations/admin+intl-icu.fr.yaml
+++ b/translations/admin+intl-icu.fr.yaml
@@ -690,10 +690,18 @@ sonata:
         ROLE_DIRECTMODERATION_ADD: "CONTRIBUTEUR + (peut ajouter des éléments comme un Admin depuis le site)"
         ROLE_DIRECTMODERATION_EDIT_OWN_CONTRIB: "CONTRIBUTEUR + (peut éditer les éléments auquel il a contribué, même sans être propriétaire)"
         ROLE_SONATA_ADMIN: "INTERFACE ADMINISTRATEUR"
-
 batch:
-  send: Envoyer
-  sendmails: "{count} mails ont bien été envoyés" # TODO plurals
+  send: "Envoyer"
+  sendmails: "{count, plural,
+                      =1 {# mail a bien été envoyé}
+                      other {# mails ont bien été envoyés}
+              }"
+  mailError: "Vous devez renseigner un objet et un contenu. Veuillez recommencer"
+  usersWithoutEmail: "{count, plural
+                              =1 {# mail n'a pas pu être envoyé car aucune adresse mail n'était renseignée}
+                              other {# mails n'ont pas pu être envoyé car aucune adresse mail n'était renseignée}
+                      }"
+
 
 config_users:
   _label: Configuration
@@ -707,20 +715,33 @@ config_users:
       loginWithFacebook: Activer la connexion avec Facebook
 
 sidebar:
-  gogo_homepage: Retour au site
-  toggle_dropdown: Toggle Dropdown
-  gogo_directory: La Carte
-  gogo_element_add: Formulaire
-  gogo_partners: Qui sommes nous
+  gogo_homepage: "Retour au site"
+  toggle_dropdown: "Toggle Dropdown"
+  gogo_directory: "La Carte"
+  gogo_element_add: "Formulaire"
+  gogo_partners: "Qui sommes nous"
 
 bulk:
-  _label: Actions de masse
+  _label: "Actions de masse"
   delete: "Supprimer les éléments reportés comme n'existant plus"
-  update_gamification: Mettre à jour les scores (nombre de votes, de contributions, et score total par utilisateur)
+  update_gamification: "Mettre à jour les scores (nombre de votes, de contributions, et score total par utilisateur)"
+  batchDone: "Tous les éléments ont été traité avec succès"
+  deleteElement: "{count, plural, 
+                        =0 {Aucun élément supprimé}
+                        =1 {# élément a été supprimé}
+                        other {# éléments ont été supprimés}
+                  }"
+  errorElement: "Erreur en traitant l'élement {id} : {error} FILE {file} LINE {line}"
+  updateUser: "{count, plural,
+                  =0 {Aucun utilisateur mis à jour}
+                  =1 {# utilisateur a été mis à jour}
+                  other {# utilisateurs ont été mis à jour}
+               }"
+
 help:
-  _label: Aide
+  _label: "Aide"
   doc: "Un problème, une question ? c'est par ici : "
 
 saas:
-  list: Liste des Projets
-  config: Configuration
\ No newline at end of file
+  list: "Liste des Projets"
+  config: "Configuration"
\ No newline at end of file
-- 
GitLab