Возможность настраивать включенных локалей
Большинство приложений 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
, чтобы включить это.