Fluent to Fluent Migrations¶
It’s possible to migrate existing Fluent messages using COPY_PATTERN
in a migration recipe. Unlike migrations from legacy content, it’s not possible
to interpolate the text, only to copy existing content without changes.
Consider for example a patch modifying an existing message to move the original
value to a alt
attribute.
Original message:
about-logins-icon = Warning icon
.title = Breached website
New message:
about-logins-breach-icon =
.alt = Warning icon
.title = Breached website
This type of changes requires a new message identifier, which in turn causes existing translations to be lost. It’s possible to migrate the existing translated content with:
from fluent.migrate import COPY_PATTERN
ctx.add_transforms(
"browser/browser/aboutLogins.ftl",
"browser/browser/aboutLogins.ftl",
transforms_from(
"""
about-logins-breach-icon =
.alt = {COPY_PATTERN(from_path, "about-logins-icon")}
.title = {COPY_PATTERN(from_path, "about-logins-icon.title")}
""",from_path="browser/browser/aboutLogins.ftl"),
)
In this specific case, the destination and source files are the same. The dot
notation is used to access attributes: about-logins-icon.title
matches
the title
attribute of the message with identifier
about-logins-icon
, while about-logins-icon
alone matches the value
of the message.
Warning
Using the message identifier in COPY_PATTERN
will not migrate the
message as a whole, with all its attributes, only its value.