我发现我忘了在翻译文件中添加一些翻译(我在项目中使用了yaml)。不知何故需要找出那些并添加他们的翻译,但手动这样做是相当麻烦的。我想知道是否有更简单,更快捷的方法来完成这项任务。
答案 0 :(得分:1)
您应该安装JMSTranslationBundle:
此捆绑包将Symfony翻译组件置于类固醇上。虽然Translation组件经过高度优化以减少代码的运行时开销,但它缺少一些针对翻译器的功能。此捆绑包的目的是使网站翻译更容易,同时仍保留当前所有的性能优化。
主要功能包括:
- 允许开发人员为翻译ID添加额外的上下文,以帮助翻译人员找到最佳翻译
- 优化的转储命令(更好的格式,翻译的更多信息,标记新消息)
- 优化的搜索算法(更快,更可靠地发现消息)
- 可以提取包的消息,您的应用程序(包)提取配置可以通过
进行设置- 配置以避免必须重新键入许多命令行参数/选项
- 基于网络的用户界面,可以更轻松地翻译消息
醇>
答案 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" ]