从 Symfony2 翻译组件缓存目录

标签 caching symfony internationalization fuelphp xliff

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

我决定导入 Symfony2 Translation component (使用 Composer )作为供应商提供燃料并使用 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 框架以同样的方式本地缓存它?

Translator Class from the FrameworkBundle有一个接受选项的构造函数,您可以在其中定义cache_dir。无论如何,我可以使用 Translation component 来实现这一点?

感谢您就此事提供的任何帮助。

最佳答案

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

关于从 Symfony2 翻译组件缓存目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18615027/

相关文章:

ios - 从库/缓存加载视频到 View

php - Composer 与私有(private)存储库的多级依赖

ios - ios swift 中的本地化。如何在运行时更改应用程序语言

javascript - 找不到在离线 Web 应用程序中存储用于离线下载的文件的方法

php - magento 客户端被服务器配置拒绝

php - 奇怪的问题,如果登录的话翻译可以工作,如果没有登录则在 Symfony 2.5.6 中不起作用

java - 如何更改 SimpleDateFormat 使用的月份名称的大小写?

c# - 数据库国际化

http - 同时使用 "Expires: 0"、 "no-cache"、 "no-store"、 "max-age=0, must-revalidate"- 有什么用?

php - 如何处理包含 500 多个项目的 Symfony 表单集合