首页 > 解决方案 > 翻译加载器的优先级

问题描述

我使用 2 种不同的加载器进行 symfony 翻译:

第一个加载器用于开发人员目的(当代码显示在 localhost 中时进行翻译,而无需维护数据库)。第二个是用于舞台/生产环境。基本上,PO 正在使用这个解决方案,开发人员不必为了更改一两个翻译而触发所有 CI/CD 流程。

所以,我们在两个加载器中有相同的键。如果表中存在翻译键,我希望数据库Loader优先显示,否则yaml Loader带头。

不幸的是,我可以显示某些键的数据库翻译,但是,由于我有多个用于翻译的 yaml 文件,其中一些不会被覆盖。

是否可以在 Symfony 4 中设置默认加载器或定义优先级?如果是,如何?

如果不是,我们是否可以轻松地强制按特定顺序加载所有翻译文件,以确保最后加载的文件是 db 文件?

标签: symfonysymfony4symfony-translator

解决方案


您有多种可能性:

  • 您的自定义加载程序可以具有优先级(更高意味着它更早调用)。当您的数据库服务应该是最后一个时,将其设置为负数:

    # config/services.yaml
    services:
      App\CustomTranslator:
        tags:
           - { name: 'translation.loader', priority: -100 }
    
  • 实现一个装饰服务的新\Symfony\Contracts\Translation\TranslatorInterface服务。在这个新服务中,覆盖doLoadCatalogue. 该函数负责从配置的加载器加载所有数据。在覆盖的函数中,您可以完全自定义逻辑。


推荐阅读