2

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

我决定将Symfony2 Translation 组件(使用 composer)作为供应商导入 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 个条目),每个请求都非常慢。

所以问题是,有没有办法在使用翻译组件时缓存翻译,就像整个 Symfony2 框架本地缓存它一样?

FrameworkBundle 中的Translator 类有一个构造函数,它接受可以定义 cache_dir 的选项。无论如何,我可以使用翻译组件来实现吗?

感谢您在这件事上提供的任何帮助。

4

1 回答 1

2

所以我所做的就是从 xliff 文件生成我自己的缓存,如果它不存在的话,这只不过是作为 php 数组的翻译,并使 Translator Component 将资源加载为 ArrayLoader 而不是 XliffFileLoader。现在快如闪电了。感谢 Touki 在评论中的关注。

于 2013-09-05T09:40:46.840 回答