New in Symfony 5.4: Translation Improvements

Renamed the Translation Update Command

        Contributed by Mathieu Santostefano 
        in #43758.

The well-known translation:update command extracts translatable contents from templates, controllers, and some PHP files. It's useful to automatically create (and update) the translation files of your applications. Although the command "updates" the translation files, its main feature is to "extract" translatable contents. That's why in Symfony 5.4 we've updated its name from translation:update to translation:extract. You can still use the old name, but you should update it as soon as possible because the old name will no longer work in Symfony 6.0.

GitHub Actions Integration

        Contributed by Yannis Foucher 
        in #39828.

The lint:xliff command has added a new github output format so you can see the translation errors properly formatted in the GitHub Actions output. Use the following command to validate your translation files inside GitHub Actions:

    1
    $ php bin/console lint:xliff translations/ --format=github

Translatable Help Messages

        Contributed by Patrick Landolt 
        in #41717.

In Symfony 5.2 we introduced Translatable objects, which include not only the contents to translate but all the information needed to do so (translation parameters, translation domain, etc.) In Symfony 5.4 we're improving Symfony Forms to allow these objects as the help message of form fields too:

    1

2 3 4 5 use Symfony\Component\Translation\TranslatableMessage;

$builder->add('zipCode', null, [ 'help' => new TranslatableMessage('admin.zip_code', ['%current_zip%' => $order->getZipCode()], 'admin'), ]);

Translatable Parameters in Translatable Objects

        Contributed by kylekatarnls 
        in #41858.

Another improvement related to Translatable objects is that parameters can now also be translatable. This may sound confusing, but consider the following message:

    1

2 3 // message 'invoice.status' (English) 'This invoice is in "%status%" status' (Spanish) 'El estado de la factura es "%status%"'

In addition to translating the entire message, the %status% parameter must be translated as well. In Symfony 5.4 you can solve that by making the parameter a TranslatableMessage object:

    1

2 3 4 5 $message = new TranslatableMessage('invoice.status', ['%status%' => new TranslatableMessage('status.draft')]); echo $message->trans($translator, 'en'); // This invoice is in "draft" status echo $message->trans($translator, 'es'); // El estado de la factura es "borrador"

                Sponsor the Symfony project.

https://symfony.com/blog/new-in-symfony-5-4-translation-improvements?utm_source=Symfony%20Blog%20Feed&utm_medium=feed

Created 4y | Nov 19, 2021, 10:20:10 AM


Login to add comment

Other posts in this group

A Week of Symfony #973 (August 18–24, 2025)

This week, Symfony development focused on improving the IsGranted attribute with a new option, updated the Route attribute to allow setting multiple environments, improved the DomCrawler component to

Aug 24, 2025, 9:40:28 AM | Symfony
A Week of Symfony #972 (August 11–17, 2025)

This week, development activity mostly focused on dealing with the deprecation of sleep/wakeup methods in PHP 8.5 and their replacement by serialize/unserialize methods. In addition, we published more

Aug 17, 2025, 8:30:06 AM | Symfony
Let’s build the Symfony AI ecosystem together

It’s been only in July that we published symfony/ai and kicked off our AI initiative, but the repository has been busy since day one. Over 500 stars, more than 200 pull requests & issues, trending

Aug 16, 2025, 9:30:03 AM | Symfony
SymfonyCon Amsterdam 2025:   Unconference Track at SymfonyCon Amsterdam 2025

🎤 Take the stage at SymfonyCon Amsterdam 2025, on your own terms!

The Unconference track is back and more dynamic than ever!

This unique, participant-driven format invites attendees to shape

Aug 12, 2025, 12:40:20 PM | Symfony
A Week of Symfony #971 (August 4–10, 2025)

This week, Symfony completed the migration to PHPUnit 12 in the 7.4 branch, which required many changes during the past weeks, such as replacing annotations with attributes. In addition, we updated th

Aug 10, 2025, 9:40:09 AM | Symfony
SymfonyCon Amsterdam 2025:  Join the Symfony Hackathon:  Collaborate, Contribute, Create

🧑‍💻HACKDAY IS COMING!

Get ready to code, collaborate, and contribute, Symfony Hackday is back!

Join us in Amsterdam on Saturday, November 29th, for a hands-on hackathon designed to bring the

Aug 6, 2025, 10:40:04 AM | Symfony
A Week of Symfony #970 (July 28 – August 3, 2025)

This week, Symfony released the maintenance versions 6.4.24, 7.2.9, and 7.3.2. Meanwhile, we began deprecating the XML configuration format in some components, enhanced the YAML configuration format t

Aug 3, 2025, 8:30:03 AM | Symfony