3

独自の翻訳ローダーを実装する必要があります。http://blog.elendev.com/development/php/symfony/use-a-database-as-translation-provider-in-symfony-2/のチュートリアルを使用して 、独自の翻訳ローダーを実装しました。

コードでエラーが発生することはありませんが、ローダーのロード関数が実行されることはありません。

どの翻訳を実行すべきかをsymfonyに伝える方法はありますか?

config.yml

    translation.loader.db:
    class: Mysk\TranslationBundle\Services\DBLoader
    arguments: ["@doctrine.orm.entity_manager"]
    tags:
        - { name: translation.loader, alias: db}

DBLoader.php

class DBLoader implements LoaderInterface {

private $transaltionRepository;
private $languageRepository;

/**
 * @param EntityManager $entityManager
 */
public function __construct(EntityManager $entityManager){
    $this->transaltionRepository = $entityManager->getRepository("MyskTranslationBundle:LanguageTranslation");
    $this->languageRepository = $entityManager->getRepository("MyskTranslationBundle:Language");
    echo "yeah";
}

function load($resource, $locale, $domain = 'messages'){
    die();
    //Load on the db for the specified local
    $language = $this->languageRepository->getLanguage($locale);
    $translations = $this->transaltionRepository->getTranslations($language, $domain);
    $catalogue = new MessageCatalogue($locale);

    foreach($translations as $translation){
        $catalogue->set($translation->getLanguageToken()->getToken(), $translation->getTranslation(), $domain);
    }

    return $catalogue;
}}

何か案は?

乾杯ティモ

4

2 に答える 2

9

アルドはすでにこれに答えましたが、それを公式の答えにし、他の人を助けるためだけです:

ローダーをトリガーするには、「偽の」翻訳ファイルを作成する必要があります

Symfony 依存性注入タグから: "translation.loader"

[...] データベースから翻訳をロードする場合でも、リソース ファイルが必要ですが、空白であるか、データベースからのリソースのロードに関する情報が少し含まれている可能性があります。このファイルは、カスタム ローダーでロード メソッドをトリガーするための鍵となります。

<domain>.<locale>.<loader-alias>そのため、翻訳フォルダにフォームのファイルをクレートする必要がありますapp/Resources/translations/

あなたの場合、1つのファイルはapp/Resources/translations/messages.en.db英語用です。

于 2015-10-23T10:52:39.627 に答える