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 が XliffFileLoader ではなく ArrayLoader としてリソースをロードするようにしました。今は電光石火の速さです。興味を持ってくれたコメントで Touki に感謝します。

于 2013-09-05T09:40:46.840 に答える