私は、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 を定義できるオプションを受け入れるコンストラクターがあります。とにかく、翻訳コンポーネントを使用してそれを達成できますか?
その問題について助けてくれてありがとう。