Новое в Symfony 2.8: Улучшение сервиса Переводчика

  • Добавлена поддержка XLIFF 2.0
  • Возможность дампить каталоги переводов
  • Добавлена опция, позволяющая указать дополнительные пути загрузки файла перевода.

Добавлена поддержка XLIFF 2.0

XLIFF это формат, с помощью Symfony рекомендуется создавать файлы перевода, используемые для интернационализации веб-сайтов и приложений. До Symfony 2.8, единственной версией XLIFF поддерживаемой Symfony был 1.2, эта версия, которая вышла еще феврале 2008 года.

Начиная с Symfony 2.8, мы также поддерживаем XLIFF 2.0, это самая последняя версия стандарта, опубликована в августе 2014 г. С учетом сложности стандарта XLIFF, мы  поддерживаем только подмножество функции, позволяющих анализировать и дампить XLIFF 2.0 файлы.

При демпе каталога перевода, используйте новый параметр версии XLIFF, чтобы установить версию XLIFF 2,0. В противном случае она будет установлена по умолчанию, как XLIFF 1.2:

use Symfony\Component\Translation\MessageCatalogue;
use Symfony\Component\Translation\Dumper\XliffFileDumper;

$catalogue = new MessageCatalogue('en_US');
$catalogue->add([
    'foo' => 'bar',
]);

// ...

$dumper = new XliffFileDumper();
$dumper->dump($catalogue, ['xliff_version' => '2.0', ...]);

При загрузке каталогов, Symfony определяет версию автоматически, поэтому вам просто нужно создать файл XLIFF, используя формат 2.0:

<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0"
       version="2.0" srcLang="en-US" trgLang="ja-JP">
    <file id="f1" original="Graphic Example.psd">
        <skeleton href="Graphic Example.psd.skl"/>
        <group id="1">
            <unit id="1">
                <segment>
                    <source>foo</source>
                    <target>XLIFF 文書を編集、または処理 するアプリケーションです。</target>
                </segment>
            </unit>
        </group>
    </file>
</xliff>

Возможность дампить каталоги переводов

В Symfony 2.7 и предыдущих версиях, когда вы хотели преобразовать каталог перевода в некотором формате (например YAML), вам необходимо сдампить его содержимое в файл и затем уже читать из этого файла.

В Symfony 2.8, FileDumper включает в себя метод formatCatalogue(), который преобразует содержимое каталога в заданном формате и возвращает результат:

use Symfony\Component\Translation\MessageCatalogue;
use Symfony\Component\Translation\Dumper\YamlFileDumper;

$catalogue = new MessageCatalogue('en');
$catalogue->add(
    'foo.bar' => 'value',
));

// BEFORE
$dumper = new YamlFileDumper();
$tempDir = sys_get_temp_dir();
$dumper->dump($catalogue, ['path' => $tempDir, 'as_tree' => true, 'inline' => 999]);
$formattedCatalogue = file_get_contents($tempDir);

// AFTER
$formattedCatalogue = $dumper->formatCatalogue(
    $catalogue, 'messages', ['as_tree' => true, 'inline' => 999]
);

Добавлена опция, позволяющая указать дополнительные пути загрузки файла перевода.

В приложениях Symfonyзадание имен файлов перевода и мест их нахождения подчиняется строгим правилам. Если вам необходимо загрузить файлы из других мест, возможно, потребуется compiler pass, чтобы указать сервису переводчика где находятся ваши файлы.

В Symfony 2.8, служба translator получила новую опцию под названием paths, которая позволяет определить массив путей, где компонент должен искать файлы перевода:

# app/config/config.yml
translator:
    fallback: "%locale%"
    paths: ['%kernel.root_dir%/../vendor/internal/package/translations']

Источник: http://symfony.com/blog/new-in-symfony-2-8-translator-improvements

 

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

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

11 + два =