Для получения поддержки XLIFF / 2 в PHP в другом ответе было предложено использовать компонент Symfony 2 Translation.
Поэтому я загрузил его из Github в каталог ../vendor/
и наивно пытался его использовать:
<?php require_once '../vendor/Symfony/Component/Translation/Translator.php'; require_once '../vendor/Symfony/Component/Translation/MessageSelector.php'; require_once '../vendor/Symfony/Component/Translation/Loader/ArrayLoader.php'; use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\MessageSelector; use Symfony\Component\Translation\Loader\ArrayLoader; $translator = new Translator('fr_FR', new MessageSelector());
Это не работает, поскольку необходимо загрузить другие компоненты:
PHP Fatal error: Interface 'Symfony\\Component\\Translation\\TranslatorInterface' not found in /home/ec2-user/layout/vendor/Symfony/Component/Translation/Translator.php on line 25
Теперь я могу вручную добавить require_once
для каждого файла, пока все зависимости не будут выполнены, но я не уверен, что это правильный подход.
Как использовать один компонент Symfony 2 в проекте, отличном от Symfony? Это плохая идея?
Управляйте своими зависимостями с композитором .
Сначала создайте файл composer.json
в папке проекта:
{ "require": { "symfony/translation": "2.4.*" } }
Затем загрузите композитор и запустите его:
wget http://getcomposer.org/composer.phar php composer.phar install
Теперь вы можете использовать свой компонент, импортировав автозагрузчик композитора:
<?php require_once('vendor/autoload.php'); use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\MessageSelector; use Symfony\Component\Translation\Loader\ArrayLoader; $translator = new Translator('fr_FR', new MessageSelector()); $translator->setFallbackLocales(array('fr')); $translator->addLoader('array', new ArrayLoader()); $translator->addResource('array', array( 'Hello World!' => 'Bonjour', ), 'fr'); echo $translator->trans('Hello World!')."\n";
Как использовать Composer для управления вашими зависимостями.
Дело здесь в том, что он также управляет автозагрузкой,
Из документации ,
Автозагрузка #
Помимо загрузки библиотеки Composer также готовит файл автозагрузки, способный автоматически загружать все классы в любую из загружаемых им библиотек. Чтобы использовать его, просто добавьте следующую строку в процесс начальной загрузки кода:
require 'vendor/autoload.php';