diff --git a/Command/AutoClosingCommand.php b/Command/AutoClosingCommand.php index d8cdcec2..8454fef8 100644 --- a/Command/AutoClosingCommand.php +++ b/Command/AutoClosingCommand.php @@ -49,6 +49,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $translator = $this->getContainer()->get('translator'); $translator->setLocale($locale); + $translationDomain = $this->getContainer()->getParameter('hackzilla_ticket.translation_domain'); + $username = $input->getArgument('username'); $resolved_tickets = $ticketRepository->getResolvedTicketOlderThan($input->getOption('age')); @@ -56,7 +58,7 @@ protected function execute(InputInterface $input, OutputInterface $output) foreach ($resolved_tickets as $ticket) { $message = $ticket_manager->createMessage() ->setMessage( - $translator->trans('MESSAGE_STATUS_CHANGED', ['%status%' => $translator->trans('STATUS_CLOSED')]) + $translator->trans('MESSAGE_STATUS_CHANGED', ['%status%' => $translator->trans('STATUS_CLOSED', [], $translationDomain)], $translationDomain) ) ->setStatus(TicketMessage::STATUS_CLOSED) ->setPriority($ticket->getPriority()) diff --git a/Controller/TicketAttachmentController.php b/Controller/TicketAttachmentController.php index e0716c9d..32274efa 100644 --- a/Controller/TicketAttachmentController.php +++ b/Controller/TicketAttachmentController.php @@ -25,7 +25,9 @@ public function downloadAction($ticketMessageId) $ticketMessage = $ticketManager->getMessageById($ticketMessageId); if (!$ticketMessage || !$ticketMessage instanceof TicketMessageWithAttachment) { - throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY')); + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + + throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY', [], $translationDomain)); } // check permissions diff --git a/Controller/TicketController.php b/Controller/TicketController.php index 2296c1bc..fd5327c2 100644 --- a/Controller/TicketController.php +++ b/Controller/TicketController.php @@ -30,7 +30,9 @@ public function indexAction(Request $request) $userManager = $this->getUserManager(); $ticketManager = $this->get('hackzilla_ticket.ticket_manager'); - $ticketState = $request->get('state', $this->get('translator')->trans('STATUS_OPEN')); + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + + $ticketState = $request->get('state', $this->get('translator')->trans('STATUS_OPEN', [], $translationDomain)); $ticketPriority = $request->get('priority', null); $query = $ticketManager->getTicketListQuery( @@ -48,9 +50,10 @@ public function indexAction(Request $request) return $this->render( $this->container->getParameter('hackzilla_ticket.templates')['index'], [ - 'pagination' => $pagination, - 'ticketState' => $ticketState, - 'ticketPriority' => $ticketPriority, + 'pagination' => $pagination, + 'ticketState' => $ticketState, + 'ticketPriority' => $ticketPriority, + 'translationDomain' => $translationDomain, ] ); } @@ -81,11 +84,14 @@ public function createAction(Request $request) return $this->redirect($this->generateUrl('hackzilla_ticket_show', ['ticketId' => $ticket->getId()])); } + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + return $this->render( $this->container->getParameter('hackzilla_ticket.templates')['new'], [ - 'entity' => $ticket, - 'form' => $form->createView(), + 'entity' => $ticket, + 'form' => $form->createView(), + 'translationDomain' => $translationDomain, ] ); } @@ -100,11 +106,14 @@ public function newAction() $form = $this->createForm(TicketType::class, $entity); + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + return $this->render( $this->container->getParameter('hackzilla_ticket.templates')['new'], [ - 'entity' => $entity, - 'form' => $form->createView(), + 'entity' => $entity, + 'form' => $form->createView(), + 'translationDomain' => $translationDomain, ] ); } @@ -128,7 +137,9 @@ public function showAction($ticketId) $currentUser = $this->getUserManager()->getCurrentUser(); $this->getUserManager()->hasPermission($currentUser, $ticket); - $data = ['ticket' => $ticket]; + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + + $data = ['ticket' => $ticket, 'translationDomain' => $translationDomain]; $message = $ticketManager->createMessage($ticket); @@ -156,8 +167,10 @@ public function replyAction(Request $request, $ticketId) $ticketManager = $this->get('hackzilla_ticket.ticket_manager'); $ticket = $ticketManager->getTicketById($ticketId); + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + if (!$ticket) { - throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY')); + throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY', [], $translationDomain)); } $user = $this->getUserManager()->getCurrentUser(); @@ -176,7 +189,7 @@ public function replyAction(Request $request, $ticketId) return $this->redirect($this->generateUrl('hackzilla_ticket_show', ['ticketId' => $ticket->getId()])); } - $data = ['ticket' => $ticket, 'form' => $form->createView()]; + $data = ['ticket' => $ticket, 'form' => $form->createView(), 'translationDomain' => $translationDomain]; if ($user && $this->get('hackzilla_ticket.user_manager')->hasRole($user, TicketRole::ADMIN)) { $data['delete_form'] = $this->createDeleteForm($ticket->getId())->createView(); @@ -212,7 +225,9 @@ public function deleteAction(Request $request, $ticketId) $ticket = $ticketManager->getTicketById($ticketId); if (!$ticket) { - throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY')); + $translationDomain = $this->getParameter('hackzilla_ticket.translation_domain'); + + throw $this->createNotFoundException($this->get('translator')->trans('ERROR_FIND_TICKET_ENTITY', [], $translationDomain)); } $ticketManager->deleteTicket($ticket); @@ -264,8 +279,6 @@ private function createMessageForm(TicketMessageInterface $message) */ private function getUserManager() { - $userManager = $this->get('hackzilla_ticket.user_manager'); - - return $userManager; + return $this->get('hackzilla_ticket.user_manager'); } } diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index c2fdf204..c4f63254 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -27,6 +27,10 @@ public function getConfigTreeBuilder() $rootNode ->children() + ->enumNode('translation_domain') + ->values(['HackzillaTicketBundle', 'messages']) + ->defaultValue('messages') + ->end() ->scalarNode('user_class')->isRequired()->cannotBeEmpty()->end() ->scalarNode('ticket_class')->cannotBeEmpty()->defaultValue('Hackzilla\Bundle\TicketBundle\Entity\Ticket')->end() ->scalarNode('message_class')->cannotBeEmpty()->defaultValue('Hackzilla\Bundle\TicketBundle\Entity\TicketMessage')->end() diff --git a/DependencyInjection/HackzillaTicketExtension.php b/DependencyInjection/HackzillaTicketExtension.php index 29c98700..5ab6c915 100644 --- a/DependencyInjection/HackzillaTicketExtension.php +++ b/DependencyInjection/HackzillaTicketExtension.php @@ -37,10 +37,30 @@ public function load(array $configs, ContainerBuilder $container) if (!isset($bundles['VichUploaderBundle'])) { $container->removeDefinition('hackzilla_ticket.file_upload_subscriber'); } + + $this->setTranslationDomain($config, $container); } public static function bundleDirectory() { return realpath(__DIR__.'/..'); } + + private function setTranslationDomain(array $config, ContainerBuilder $container) + { + $translationDomain = $config['translation_domain']; + + if ('HackzillaTicketBundle' !== $translationDomain) { + @trigger_error( + 'Omitting the option "hackzilla_ticket.translation_domain" or using other value than "HackzillaTicketBundle" is deprecated since hackzilla/ticket-bundle 3.3.' + .' This option will be removed in version 4.0 and the only supported translation domain will be "HackzillaTicketBundle".', + E_USER_DEPRECATED + ); + } + + $container->setParameter('hackzilla_ticket.translation_domain', $translationDomain); + + $definition = $container->getDefinition('hackzilla_ticket.ticket_manager'); + $definition->addMethodCall('setTranslationDomain', [$translationDomain]); + } } diff --git a/Manager/TicketManager.php b/Manager/TicketManager.php index 0239c7a6..acf5ae67 100644 --- a/Manager/TicketManager.php +++ b/Manager/TicketManager.php @@ -13,6 +13,13 @@ class TicketManager implements TicketManagerInterface { private $translator; + /** + * NEXT_MAJOR: Remove this property and replace its usages with "HackzillaTicketBundle". + * + * @var string + */ + private $translationDomain = 'messages'; + private $objectManager; private $ticketRepository; @@ -61,6 +68,20 @@ public function setTranslator(TranslatorInterface $translator) return $this; } + /** + * NEXT_MAJOR: Remove this method. + * + * @param string $translationDomain + * + * @return $this + */ + public function setTranslationDomain($translationDomain) + { + $this->translationDomain = $translationDomain; + + return $this; + } + /** * Create a new instance of Ticket entity. * @@ -279,7 +300,7 @@ public function getTicketStatus($statusStr) $statuses = []; foreach (TicketMessageInterface::STATUSES as $id => $value) { - $statuses[$id] = $this->translator->trans($value); + $statuses[$id] = $this->translator->trans($value, [], $this->translationDomain); } } @@ -301,7 +322,7 @@ public function getTicketPriority($priorityStr) $priorities = []; foreach (TicketMessageInterface::PRIORITIES as $id => $value) { - $priorities[$id] = $this->translator->trans($value); + $priorities[$id] = $this->translator->trans($value, [], $this->translationDomain); } } diff --git a/Resources/translations/HackzillaTicketBundle.de.xlf b/Resources/translations/HackzillaTicketBundle.de.xlf new file mode 100644 index 00000000..f875b833 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.de.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + geöffnet + + + STATUS_IN_PROGRESS + im Gange + + + STATUS_INFORMATION_REQUESTED + Informationen angefordert + + + STATUS_ON_HOLD + in Wartestellung + + + STATUS_RESOLVED + gelöst + + + STATUS_CLOSED + geschlossen + + + PRIORITY_LOW + gering + + + PRIORITY_MEDIUM + mittel + + + PRIORITY_HIGH + hoch + + + STATUS_INVALID + ungültig + + + PRIORITY_INVALID + ungültig + + + HEADING_SUBJECT + Thema + + + HEADING_STATUS + Zustand + + + HEADING_PRIORITY + Dringlichkeit + + + HEADING_MODIFIED + geändert am + + + HEADING_CREATED + eröffnet am + + + HEADING_TICKET_LIST + Liste der Tickets + + + HEADING_TICKET + Aufgabe + + + HEADING_NEW_TICKET + Neues Ticket + + + HEADING_TICKET_ID + Ticket nº%id% + + + HEADING_TICKET_THREAD + Unterhaltung + + + HEADING_LAST_MESSAGE_BY + Vorige Nachricht von + + + HEADING_LAST_MODIFIED + Vorige Änderung + + + HEADING_AUTHOR + Autor + + + BUTTON_DELETE + löschen + + + BUTTON_BACK_TO_LIST + Zurück zur Liste + + + BUTTON_UPDATE + aktualisieren + + + BUTTON_CREATE + Erstellen + + + BUTTON_NEW + Neues Ticket + + + BUTTON_TOGGLE_STATE + Zeige das Ticket %state%s + + + LABEL_AUTHOR + Autor + + + LABEL_DATE + Datum + + + LABEL_PRIORITY + Dringlichkeit + + + LABEL_STATUS + Zustand + + + LABEL_MESSAGE + Nachricht + + + LABEL_CREATED + erstellt am + + + LABEL_CREATED_BY + erstellt von + + + LABEL_ADMIN + Admin + + + LABEL_MARK_SOLVED + identifizieren als gelöst + + + LABEL_ENTER_DETAILS + Details hinzufügen + + + LABEL_ENTER_SUBJECT + Thema hinzufügen + + + LABEL_SUBJECT + Thema + + + LABEL_DATE_FORMAT + d.m.Y + + + LABEL_DATE_TIME_FORMAT + H:i:s d.m.Y + + + MESSAGE_NO_TICKETS + Kein Ticket gefunden + + + MESSAGE_EMPTY + -- Keine Nachricht -- + + + MESSAGE_TICKET_OPENED + Ticket mit %priority% Dringlichkeit begonnen. + + + MESSAGE_STATUS_CHANGED + Zustand geändert: %status%. + + + MESSAGE_PRIORITY_CHANGED + Dringlichkeit geändert: %priority%. + + + ERROR_FIND_TICKET_ENTITY + Ticket unmöglich zu finden. + + + LABEL_ATTACHMENT + Anhang + + + + diff --git a/Resources/translations/HackzillaTicketBundle.en.xlf b/Resources/translations/HackzillaTicketBundle.en.xlf new file mode 100644 index 00000000..d7fe8330 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.en.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + open + + + STATUS_IN_PROGRESS + in progress + + + STATUS_INFORMATION_REQUESTED + information requested + + + STATUS_ON_HOLD + on hold + + + STATUS_RESOLVED + resolved + + + STATUS_CLOSED + closed + + + PRIORITY_LOW + low + + + PRIORITY_MEDIUM + medium + + + PRIORITY_HIGH + high + + + STATUS_INVALID + invalid + + + PRIORITY_INVALID + invalid + + + HEADING_SUBJECT + Subject + + + HEADING_STATUS + Status + + + HEADING_PRIORITY + Priority + + + HEADING_MODIFIED + Modified + + + HEADING_CREATED + Created + + + HEADING_TICKET_LIST + Ticket list + + + HEADING_TICKET + Ticket + + + HEADING_NEW_TICKET + New Ticket + + + HEADING_TICKET_ID + Ticket #%id% + + + HEADING_TICKET_THREAD + Ticket Thread + + + HEADING_LAST_MESSAGE_BY + Last Message By + + + HEADING_LAST_MODIFIED + Last Modified + + + HEADING_AUTHOR + Author + + + BUTTON_DELETE + Delete + + + BUTTON_BACK_TO_LIST + Back to list + + + BUTTON_UPDATE + Update + + + BUTTON_CREATE + Create + + + BUTTON_NEW + New Ticket + + + BUTTON_TOGGLE_STATE + Show %state% tickets + + + LABEL_AUTHOR + Author + + + LABEL_DATE + Date + + + LABEL_PRIORITY + Priority + + + LABEL_STATUS + Status + + + LABEL_MESSAGE + Message + + + LABEL_CREATED + Created + + + LABEL_CREATED_BY + Created by + + + LABEL_ADMIN + Admin + + + LABEL_MARK_SOLVED + Mark solved + + + LABEL_ENTER_DETAILS + Enter details + + + LABEL_ENTER_SUBJECT + Enter subject + + + LABEL_SUBJECT + Subject + + + LABEL_DATE_FORMAT + m/d/Y + + + LABEL_DATE_TIME_FORMAT + m/d/Y H:i:s + + + MESSAGE_NO_TICKETS + No tickets found + + + MESSAGE_EMPTY + -- Message was empty -- + + + MESSAGE_TICKET_OPENED + Ticket opened with priority: %priority%. + + + MESSAGE_STATUS_CHANGED + Status was changed to %status%. + + + MESSAGE_PRIORITY_CHANGED + Priority was changed to %priority%. + + + ERROR_FIND_TICKET_ENTITY + Unable to find Ticket entity. + + + LABEL_ATTACHMENT + Attachment + + + + diff --git a/Resources/translations/HackzillaTicketBundle.es.xlf b/Resources/translations/HackzillaTicketBundle.es.xlf new file mode 100644 index 00000000..125f548d --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.es.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + Empezado + + + STATUS_IN_PROGRESS + En marcha + + + STATUS_INFORMATION_REQUESTED + Información solicitada + + + STATUS_ON_HOLD + En espera + + + STATUS_RESOLVED + Resuelto + + + STATUS_CLOSED + Terminado + + + PRIORITY_LOW + Baja + + + PRIORITY_MEDIUM + Media + + + PRIORITY_HIGH + Alta + + + STATUS_INVALID + Inválido + + + PRIORITY_INVALID + Inválido + + + HEADING_SUBJECT + Tema + + + HEADING_STATUS + Estado + + + HEADING_PRIORITY + Prioridad + + + HEADING_MODIFIED + Modificado el + + + HEADING_CREATED + Creado el + + + HEADING_TICKET_LIST + Lista de las tareas + + + HEADING_TICKET + Tarea + + + HEADING_NEW_TICKET + Nueva tarea + + + HEADING_TICKET_ID + Tarea nº%id% + + + HEADING_TICKET_THREAD + Diálogo + + + HEADING_LAST_MESSAGE_BY + Último mensaje de parte de + + + HEADING_LAST_MODIFIED + Último modificación de parte de + + + HEADING_AUTHOR + Autor + + + BUTTON_DELETE + Suprimir + + + BUTTON_BACK_TO_LIST + Volver a la lista + + + BUTTON_UPDATE + Actualizar + + + BUTTON_CREATE + Crear + + + BUTTON_NEW + Nueva tarea + + + BUTTON_TOGGLE_STATE + Mostrar las tareas %state%s + + + LABEL_AUTHOR + Autor + + + LABEL_DATE + Fecha + + + LABEL_PRIORITY + Prioridad + + + LABEL_STATUS + Estado + + + LABEL_MESSAGE + Mensaje + + + LABEL_CREATED + Creado el + + + LABEL_CREATED_BY + Creado por + + + LABEL_ADMIN + Administrador + + + LABEL_MARK_SOLVED + Identificar como resuelto + + + LABEL_ENTER_DETAILS + Ingrese algunos detalles + + + LABEL_ENTER_SUBJECT + Ingrese el tema + + + LABEL_SUBJECT + Tema + + + LABEL_DATE_FORMAT + Y/m/d + + + LABEL_DATE_TIME_FORMAT + Y/m/d H:i:s + + + MESSAGE_NO_TICKETS + No hay tareas + + + MESSAGE_EMPTY + -- Mensaje vacío -- + + + MESSAGE_TICKET_OPENED + Tarea creada como %priority% prioridad . + + + MESSAGE_STATUS_CHANGED + Estado modificado: %status%. + + + MESSAGE_PRIORITY_CHANGED + Prioridad modificado: %priority%. + + + ERROR_FIND_TICKET_ENTITY + Ninguna tarea encontrado. + + + LABEL_ATTACHMENT + Adjunto + + + + diff --git a/Resources/translations/HackzillaTicketBundle.fr.xlf b/Resources/translations/HackzillaTicketBundle.fr.xlf new file mode 100644 index 00000000..cc32f293 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.fr.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + ouvert + + + STATUS_IN_PROGRESS + en cours + + + STATUS_INFORMATION_REQUESTED + Informations demandées + + + STATUS_ON_HOLD + en attente + + + STATUS_RESOLVED + résolu + + + STATUS_CLOSED + fermé + + + PRIORITY_LOW + basse + + + PRIORITY_MEDIUM + moyenne + + + PRIORITY_HIGH + haute + + + STATUS_INVALID + nul + + + PRIORITY_INVALID + nul + + + HEADING_SUBJECT + Objet + + + HEADING_STATUS + Condition + + + HEADING_PRIORITY + Priorité + + + HEADING_MODIFIED + Modifié le + + + HEADING_CREATED + Créé le + + + HEADING_TICKET_LIST + Liste des tickets + + + HEADING_TICKET + Ticket + + + HEADING_NEW_TICKET + Nouveau Ticket + + + HEADING_TICKET_ID + Ticket nº%id% + + + HEADING_TICKET_THREAD + Fil de discussion + + + HEADING_LAST_MESSAGE_BY + Dernier message par + + + HEADING_LAST_MODIFIED + Dernière modification + + + HEADING_AUTHOR + Auteur + + + BUTTON_DELETE + Supprimer + + + BUTTON_BACK_TO_LIST + Retour à la liste + + + BUTTON_UPDATE + Mettre à jour + + + BUTTON_CREATE + Créer + + + BUTTON_NEW + Nouveau Ticket + + + BUTTON_TOGGLE_STATE + Montrer les tickets %state%s + + + LABEL_AUTHOR + Auteur + + + LABEL_DATE + Date + + + LABEL_PRIORITY + Priorité + + + LABEL_STATUS + Condition + + + LABEL_MESSAGE + Message + + + LABEL_CREATED + Créé le + + + LABEL_CREATED_BY + Créé par + + + LABEL_ADMIN + Admin + + + LABEL_MARK_SOLVED + Marquer comme résolu + + + LABEL_ENTER_DETAILS + Ajouter des détails + + + LABEL_ENTER_SUBJECT + Entrez objet + + + LABEL_SUBJECT + objet + + + LABEL_DATE_FORMAT + d/m/Y + + + LABEL_DATE_TIME_FORMAT + d/m/Y H:i:s + + + MESSAGE_NO_TICKETS + Aucun ticket trouvé + + + MESSAGE_EMPTY + -- Message vide -- + + + MESSAGE_TICKET_OPENED + Ticket ouvert avec la priorité: %priority%. + + + MESSAGE_STATUS_CHANGED + Condition modifiée pour %status%. + + + MESSAGE_PRIORITY_CHANGED + Priorité modifiée pour %priority%. + + + ERROR_FIND_TICKET_ENTITY + Impossible de recupérer les tickets. + + + LABEL_ATTACHMENT + Pièce jointe + + + + diff --git a/Resources/translations/HackzillaTicketBundle.it.xlf b/Resources/translations/HackzillaTicketBundle.it.xlf new file mode 100644 index 00000000..db95da29 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.it.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + aperto + + + STATUS_IN_PROGRESS + in avanzamento + + + STATUS_INFORMATION_REQUESTED + richieste informazioni + + + STATUS_ON_HOLD + in attesa + + + STATUS_RESOLVED + risolto + + + STATUS_CLOSED + chiuso + + + PRIORITY_LOW + bassa + + + PRIORITY_MEDIUM + media + + + PRIORITY_HIGH + alta + + + STATUS_INVALID + invalido + + + PRIORITY_INVALID + invalida + + + HEADING_SUBJECT + Oggetto + + + HEADING_STATUS + Status + + + HEADING_PRIORITY + Priorità + + + HEADING_MODIFIED + Modificato + + + HEADING_CREATED + Creato + + + HEADING_TICKET_LIST + Lista Ticket + + + HEADING_TICKET + Ticket + + + HEADING_NEW_TICKET + Nuovo Ticket + + + HEADING_TICKET_ID + Ticket #%id% + + + HEADING_TICKET_THREAD + Discussione del Ticket + + + HEADING_LAST_MESSAGE_BY + Ultimo Messaggio Di + + + HEADING_LAST_MODIFIED + Ultima Modifica + + + HEADING_AUTHOR + Autore + + + BUTTON_DELETE + Elimina + + + BUTTON_BACK_TO_LIST + Torna alla lista + + + BUTTON_UPDATE + Aggiorna + + + BUTTON_CREATE + Crea + + + BUTTON_NEW + Nuovo Ticket + + + BUTTON_TOGGLE_STATE + Vedi %state% ticket + + + LABEL_AUTHOR + Autore + + + LABEL_DATE + Data + + + LABEL_PRIORITY + Priorità + + + LABEL_STATUS + Status + + + LABEL_MESSAGE + Messaggio + + + LABEL_CREATED + Creato + + + LABEL_CREATED_BY + Creato da + + + LABEL_ADMIN + Amministratore + + + LABEL_MARK_SOLVED + Segna come risolto + + + LABEL_ENTER_DETAILS + Inserisci i dettagli + + + LABEL_ENTER_SUBJECT + Inserisci l'oggetto + + + LABEL_SUBJECT + Oggetto + + + LABEL_DATE_FORMAT + d/m/Y + + + LABEL_DATE_TIME_FORMAT + d/m/Y H:i:s + + + MESSAGE_NO_TICKETS + Nessun ticket trovato + + + MESSAGE_EMPTY + -- Il messaggio è vuoto -- + + + MESSAGE_TICKET_OPENED + Ticket aperto con priorità: %priority%. + + + MESSAGE_STATUS_CHANGED + Lo status è stato cambiato in %status%. + + + MESSAGE_PRIORITY_CHANGED + La priority è stata cambiata in %priority%. + + + ERROR_FIND_TICKET_ENTITY + Impossible trovare il ticket. + + + LABEL_ATTACHMENT + Allegato + + + + diff --git a/Resources/translations/HackzillaTicketBundle.pt_BR.xlf b/Resources/translations/HackzillaTicketBundle.pt_BR.xlf new file mode 100644 index 00000000..608296c3 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.pt_BR.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + Aberto + + + STATUS_IN_PROGRESS + Em progresso + + + STATUS_INFORMATION_REQUESTED + Informação solicitada + + + STATUS_ON_HOLD + Em espera + + + STATUS_RESOLVED + Resolvido + + + STATUS_CLOSED + Terminado + + + PRIORITY_LOW + Baixo + + + PRIORITY_MEDIUM + Médio + + + PRIORITY_HIGH + Alta + + + STATUS_INVALID + Inválido + + + PRIORITY_INVALID + Inválido + + + HEADING_SUBJECT + Tema + + + HEADING_STATUS + Estado + + + HEADING_PRIORITY + Prioridade + + + HEADING_MODIFIED + Modificado em + + + HEADING_CREATED + Criado em + + + HEADING_TICKET_LIST + Lista de tarefas + + + HEADING_TICKET + Tarefas + + + HEADING_NEW_TICKET + Nova tarefa + + + HEADING_TICKET_ID + Tarefa nº%id% + + + HEADING_TICKET_THREAD + Diálogo + + + HEADING_LAST_MESSAGE_BY + Última mensagem da parte de + + + HEADING_LAST_MODIFIED + Última modificação da parte de + + + HEADING_AUTHOR + Autor + + + BUTTON_DELETE + Deletar + + + BUTTON_BACK_TO_LIST + Voltar a lista + + + BUTTON_UPDATE + Atualizar + + + BUTTON_CREATE + Criar + + + BUTTON_NEW + Novo + + + BUTTON_TOGGLE_STATE + Mostrar as tarefas %state%s + + + LABEL_AUTHOR + Autor + + + LABEL_DATE + Data + + + LABEL_PRIORITY + Prioridade + + + LABEL_STATUS + Estado + + + LABEL_MESSAGE + Mensagem + + + LABEL_CREATED + Criado em + + + LABEL_CREATED_BY + Criado por + + + LABEL_ADMIN + Administrador + + + LABEL_MARK_SOLVED + Identificar como resolvido + + + LABEL_ENTER_DETAILS + Ver mais detalhes + + + LABEL_ENTER_SUBJECT + Entre em um tema + + + LABEL_SUBJECT + Tema + + + LABEL_DATE_FORMAT + d/m/Y + + + LABEL_DATE_TIME_FORMAT + d/m/Y H:i:s + + + MESSAGE_NO_TICKETS + Nenhuma tarefa + + + MESSAGE_EMPTY + -- Mensagem vazia -- + + + MESSAGE_TICKET_OPENED + Tarefa criada como %priority% prioridade. + + + MESSAGE_STATUS_CHANGED + Estado modificado: %status%. + + + MESSAGE_PRIORITY_CHANGED + Prioridade modificada: %priority%. + + + ERROR_FIND_TICKET_ENTITY + Nenhuma tarefa encontrada. + + + LABEL_ATTACHMENT + Anexo + + + + diff --git a/Resources/translations/HackzillaTicketBundle.ru.xlf b/Resources/translations/HackzillaTicketBundle.ru.xlf new file mode 100644 index 00000000..16d66784 --- /dev/null +++ b/Resources/translations/HackzillaTicketBundle.ru.xlf @@ -0,0 +1,211 @@ + + + + + + STATUS_OPEN + Открыто + + + STATUS_IN_PROGRESS + В обработке + + + STATUS_INFORMATION_REQUESTED + Информация запрошена + + + STATUS_ON_HOLD + Заморожено + + + STATUS_RESOLVED + Выполнено + + + STATUS_CLOSED + Закрыто + + + PRIORITY_LOW + Низкий + + + PRIORITY_MEDIUM + Средний + + + PRIORITY_HIGH + Высокий + + + STATUS_INVALID + Неверный статус + + + PRIORITY_INVALID + Неверный приоритет + + + HEADING_SUBJECT + Тема + + + HEADING_STATUS + Статус + + + HEADING_PRIORITY + Приоритет + + + HEADING_MODIFIED + Изменено + + + HEADING_CREATED + Создано + + + HEADING_TICKET_LIST + Список обращений + + + HEADING_TICKET + Ticket + + + HEADING_NEW_TICKET + Новое обращение + + + HEADING_TICKET_ID + Обращение #%id% + + + HEADING_TICKET_THREAD + Сообщения + + + HEADING_LAST_MESSAGE_BY + Последнее сообщение от + + + HEADING_LAST_MODIFIED + Последнее изменение + + + HEADING_AUTHOR + Автор + + + BUTTON_DELETE + Удалить + + + BUTTON_BACK_TO_LIST + Обратно к списку + + + BUTTON_UPDATE + Обновить + + + BUTTON_CREATE + Создать + + + BUTTON_NEW + Новое обращение + + + BUTTON_TOGGLE_STATE + Показать обращения со статусом %state% + + + LABEL_AUTHOR + Автор + + + LABEL_DATE + Дата + + + LABEL_PRIORITY + Приоритет + + + LABEL_STATUS + Статус + + + LABEL_MESSAGE + Сообщение + + + LABEL_CREATED + Создано + + + LABEL_CREATED_BY + Создано + + + LABEL_ADMIN + Администратор + + + LABEL_MARK_SOLVED + Пометить как "решено" + + + LABEL_ENTER_DETAILS + Детали + + + LABEL_ENTER_SUBJECT + Тема обращения + + + LABEL_SUBJECT + Тема + + + LABEL_DATE_FORMAT + Y/m/d + + + LABEL_DATE_TIME_FORMAT + Y/m/d H:i:s + + + MESSAGE_NO_TICKETS + Нет обращений + + + MESSAGE_EMPTY + -- Пустое сообщение -- + + + MESSAGE_TICKET_OPENED + Обращение открыто с приоритетом: %priority%. + + + MESSAGE_STATUS_CHANGED + Статус был изменен на %status%. + + + MESSAGE_PRIORITY_CHANGED + Приоритет был изменен на %priority%. + + + ERROR_FIND_TICKET_ENTITY + Не вышло найти обращение. + + + LABEL_ATTACHMENT + прикрепление + + + + diff --git a/Resources/views/Macros/macros.html.twig b/Resources/views/Macros/macros.html.twig index 84cce4d5..2c8ad990 100644 --- a/Resources/views/Macros/macros.html.twig +++ b/Resources/views/Macros/macros.html.twig @@ -1,4 +1,4 @@ -{% macro status_btn(status, text, small = false) %} +{% macro status_btn(status, text, small = false, translationDomain = 'messages') %} {% spaceless %} {% if status == 10 %} @@ -63,18 +63,18 @@ {% endspaceless %} {% endmacro %} -{% macro priority_alert(priority, text) %} +{% macro priority_alert(priority, text, translationDomain = 'messages') %} {% spaceless %} {% if priority <= 20 %} + role="alert">{{ 'MESSAGE_PRIORITY_CHANGED'|trans({'%priority%': text|upper }, translationDomain|default('messages')) }} {% elseif priority == 21 %} {% else %} {% endif %} {% endspaceless %} diff --git a/Resources/views/Ticket/index.html.twig b/Resources/views/Ticket/index.html.twig index 9d7ccdf6..96255b51 100644 --- a/Resources/views/Ticket/index.html.twig +++ b/Resources/views/Ticket/index.html.twig @@ -2,15 +2,15 @@ {% import hackzilla_ticket.templates.macros as macros %} {% block hackzilla_ticket_content -%} -

{{ 'HEADING_TICKET_LIST'|trans }}

+

{{ 'HEADING_TICKET_LIST'|trans({}, translationDomain|default('messages')) }}

@@ -19,19 +19,19 @@ - {{ 'PRIORITY_HIGH'|trans|upper }} - {{ 'PRIORITY_MEDIUM'|trans|upper }} - {{ 'PRIORITY_LOW'|trans|upper }} + {{ 'PRIORITY_HIGH'|trans({}, translationDomain|default('messages'))|upper }} + {{ 'PRIORITY_MEDIUM'|trans({}, translationDomain|default('messages'))|upper }} + {{ 'PRIORITY_LOW'|trans({}, translationDomain|default('messages'))|upper }}
{{ 'BUTTON_NEW'|trans }} + class="glyphicon glyphicon-plus"> {{ 'BUTTON_NEW'|trans({}, translationDomain|default('messages')) }}
@@ -39,13 +39,13 @@ - - {{ knp_pagination_sortable(pagination, 'HEADING_SUBJECT'|trans, 't.subject') }} - {{ knp_pagination_sortable(pagination, 'HEADING_AUTHOR'|trans, 't.userCreated') }} - {{ knp_pagination_sortable(pagination, 'HEADING_STATUS'|trans, 't.status') }} - {{ knp_pagination_sortable(pagination, 'HEADING_PRIORITY'|trans, 't.priority') }} - {{ knp_pagination_sortable(pagination, 'HEADING_MODIFIED'|trans, 't.lastMessage') }} - {{ knp_pagination_sortable(pagination, 'HEADING_CREATED'|trans, 't.createdAt') }} + + {{ knp_pagination_sortable(pagination, 'HEADING_SUBJECT'|trans({}, translationDomain|default('messages')), 't.subject') }} + {{ knp_pagination_sortable(pagination, 'HEADING_AUTHOR'|trans({}, translationDomain|default('messages')), 't.userCreated') }} + {{ knp_pagination_sortable(pagination, 'HEADING_STATUS'|trans({}, translationDomain|default('messages')), 't.status') }} + {{ knp_pagination_sortable(pagination, 'HEADING_PRIORITY'|trans({}, translationDomain|default('messages')), 't.priority') }} + {{ knp_pagination_sortable(pagination, 'HEADING_MODIFIED'|trans({}, translationDomain|default('messages')), 't.lastMessage') }} + {{ knp_pagination_sortable(pagination, 'HEADING_CREATED'|trans({}, translationDomain|default('messages')), 't.createdAt') }} @@ -54,14 +54,14 @@ - - - - + + + + {% else %} - + {% endfor %} diff --git a/Resources/views/Ticket/new.html.twig b/Resources/views/Ticket/new.html.twig index 757595b5..f8601c82 100644 --- a/Resources/views/Ticket/new.html.twig +++ b/Resources/views/Ticket/new.html.twig @@ -1,7 +1,7 @@ {% extends '@HackzillaTicket/layout.html.twig' %} {% block hackzilla_ticket_content -%} -

{{ 'HEADING_NEW_TICKET'|trans }}

+

{{ 'HEADING_NEW_TICKET'|trans({}, translationDomain|default('messages')) }}

{{ form_start(form, {'method': 'POST', 'action': path('hackzilla_ticket_create')}) }} @@ -23,10 +23,10 @@
- + - {{ 'BUTTON_BACK_TO_LIST'|trans }} + {{ 'BUTTON_BACK_TO_LIST'|trans({}, translationDomain|default('messages')) }}
diff --git a/Resources/views/Ticket/show.html.twig b/Resources/views/Ticket/show.html.twig index aa401ee5..639d2c0d 100644 --- a/Resources/views/Ticket/show.html.twig +++ b/Resources/views/Ticket/show.html.twig @@ -4,48 +4,48 @@ {% block hackzilla_ticket_content -%}

- {{ 'BUTTON_BACK_TO_LIST'|trans }} + {{ 'BUTTON_BACK_TO_LIST'|trans({}, translationDomain|default('messages')) }}

- {{ macros.status_btn(ticket.status, ticket.statusString|trans) }} - {{ macros.priority_btn(ticket.priority, ticket.priorityString|trans) }} + {{ macros.status_btn(ticket.status, ticket.statusString|trans({}, translationDomain|default('messages')), false, translationDomain) }} + {{ macros.priority_btn(ticket.priority, ticket.priorityString|trans({}, translationDomain|default('messages')), false, translationDomain) }} #{{ ticket.id }} - {{ ticket.subject }}

- {{ 'LABEL_CREATED_BY'|trans }} {{ ticket.userCreatedObject }} - , {{ ticket.createdAt|date('LABEL_DATE_FORMAT'|trans) }} - {#
{{ 'LABEL_PRIORITY'|trans }} {{ ticket.priorityString|trans }} #} + {{ 'LABEL_CREATED_BY'|trans({}, translationDomain|default('messages')) }} {{ ticket.userCreatedObject }} + , {{ ticket.createdAt|date('LABEL_DATE_FORMAT'|trans({}, translationDomain|default('messages'))) }} + {#
{{ 'LABEL_PRIORITY'|trans({}, translationDomain|default('messages')) }} {{ ticket.priorityString|trans({}, translationDomain|default('messages')) }} #}

- {#

{{ 'HEADING_TICKET_THREAD'|trans }}

#} + {#

{{ 'HEADING_TICKET_THREAD'|trans({}, translationDomain|default('messages')) }}

#} {% set previousStatus = null %} {% set previousPriority = null %} {% for message in ticket.messages %} {% if previousStatus and previousStatus != message.status %} - {{ macros.status_alert(message.status, message.statusString|trans) }} + {{ macros.status_alert(message.status, message.statusString|trans({}, translationDomain|default('messages')), translationDomain) }} {% endif %} {% if previousPriority and previousPriority != message.priority %} - {{ macros.priority_alert(message.priority, message.priorityString|trans) }} + {{ macros.priority_alert(message.priority, message.priorityString|trans({}, translationDomain|default('messages')), translationDomain) }} {% endif %} {% if message.message|length > 0 %}
{{ message.userObject }} - {#
{{ 'LABEL_PRIORITY'|trans }} {{ message.priorityString|trans }} #} - {#
{{ 'LABEL_STATUS'|trans }} {{ message.statusString|trans }} #} + {#
{{ 'LABEL_PRIORITY'|trans({}, translationDomain|default('messages')) }} {{ message.priorityString|trans({}, translationDomain|default('messages')) }} #} + {#
{{ 'LABEL_STATUS'|trans({}, translationDomain|default('messages')) }} {{ message.statusString|trans({}, translationDomain|default('messages')) }} #} {% if message.userObject != ticket.userCreatedObject %}{{ 'LABEL_ADMIN'|trans }} {% endif %} - {{ message.createdAt|date('LABEL_DATE_TIME_FORMAT'|trans) }} + class="label label-danger">{{ 'LABEL_ADMIN'|trans({}, translationDomain|default('messages')) }} {% endif %} + {{ message.createdAt|date('LABEL_DATE_TIME_FORMAT'|trans({}, translationDomain|default('messages'))) }}
@@ -71,7 +71,7 @@ {{ form_rest(form) }}

- +

{{ form_end(form) }}
@@ -82,7 +82,7 @@ {{ form_widget(delete_form) }} - + {{ form_end(delete_form) }} {% endif %} diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php index 7cb665f6..d14d293b 100644 --- a/Tests/Functional/TestKernel.php +++ b/Tests/Functional/TestKernel.php @@ -121,7 +121,8 @@ protected function configureContainer(ContainerBuilder $c, LoaderInterface $load // HackzillaBundle config $c->loadFromExtension('hackzilla_ticket', [ - 'user_class' => User::class, + 'user_class' => User::class, + 'translation_domain' => 'HackzillaTicketBundle', ]); if ($this->useVichUploaderBundle) { diff --git a/UPGRADE-3.x.md b/UPGRADE-3.x.md index 87814aa3..752ffc04 100644 --- a/UPGRADE-3.x.md +++ b/UPGRADE-3.x.md @@ -1,3 +1,21 @@ +UPGRADE FROM 3.3 to 3.4 +======================= + +## Translation domain + + * Using "messages" translation domain is deprecated in favor of "HackzillaTicketBundle" + in order to allow projects consuming this bundle to override translations in + a proper way. + You should configure "hackzilla_ticket.translation_domain" with the value "HackzillaTicketBundle", + which will be the only allowed value in version 4.0. + +```yml +# packages/hackzilla_ticket.yaml + +hackzilla_ticket: + translation_domain: HackzillaTicketBundle +``` + UPGRADE FROM 3.2 to 3.3 =======================
{{ knp_pagination_sortable(pagination, 'HEADING_TICKET'|trans, 't.id') }}{{ knp_pagination_sortable(pagination, 'HEADING_TICKET'|trans({}, translationDomain|default('messages')), 't.id') }}
{{ entity.id }} {{ entity.subject }} {{ entity.userCreatedObject }}{{ macros.status_btn(entity.status, entity.statusString|trans, true) }}{{ macros.priority_btn(entity.priority, entity.priorityString|trans, true) }}{% if entity.lastMessage %}{{ entity.lastMessage|date('LABEL_DATE_TIME_FORMAT'|trans) }}{% endif %}{% if entity.createdAt %}{{ entity.createdAt|date('LABEL_DATE_TIME_FORMAT'|trans) }}{% endif %}{{ macros.status_btn(entity.status, entity.statusString|trans({}, translationDomain|default('messages')), true, translationDomain) }}{{ macros.priority_btn(entity.priority, entity.priorityString|trans({}, translationDomain|default('messages')), true, translationDomain) }}{% if entity.lastMessage %}{{ entity.lastMessage|date('LABEL_DATE_TIME_FORMAT'|trans({}, translationDomain|default('messages'))) }}{% endif %}{% if entity.createdAt %}{{ entity.createdAt|date('LABEL_DATE_TIME_FORMAT'|trans({}, translationDomain|default('messages'))) }}{% endif %}
{{ 'MESSAGE_NO_TICKETS'|trans }}.{{ 'MESSAGE_NO_TICKETS'|trans({}, translationDomain|default('messages')) }}.