gpt4 book ai didi

symfony - 如何从 Symfony4 中的数据库加载翻译?

转载 作者:行者123 更新时间:2023-12-02 17:09:17 25 4
gpt4 key购买 nike

根据 this symfony documentation article应该可以加载您自己的翻译格式。所以我正在尝试从数据库中加载它们。

但无论我如何努力使这项工作成功。它只是没有。

使用数据库加载器是正确的方法还是我应该做其他事情来从数据库加载翻译?

App\Translation\Loader\DatabaseLoader.php:

namespace App\Translation\Loader;

use App\Entity\Translation;
use App\Domain\TranslationManagerInterface;
use Symfony\Component\Translation\Loader\LoaderInterface;
use Symfony\Component\Translation\MessageCatalogue;

/**
* Database Loader
*/
class DatabaseLoader implements LoaderInterface
{
/**
* Translation Manager
*
* @var TranslationManagerInterface
*/
private $_translationManager;

/**
* Constructor
*
* @param TranslationManagerInterface $translationManager
*/
public function __construct(TranslationManagerInterface $translationManager)
{
$this->_translationManager = $translationManager;
}

/**
* {@inheritDoc}
*/
public function load($resource, $locale, $domain = 'general')
{
$translations = $this->_translationManager->findByLocaleAndDomain($locale, $domain);

$catalogue = new MessageCatalogue($locale);

/* @var Translation $translation */
foreach($translations as $translation)
{
$catalogue->set(
$translation->getToken(),
$translation->getContent(),
$translation->getDomain()()
);
}
}
}

config/services.yaml:

# database loader
translation.loader.database:
class: 'App\Translation\Loader\DatabaseLoader'
arguments: [ 'App\Domain\TranslationManager' ]
tags:
- { name: translation.loader, alias: database, priority: 100 }

我什至尝试过在内核请求上使用事件监听器手动将加载器添加到翻译器。我不想使用完整的包,因为我已经有一个充满翻译的数据库

最佳答案

使用 Symfony 4.2.4 测试:也许这个答案来得有点晚,但我想帮助其他和我一样绝望的有同样问题的游客。

  1. 您的类 DatabaseLoader 中有一个小错误。您必须在函数 load() 中返回 $catalogue

    public function load($resource, $locale, $domain = 'general')
    {
    $translations = $this->_translationManager->findByLocaleAndDomain($locale, $domain);

    $catalogue = new MessageCatalogue($locale);

    /* @var Translation $translation */
    foreach($translations as $translation)
    {
    $catalogue->set(
    $translation->getToken(),
    $translation->getContent(),
    $translation->getDomain()()
    );
    }

    // you must return $catalogue here
    return $catalogue;
    }
  2. 您必须创建“假”翻译文件来触发加载程序。看这里: https://stackoverflow.com/a/33300593/6709953

    示例:对于翻译域“messages”和区域设置“en”,必须有一个空文件 translations/messages.en.database

    (小提示:在config/services.yaml中你设置了“alias:database”,这意味着翻译文件的后缀必须是.database)

  3. 如果文件夹 translation/ 中存在旧的竞争翻译文件,您必须删除它们。因此,例如,如果还有文件 translations/messages.en.yaml,您必须将其删除。

关于symfony - 如何从 Symfony4 中的数据库加载翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50117878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com