2013-09-04 3 views
2

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

Я решил импортировать Symfony2 Translation component (используя композитор) в 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 записей) для всего моего приложения, каждый запрос выполняется очень медленно.

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

Translator Class from the FrameworkBundle имеет конструктор, который принимает параметры, в которых вы можете определить cache_dir. Во всяком случае, я могу достичь этого, используя Translation component?

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

+0

Есть ли что-то неправильное с использованием класса Translator из FrameworkBundle? Я имею в виду, копируя метод loadCatalogue в соответствии с вашими потребностями? – Touki

+0

Класс Translator из FrameworkBundle предназначен для использования в рамках Symfony Framework. Конструктор ожидает контейнерный интерфейс. Но да, я думаю, я попытаюсь сгенерировать свой собственный файл кеша php, чтобы компонент Translator мог использовать его, когда файл существует. – SebScoFr

+1

Я имею в виду, вы должны создать своего собственного переводчика. Вам не нужно копировать часть конструктора, просто приспосабливайте его к вашим потребностям. Вы также можете использовать компонент 'Config \ ConfigCache' – Touki

ответ

2

Так что я сделал, чтобы создать собственный кеш из xliff-файлов, если он не существует, что является не чем иным, как переводами как php-массивом и делает ресурсы Loader Component Load как ArrayLoader вместо XliffFileLoader. Сейчас молниеносно. Спасибо Туки в комментариях за ваш интерес.

Смежные вопросы