繁体   English   中英

如何在Symfony2中禁用标准翻译加载程序

[英]How to disable standard translation loaders in Symfony2

我在Symfony2中为翻译使用了自定义存储,但是我想确保仅从我的存储而不是从其他来源(例如Yaml文件)加载翻译。 如何禁用标准装载机? 在我的自定义Translator类中,我有以下代码:

   /**
     * {@inheritdoc}
     */
    protected function loadCatalogue($locale)
    {
        $this->initializeCatalogue($locale);
    }

    /**
     * {@inheritdoc}
     */
    protected function initializeCatalogue($locale)
    {
        $this->addLoader('storageLoader', $this->container->get('my.translation.loader'));
        $this->addResource('storageLoader', $this->container->get('storage.getter'), $locale);

        parent::initializeCatalogue($locale);
    }

但是在parent::initializeCatalogue($locale); 它会加载所有标准装载机。 我找到了这篇文章 ,在这里我如何让小伙子只删除缓存文件,以确保翻译仅从数据库中获取,或者我错过了什么?

您缺少在应用程序中禁用标准翻译加载程序的几件事。

注册服务

自定义翻译加载器添加到您的服务中(请记住用您自己的类替换类):

services:
    my.translation.loader.dbext:
        class: YouApp\CommonBundle\Services\MyTranslationLoader
        arguments: [@doctrine.orm.entity_manager]
        tags:
            - { name: translation.loader, alias: dbext}

dbext-是伪造的邮件文件的扩展名(可以随意更改)。 当symfony尝试使用这种扩展名加载文件时,加载器将替换为您的类。

创建虚假消息文件

最后一步是创建那些伪造的message.en.dbext,messages.fr.dbext和其他message。*。dbext文件,与sf2文档中的一样:

如果要从数据库加载翻译,您仍然需要一个资源文件,但是它可能为空,或者包含一些有关从数据库加载这些资源的信息。 该文件是触发自定义加载器上的加载方法的关键。

在这种情况下应该可以为您提供帮助。

编辑:

如果您在服务注册中未使用YAML,则可以使用XML

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service
            id="my.translation.loader.dbext"
            class="YouApp\CommonBundle\Services\MyTranslationLoader">
            <tag name="translation.loader" alias="dbext" />
        </service>
    </services>
</container>

或PHP

$container
    ->register('my.translation.loader.dbext', 'YouApp\CommonBundle\Services\MyTranslationLoader')
    ->addTag('translation.loader', array('alias' => 'dbext'))
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM