Новое в Symfony 5.1: Улучшение перевода

Возможность настраивать включенных локалей

Большинство приложений Symfony доступны на одном или нескольких языках. Однако Symfony создает файлы перевода для сообщений проверки и безопасности на всех языках.

Другими словами, Symfony генерирует десятки (небольших) файлов перевода, которые ваше приложение никогда не будет использовать. В Symfony 5.1 ввели опцию enabled_locales для управления этим поведением:

# config/packages/translation.yaml
framework:
    translation:
        enabled_locales: ['en', 'fr']

Этот конфиг сообщает Symfony, что приложение доступно только на английском и французском языках, поэтому это будут единственные файлы, созданные Symfony. Это может немного улучшить производительность.

Эта опция разблокирует другие оптимизации, такие как #35590, предоставленные Николасом Грекасом, который использует его для ограничения возможных значений значения по умолчанию параметра _locale в routes.

Улучшена команда отладки перевода

Команда debug:translation помогает найти пропущенные или неиспользуемые сообщения перевода в ваших приложениях Symfony. В Symfony 5.1 улучшили команду для возврата разных кодов выхода в зависимости от найденных проблем.

Например, в предыдущих версиях Symfony команда возвращала 1, когда возникла проблема. В Symfony 5.1, если отсутствуют пропущенные переводы, он возвращает значение, сохраненное в TranslationDebugCommand::EXIT_CODE_MISSING, если есть неиспользуемые переводы, он возвращает TranslationDebugCommand::EXIT_CODE_UNUSED и т. д.

Вы также можете объединить эти значения для проверки нескольких проблем:

use Symfony\Bundle\FrameworkBundle\Command\TranslationDebugCommand;

if (TranslationDebugCommand::EXIT_CODE_MISSING | TranslationDebugCommand::EXIT_CODE_UNUSED) {
    // ... there are missing and/or unused translations
}

Добавлена поддержка атрибутов имени в Xliff2

При использовании XLIFF2 для управления вашими переводами обычно используется исходный контент в качестве ключа перевода. В Symfony 5.1 добавили поддержку использования атрибута name, если он определен:

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en-US">
    <file id="f1" original="Graphic Example.psd">
        <unit id="1" name="the_translation_key">
            <segment>
                <source />The original content
                <target>The translated content</target>
            </segment>
        </unit>
        <!-- ... -->
    </file>
</xliff>

Разрешить переводить названия языков

В многоязычных приложениях обычно перечисляются доступные языки, переведенные на текущий язык. Например, выведите «English, Spanish, Japanse и т. д.» при просмотре приложения на английском языке и отображении «anglais, espagnol, japonais, и т. д.» при просмотре приложения на французском языке.

Однако другие многоязычные приложения предпочитают отображать каждый язык, переведенный на свой собственный язык (например, «English, Español, 日本語, и т. д.»), Независимо от текущей локали приложения. В Symfony 5.1 добавили новую опцию choice_self_translation в поле формы LanguageType, чтобы включить это.