Symfony2中未翻译的消息/条目列表

时间:2011-12-28 04:26:45

标签: symfony translation yaml

我发现我忘了在翻译文件中添加一些翻译(我在项目中使用了yaml)。不知何故需要找出那些并添加他们的翻译,但手动这样做是相当麻烦的。我想知道是否有更简单,更快捷的方法来完成这项任务。

2 个答案:

答案 0 :(得分:1)

您应该安装JMSTranslationBundle

概述

  

此捆绑包将Symfony翻译组件置于类固醇上。虽然Translation组件经过高度优化以减少代码的运行时开销,但它缺少一些针对翻译器的功能。此捆绑包的目的是使网站翻译更容易,同时仍保留当前所有的性能优化。

     

主要功能包括:

     
      
  1. 允许开发人员为翻译ID添加额外的上下文,以帮助翻译人员找到最佳翻译
  2.   
  3. 优化的转储命令(更好的格式,翻译的更多信息,标记新消息)
  4.   
  5. 优化的搜索算法(更快,更可靠地发现消息)
  6.   
  7. 可以提取包的消息,您的应用程序(包)提取配置可以通过
  8. 进行设置   
  9. 配置以避免必须重新键入许多命令行参数/选项
  10.   
  11. 基于网络的用户界面,可以更轻松地翻译消息
  12.   

答案 1 :(得分:0)

您无法使用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" ]