从Symfony2 Translation组件缓存目录

时间:2013-09-04 13:21:21

标签: caching symfony internationalization fuelphp xliff

我一直试图找出在FuelPHP中处理i18n的另一种方法(见here)。

我决定将Symfony2 Translation component(使用作曲家)导入Fuel作为供应商,并使用xliff文件管理i18n。

这是我的(简化)代码:

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来实现这个目标吗?

感谢您对此事的任何帮助。

1 个答案:

答案 0 :(得分:2)

所以我做的是从xliff文件生成我自己的缓存,如果它不存在,这只不过是作为php数组的翻译,并使转换器组件加载资源作为ArrayLoader而不是XliffFileLoader。现在闪电很快。感谢Touki在评论中感兴趣。