Основными языками, используемыми в Интернете являются английский (800 миллионов пользователей), китайский (650000000), испанский (220 000 000) и арабский (135 миллионов). Поскольку компании становятся более интернациональными, вполне закономерно, что мы должны развивать многоязычность веб-сайтов и приложений. Хорошей новостью является то, что Symfony 2.6 будет включать в себя некоторые улучшения для компонента перевода.
Добавлен целевой язык, для демпинга XLIFF файла
При выполнении перевода: команда обновления генерировала XLIFF файлы, предыдущие версии Symfony не указывали правильное значение для целевого языка:
$ console translation:update --force --output-format=xlf fr AcmeBundle
Результатом выполнения этой команды был файл XLIFF без атрибута целевого языка:
<file source-language="fr" ... >
Symfony 2.6 будет правильно установить как атрибут исходного языка, так и целевого языка:
<file source-language="en_US" target-language="fr_FR" ... >
Кроме того, эти атрибуты будут теперь использовать правильные значения локалей (например fr_FR вместо fr и en_US вместо us).
Добавлен метод отображения накопленных сообщений
В случае, если вы хотите использовать тот же каталог перевода за пределами вашего приложения (например, использование перевода на стороне клиента), Symfony 2.6 позволяет получить необработанный перевод для данной локали.
$messages = $translator->getMessages('fr_FR');
Структурой переменной $messages будет следующий массив:
array( 'messages' => array( 'Hello world' => 'Bonjour tout le monde', ), 'validators' => array( 'Value should not be empty' => 'Valeur ne doit pas être vide', 'Value is too long' => 'Valeur est trop long', ), );
Перемещен кэш перевода для компонента Translation
Вообще говоря, кэширование в Symfony происходит внутри компонентов. Однако компонент Translation используется FrameworkBundle чтобы кэшировать его каталоги. Это сделало кэшированные переводы трудно интегрируемыми вне Symfony, например в проектах Silex.
В Symfony 2.6, сигнатура конструктора Translation изменилось получив третий дополнительный параметр, который задает каталог, в котором сообщение каталогизируются и кэшируются:
use Symfony\Component\Translation\Translator; use Symfony\Component\Translation\MessageSelector; // Symfony 2.5 $translator = new Translator('fr_FR', new MessageSelector()); // Symfony 2.6 without caching enabled $translator = new Translator('fr_FR', new MessageSelector()); // Symfony 2.6 with caching enabled $translator = new Translator('fr_FR', new MessageSelector(), __DIR__.'/../cache');
Регистрация отсутствующих переводов
Одна из важнейших задач интернационализации приложений, это обнаружения всех недостающих переводов для данной локали. В Symfony 2.6 эту задачу решить будет гораздо проще благодаря новой опции — журналирования (его значение по умолчанию указано в % kernel.debug%):
translator: enabled: true fallback: en logging: true
Если установлено значение true то, всякий раз, когда Symfony не будет находить перевод для данной локали, запись о недостающем переводе будет добавляться в лог-файл.
Источник: http://symfony.com/blog/new-in-symfony-2-6-improvements-for-the-translation-component