Кеширование каталогов из компонента перевода Symfony2

Я пытался найти другой способ обработки i18n в FuelPHP (см. здесь) .

Я решил импортировать компонент перевода Symfony2 (с помощью композитора) в Fuel в качестве поставщика и управлять i18n с помощью xliff. файлы.

Вот мой (упрощенный) код:

use \Symfony\Component\Translation\Translator;
use \Symfony\Component\Translation\MessageSelector;
use \Symfony\Component\Translation\Loader\XliffFileLoader;

...

class I18N
{

    private static $translator = NULL;

    ....

    public static function get($key)
    {
        # Load and configure the translator
        self::$translator = new Translator('en_GB', new MessageSelector());
        self::$translator->addLoader('xliff', new XliffFileLoader());
        self::$translator->addResource('xliff', 'path/to/xliff/file', 'en');

        # Get the translation
        $translation = self::$translator->trans($key, $params);

        # Return the translation
        return $translation;
    }

}

Итак, сначала я подумал, что это отлично работает, так как я тестировал его на очень маленьком файле xliff, но теперь, когда я сгенерировал полный каталог xliff (около 1400 записей) для всего моего приложения, каждый запрос выполняется очень медленно.

Итак, вопрос в том, есть ли способ кэшировать переводы при использовании компонента перевода таким же образом, как и весь Symfony2 Framework кеширует его изначально?

Класс переводчика из FrameworkBundle имеет конструктор, который принимает параметры в котором вы можете определить cache_dir. В любом случае я могу добиться этого с помощью компонента перевода?

Спасибо за любую помощь в этом вопросе.


person SebScoFr    schedule 04.09.2013    source источник
comment
Что-то не так с использованием класса Translator из FrameworkBundle? Я имею в виду копирование метода loadCatalogue под свои нужды?   -  person Touki    schedule 04.09.2013
comment
Класс Translator из FrameworkBundle предназначен для использования в Symfony Framework. Его конструктор ожидает интерфейс контейнера. Но да, я думаю, я собираюсь попытаться сгенерировать свой собственный файл кэша php, чтобы компонент Translator мог использовать его, когда файл существует.   -  person SebScoFr    schedule 05.09.2013
comment
Я имею в виду, вы должны создать свой собственный переводчик. Вам не нужно копировать конструктор, просто адаптируйте его под свои нужды. Вы также можете использовать компонент Config\ConfigCache   -  person Touki    schedule 05.09.2013
comment
Именно то, что я сделал, и сейчас работает как шарм.   -  person SebScoFr    schedule 05.09.2013


Ответы (1)


Итак, что я сделал, так это сгенерировал свой собственный кеш из файлов xliff, если он не существует, что представляет собой не что иное, как переводы в виде массива php и заставил компонент переводчика загружать ресурсы как ArrayLoader вместо XliffFileLoader. Сейчас это молниеносно. Спасибо Touki в комментариях за проявленный интерес.

person SebScoFr    schedule 05.09.2013