Список непереведенных сообщений / записей в Symfony2 - PullRequest
0 голосов
/ 28 декабря 2011

Я обнаружил, что забыл добавить некоторые переводы в файл переводов (я использую yaml в своем проекте).Каким-то образом нужно выяснить это и добавить их переводы, но делать это вручную довольно сложно.Интересно, есть ли более простой и быстрый способ выполнить такую ​​задачу?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Вы должны установить JMSTranslationBundle :

Обзор

Этот пакет помещает компонент перевода Symfony на стероиды.Несмотря на то, что компонент Translation сильно оптимизирован для сокращения времени выполнения вашего кода, в нем отсутствуют некоторые функции для переводчиков.Целью этого пакета является облегчение перевода сайта при сохранении всех текущих оптимизаций производительности.

Основные функции включают в себя:

  1. позволяет разработчикам добавлять дополнительныеконтекст для идентификаторов перевода, чтобы помочь переводчикам в поиске наилучшего возможного перевода
  2. оптимизированные команды дампа (более приятное форматирование, больше информации для переводчиков, помечает новые сообщения)
  3. оптимизированный алгоритм поиска (сообщения обнаруживаются быстрее,и более надежно)
  4. может извлекать сообщения для пакетов, а ваши конфигурации извлечения приложений (пакетов) можно настроить с помощью конфигурации
  5. , чтобы избежать необходимости повторного ввода многих аргументов / опций командной строки
  6. Веб-интерфейс для упрощенного перевода сообщений
0 голосов
/ 23 апреля 2017

Вы не можете найти все непереведенные сообщения с JMSTranslationBundle. Он использует стандартный способ Symfony, чтобы найти их. Чтобы найти все, вам нужно прикрепить сервис к логгеру. Таким образом, вы можете записать непереведенные ключи в базу данных.

Я думаю, это работает только в среде разработки.

<?php

namespace AppBundle\Service;

use AppBundle\Entity\Translation;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Monolog\Handler\AbstractProcessingHandler;

class TranslationLogger extends AbstractProcessingHandler
{
    protected $container;

    public function __construct (ContainerInterface $container)
    {

        $this->container = $container;
    }

    protected function write (array $record)
    {
        if ($record['channel'] === 'translation')
        {
            $em = $this->container->get('doctrine.orm.default_entity_manager');
            $check = $em->getRepository('AppBundle:Translation')->findBy([ 'transKey' => $record['context']['id'] ]);

            if (!$check)
            {
                $new = new Translation;
                $new->setTransKey($record['context']['id']);
                $em->persist($new);
                $em->flush();
            }
        }

    }
}

services.yml:

services:
    appbundle.translation_logger:
        class: AppBundle\Service\TranslationLogger
        arguments: [ "@service_container" ]
...