Symfony 4 部署后找不到翻译文件

Posted

技术标签:

【中文标题】Symfony 4 部署后找不到翻译文件【英文标题】:Symfony 4 does not find translation files after deploy 【发布时间】:2021-10-08 12:44:08 【问题描述】:

我们已将 Symfony 4.4 配置为使用翻译,并且在本地一切似乎都运行良好。我可以更改语言,找到翻译文件,整个过程就像一个魅力。但是在部署完所有字符串后是翻译的关键,而不是我们添加到系统中的自定义翻译。 我们使用 docker 和 k8s 进行部署,因此一切都运行在与本地相同的版本和相同的容器上。

这里还有翻译的配置: Translations.yaml

parameters:
    locale: 'sv'
    app_locales: 'sv|en'
framework:
    default_locale: 'sv'
    translator:
        default_path: '%kernel.project_dir%/translations'
        fallbacks:
            - 'sv'

这里是事件订阅者:

<?php
namespace App\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class LocaleSubscriber implements EventSubscriberInterface

    private $defaultLocale;

    public function __construct(string $defaultLocale = 'sv')
    
        $this->defaultLocale = $defaultLocale;
    

    public function onKernelRequest(RequestEvent $event)
    
        $request = $event->getRequest();
        $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
    

    public static function getSubscribedEvents()
    
        return [
            // must be registered before (i.e. with a higher priority than) the default Locale listener
            KernelEvents::REQUEST => [['onKernelRequest', 101]],
        ];
    

发生的情况是,标题上有一个标志,其作用类似于切换,启动一个更改区域设置会话值的方法,然后此事件订阅者从请求之前的会话中选择它并加载翻译。

【问题讨论】:

【参考方案1】:

问题是因为 dockerfile 中没有命令将翻译目录(翻译所在的位置)复制到容器中。 将此命令添加到 Dockerfile 就可以了:

COPY /translations /symfony/translations

【讨论】:

以上是关于Symfony 4 部署后找不到翻译文件的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2翻译 - 在生成的YML文件和其他问题中双重下划线

部署到 Azure 应用服务后找不到我的 repo 文件

Symfony2 长文本翻译

在Composer更新后找不到Symfony AbstractController

翻译后的占位符值未拉入 Symfony 4 表单字段

如何使用 messages.en.yml 翻译 symfony2 形式的标签?