Новые в Symfony 2.6: Улучшения для компонента перевода

Основными языками, используемыми в Интернете являются английский (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

Добавить комментарий

Ваш адрес email не будет опубликован.

14 − 10 =