TL;DR: Ça s’écrit comme les f-string, mais ce n’est pas transformé en chaîne sur place : ça vaut une instance d’une nouvelle classe, Template, qui représente la chaîne.
C’est génial pour gettext, car, sans les t-strings :
name = "John"
_(f"Hello {name}")
ne pouvait pas marcher, _ recevait la chaîne Hello John qui n’est évidemment pas dans le fichier de traductions. C’est triste, mais c’est donc soit f-strings, soit i18n, pas les deux, on en était réduits à :
Enfin \o/
Ça fait un moment que je suivais la PEP 501, je suis content d’apprendre que c’est finalement la 750 qui mettra en place cette fonctionnalité.
Et je suis très content d’apprendre que ce n’est pas la proposition d’accepter n’importe quoi comme préfixe. Celle qui disait, en très raccourci, que toto"foo {1+1}" était « équivalent » à toto(t"foo {1+1}").
Par contre ce que j’aimais bien dans la 501, c’était de retarder l’interpolation et donc de réutiliser un même template sur différents ensembles de données.
Ce cas d’usage n’est pas repris par la PEP 750 mais ça reste possible à faire en tordant un peu le truc (à coups d’eval sur l’attribut expression des objets Interpolation), et ça semble être couvert par les exemples de la PEP d’une manière un peu différente.