def migrate(ctx):
    """Bug 1729738 - Migrate app extension properties to Fluent, part {index}."""
    ctx.add_transforms(
        "browser/browser/appExtensionFields.ftl",
        "browser/browser/appExtensionFields.ftl",
        transforms_from(
            """
extension-firefox-compact-light-name = { COPY(from_path, "*****@*****.**") }
extension-firefox-compact-light-description = { COPY(from_path, "*****@*****.**") }
extension-firefox-compact-dark-name = { COPY(from_path, "*****@*****.**") }
extension-firefox-compact-dark-description= { COPY(from_path, "*****@*****.**") }
extension-firefox-alpenglow-name = { COPY(from_path, "*****@*****.**") }
extension-firefox-alpenglow-description = { COPY(from_path, "*****@*****.**") }
""",
            from_path="browser/chrome/browser/app-extension-fields.properties",
        ),
    )
    ctx.add_transforms(
        "browser/browser/appExtensionFields.ftl",
        "browser/browser/appExtensionFields.ftl",
        transforms_from(
            """
extension-default-theme-name = { COPY(from_path, "*****@*****.**") }
extension-default-theme-description = { COPY(from_path, "*****@*****.**") }
""",
            from_path=
            "toolkit/chrome/global/global-extension-fields.properties",
        ),
    )
def migrate(ctx):
    """Bug 1690359 - Move task manager to help menu, part {index}."""

    ctx.add_transforms(
        "browser/browser/menubar.ftl",
        "browser/browser/menubar.ftl",
        transforms_from(
            """
menu-help-taskmanager =
    .label = { COPY(from_path, "taskManagerCmd.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenu-help-taskmanager =
    .label = { COPY(from_path, "taskManagerCmd.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
def migrate(ctx):
    """Bug 1682022 - Fork more strings from the context menu and browser.dtd for the AppMenu, part {index}."""
    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenuitem-save-page =
  .label = { COPY_PATTERN(from_path, "main-context-menu-page-save.label") }
""",
            from_path="browser/browser/browserContext.ftl",
        ),
    )

    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenuitem-new-window =
    .label = { COPY(from_path, "newNavigatorCmd.label") }
appmenuitem-new-private-window =
    .label = { COPY(from_path, "newPrivateWindow.label") }
appmenuitem-fullscreen =
  .label = { COPY(from_path, "fullScreenCmd.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
Пример #4
0
def migrate(ctx):
    """Bug 1525178 - Convert about:addons sidebar to HTML, part {index}"""

    ctx.add_transforms(
        'toolkit/toolkit/about/aboutAddons.ftl',
        'toolkit/toolkit/about/aboutAddons.ftl',
        transforms_from("""
addon-category-discover = {COPY_PATTERN(from_path, "extensions-view-discopane.name")}
addon-category-available-updates = {COPY_PATTERN(from_path, "extensions-view-available-updates.name")}
addon-category-recent-updates = {COPY_PATTERN(from_path, "extensions-view-recent-updates.name")}
""",
                        from_path='toolkit/toolkit/about/aboutAddons.ftl'))

    ctx.add_transforms(
        'toolkit/toolkit/about/aboutAddons.ftl',
        'toolkit/toolkit/about/aboutAddons.ftl',
        transforms_from(
            """
addon-category-extension = {COPY(from_path, "type.extension.name")}
addon-category-theme = {COPY(from_path, "type.themes.name")}
addon-category-locale = {COPY(from_path, "type.locale.name")}
addon-category-plugin = {COPY(from_path, "type.plugin.name")}
addon-category-dictionary = {COPY(from_path, "type.dictionary.name")}
""",
            from_path='toolkit/chrome/mozapps/extensions/extensions.properties'
        ))
Пример #5
0
def migrate(ctx):
    """Bug 1710955 - Change MR1 upgrade onboarding to Pin then Default then Theme screens, part {index}"""

    ctx.add_transforms(
        "browser/browser/upgradeDialog.ftl",
        "browser/browser/upgradeDialog.ftl",
        transforms_from(
            """
upgrade-dialog-new-alt-subtitle = { COPY_PATTERN(from_path, "onboarding-multistage-pin-default-header") }
            """,
            from_path="browser/browser/newtab/onboarding.ftl",
        ),
    )

    ctx.add_transforms(
        "browser/browser/upgradeDialog.ftl",
        "browser/browser/upgradeDialog.ftl",
        transforms_from(
            """
upgrade-dialog-default-title = { COPY_PATTERN(from_path, "default-browser-prompt-title-alt") }
upgrade-dialog-default-subtitle = { COPY_PATTERN(from_path, "default-browser-prompt-message-alt") }
upgrade-dialog-default-primary-button = { COPY_PATTERN(from_path, "default-browser-prompt-button-primary-alt") }
upgrade-dialog-default-secondary-button = { COPY_PATTERN(from_path, "default-browser-prompt-button-secondary") }
            """,
            from_path="browser/browser/defaultBrowserNotification.ftl",
        ),
    )
Пример #6
0
def migrate(ctx):
    """Bug 1730953 - Migrate strings from browser.dtd to Fluent, part {index}"""
    ctx.add_transforms(
        "browser/browser/places.ftl",
        "browser/browser/places.ftl",
        transforms_from(
            """
places-history =
  .aria-label = { COPY(from_path, "historyButton.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )

    ctx.add_transforms(
        "browser/browser/search.ftl",
        "browser/browser/search.ftl",
        transforms_from(
            """
searchbar-submit =
    .tooltiptext = { COPY(from_path, "contentSearchSubmit.tooltip") }

searchbar-input =
    .placeholder = { COPY(from_path, "searchInput.placeholder") }

searchbar-icon =
    .tooltiptext = { COPY(from_path, "searchIcon.tooltip") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
Пример #7
0
def migrate(ctx):
    """Migrate bedrock/firefox/templates/firefox/features/fast.html, part {index}."""

    ctx.add_transforms(
        "firefox/features/fast.ftl", "firefox/features/fast.ftl",
        transforms_from("""
features-fast-get-more-done-browse-faster = {COPY(fast, "Get more done. Browse faster and lighter with multiple tabs",)}
features-fast-our-new-powerful-multi-process = {COPY(fast, "Our new, powerful multi-process platform handles all your tabs without slowing down your computer.",)}
""",
                        fast=fast) +
        [
            FTL.Message(
                id=FTL.Identifier(
                    "features-fast-firefox-is-now-faster-and-leaner"),
                value=REPLACE(fast, "Firefox is now faster and leaner", {
                    "Firefox": TERM_REFERENCE("brand-name-firefox"),
                })),
        ] + transforms_from("""
features-fast-weve-been-working-out-so-you = {COPY(fast, "We’ve been working out, so you can get more done.",)}
features-fast-use-less-memory = {COPY(fast, "Use less memory",)}
""",
                            fast=fast) +
        [
            FTL.Message(
                id=FTL.Identifier("features-fast-no-one-likes-a-computer-hog"),
                value=REPLACE(
                    fast,
                    "No one likes a computer hog! Firefox is a lean, mean (actually we’re pretty nice) browsing machine. Since we use less RAM than Chrome, your other programs can keep running at top speed.",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                        "Chrome": TERM_REFERENCE("brand-name-chrome"),
                    })),
        ] + transforms_from("""
features-fast-get-all-the-tabs-without-lags = {COPY(fast, "Get all the tabs without lags",)}
""",
                            fast=fast) +
        [
            FTL.Message(
                id=FTL.Identifier("features-fast-multi-tasking-with-multiple"),
                value=REPLACE(
                    fast,
                    "Multi-tasking with multiple tabs just got easier. Firefox is now a multi-process browser, which means that your tabs stay fresh and won’t take forever to reload. With 86% less hang time, switch quickly between tabs even as you open more.",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    })),
        ] + transforms_from("""
features-fast-level-up-browser-gameplay = {COPY(fast, "Level-up browser gameplay",)}
""",
                            fast=fast) +
        [
            FTL.Message(
                id=FTL.
                Identifier("features-fast-we-led-the-tech-to-run-3d-games"),
                value=REPLACE(
                    fast,
                    "We led the tech to run 3D games at near-native speeds, and now Firefox is bringing better performance to online gaming. Our powerful browser reduces lags, speeds up ping times and optimizes overall gameplay through faster, leaner browsing.",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    })),
        ])
def migrate(ctx):
    """Bug 863474 - Migrate search prompts to fluent, part {index}."""

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl",
        transforms_from("""
opensearch-error-duplicate-title = { COPY(from_path, "error_invalid_engine_title") }
""",
                        from_path="toolkit/chrome/search/search.properties"))

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl", [
            FTL.Message(id=FTL.Identifier("opensearch-error-duplicate-desc"),
                        value=REPLACE(
                            "toolkit/chrome/search/search.properties",
                            "error_duplicate_engine_msg", {
                                "%1$S": TERM_REFERENCE("brand-short-name"),
                                "%2$S": VARIABLE_REFERENCE("location-url"),
                            },
                            normalize_printf=True))
        ])

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl",
        transforms_from("""
opensearch-error-format-title = { COPY(from_path, "error_invalid_format_title") }
""",
                        from_path="toolkit/chrome/search/search.properties"))

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl", [
            FTL.Message(id=FTL.Identifier("opensearch-error-format-desc"),
                        value=REPLACE(
                            "toolkit/chrome/search/search.properties",
                            "error_invalid_engine_msg2", {
                                "%1$S": TERM_REFERENCE("brand-short-name"),
                                "%2$S": VARIABLE_REFERENCE("location-url"),
                            },
                            normalize_printf=True))
        ])

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl",
        transforms_from("""
opensearch-error-download-title = { COPY(from_path, "error_loading_engine_title") }
""",
                        from_path="toolkit/chrome/search/search.properties"))

    ctx.add_transforms(
        "browser/browser/search.ftl", "browser/browser/search.ftl", [
            FTL.Message(id=FTL.Identifier("opensearch-error-download-desc"),
                        value=REPLACE(
                            "toolkit/chrome/search/search.properties",
                            "error_loading_engine_msg2", {
                                "%1$S": TERM_REFERENCE("brand-short-name"),
                                "%2$S": VARIABLE_REFERENCE("location-url"),
                                "\n": FTL.TextElement(" "),
                            },
                            normalize_printf=True))
        ])
Пример #9
0
def migrate(ctx):
    """Bug 1684876 - Migrate Play Tab and Play Tabs to Fluent, part {index}"""

    target = "browser/browser/tabContextMenu.ftl"
    reference = "browser/browser/tabContextMenu.ftl"

    ctx.add_transforms(
        target,
        reference,
        transforms_from(
            """
tab-context-play-tab =
    .label = { COPY(from_path, "playTab.label") }
    .accesskey = { COPY(from_path, "playTab.accesskey") }
""",
            from_path="browser/chrome/browser/browser.properties",
        ),
    )

    ctx.add_transforms(
        target,
        reference,
        transforms_from(
            """
tab-context-play-tabs =
    .label = { COPY(from_path, "playTabs.label") }
    .accesskey = { COPY(from_path, "playTabs.accesskey") }
""",
            from_path="browser/chrome/browser/browser.properties",
        ),
    )
def migrate(ctx):
    """Bug 1690573 - Port Report Site Issue WebExtension strings to Fluent, part {index}."""
    ctx.add_transforms(
        "browser/browser/menubar.ftl",
        "browser/browser/menubar.ftl",
        transforms_from(
            """
menu-help-report-site-issue =
    .label = { COPY(from_path, "wc-reporter.label2") }
""",
            from_path=
            "browser/extensions/report-site-issue/webcompat.properties",
        ),
    )

    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenu-help-report-site-issue =
    .label = { COPY(from_path, "wc-reporter.label2") }
""",
            from_path=
            "browser/extensions/report-site-issue/webcompat.properties",
        ),
    )
def migrate(ctx):
    """Bug 1565574 - Migrate protocol handler dialog strings to fluent, part {index}."""

    ctx.add_transforms(
        "toolkit/toolkit/global/handlerDialog.ftl",
        "toolkit/toolkit/global/handlerDialog.ftl",
        transforms_from(
            """
choose-other-app-description = { COPY(from_path, "ChooseOtherApp.description") }
choose-app-btn =
      .label = { COPY(from_path, "ChooseApp.label") }
      .accessKey = { COPY(from_path, "ChooseApp.accessKey") }
""",
            from_path="toolkit/chrome/mozapps/handling/handling.dtd",
        ),
    )

    ctx.add_transforms(
        "toolkit/toolkit/global/handlerDialog.ftl",
        "toolkit/toolkit/global/handlerDialog.ftl",
        transforms_from(
            """
choose-dialog-privatebrowsing-disabled = { COPY(from_path, "privatebrowsing.disabled.label") }
choose-other-app-window-title = { COPY(from_path, "choose.application.title") }
""",
            from_path="toolkit/chrome/mozapps/handling/handling.properties",
        ),
    )
Пример #12
0
def migrate(ctx):
    """Bug 1502396 - Convert change and remove master password dialogs in about:preferences to use Fluent"""

    ctx.add_transforms(
        "toolkit/toolkit/preferences/preferences.ftl",
        "toolkit/toolkit/preferences/preferences.ftl",
        transforms_from(
            """
set-password =
    .title = { COPY(from_path, "setPassword.title") }
set-password-old-password = { COPY(from_path, "setPassword.oldPassword.label") }
set-password-new-password = { COPY(from_path, "setPassword.newPassword.label") }
set-password-reenter-password = { COPY(from_path, "setPassword.reenterPassword.label") }
set-password-meter = { COPY(from_path, "setPassword.meter.label") }
set-password-meter-loading = { COPY(from_path, "setPassword.meter.loading") }
master-password-description = { COPY(from_path, "masterPasswordDescription.label") }
master-password-warning = { COPY(from_path, "masterPasswordWarning.label") }
""", from_path="toolkit/chrome/mozapps/preferences/changemp.dtd"))

    ctx.add_transforms(
        "toolkit/toolkit/preferences/preferences.ftl",
        "toolkit/toolkit/preferences/preferences.ftl",
        transforms_from(
            """
remove-password =
    .title = { COPY(from_path, "removePassword.title") }
remove-info =
    .label = { COPY(from_path, "removeInfo.label") }
remove-warning1 = { COPY(from_path, "removeWarning1.label") }
remove-warning2 = { COPY(from_path, "removeWarning2.label") }
remove-password-old-password =
    .label = { COPY(from_path, "setPassword.oldPassword.label") }
""", from_path="toolkit/chrome/mozapps/preferences/removemp.dtd"))
Пример #13
0
def migrate(ctx):
    """Migrate bedrock/firefox/templates/firefox/firstrun/firstrun.html, part {index}."""

    ctx.add_transforms(
        "firefox/firstrun.ftl",
        "firefox/firstrun.ftl",
        transforms_from("""
firstrun-firefox-browser = { -brand-name-firefox-browser }
""", quantum=quantum) + [
            FTL.Message(
                id=FTL.Identifier("firstrun-welcome-to-firefox"),
                value=REPLACE(
                    quantum,
                    "Welcome to Firefox",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    }
                )
            ),
            FTL.Message(
                id=FTL.Identifier("firstrun-take-firefox-with-you"),
                value=REPLACE(
                    quantum,
                    "Take Firefox with You",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    }
                )
            ),
            FTL.Message(
                id=FTL.Identifier("firstrun-already-using-firefox"),
                value=REPLACE(
                    quantum,
                    "Already using Firefox?",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    }
                )
            ),
        ] + transforms_from("""
firstrun-get-your-bookmarks-history = {COPY(quantum, "Get your bookmarks, history, passwords and other settings on all your devices.",)}
""", quantum=quantum) + [
            FTL.Message(
                id=FTL.Identifier("firstrun-sign-in-to-your-account"),
                value=REPLACE(
                    quantum,
                    "Sign in to your account and we’ll sync the bookmarks, passwords and other great things you’ve saved to Firefox on other devices.",
                    {
                        "Firefox": TERM_REFERENCE("brand-name-firefox"),
                    }
                )
            ),
        ] + transforms_from("""
firstrun-already-have-an-account = {COPY(quantum, "Already have an account?",)}
firstrun-sign-in = {COPY(quantum, "Sign In",)}
""", quantum=quantum)
        )
Пример #14
0
def migrate(ctx):
    """Bug 1663879 - convert full screen and pointer lock warnings to fluent, part {index}."""

    ctx.add_transforms(
        "browser/browser/browser.ftl", "browser/browser/browser.ftl", [
            FTL.Message(
                id=FTL.Identifier("fullscreen-warning-domain"),
                value=CONCAT_BEFORE_AFTER(
                    COPY("browser/chrome/browser/browser.dtd",
                         "fullscreenWarning.beforeDomain.label",
                         trim=True),
                    CONCAT(
                        FTL.TextElement('<span data-l10n-name="domain">'),
                        VARIABLE_REFERENCE('domain'),
                        FTL.TextElement('</span>'),
                    ),
                    COPY("browser/chrome/browser/browser.dtd",
                         "fullscreenWarning.afterDomain.label",
                         trim=True),
                ))
        ])

    ctx.add_transforms(
        "browser/browser/browser.ftl", "browser/browser/browser.ftl",
        transforms_from("""
fullscreen-warning-no-domain = { COPY(from_path, "fullscreenWarning.generic.label") }

fullscreen-exit-button = { COPY(from_path, "exitDOMFullscreen.button") }
fullscreen-exit-mac-button = { COPY(from_path, "exitDOMFullscreenMac.button") }
""",
                        from_path="browser/chrome/browser/browser.dtd"))

    ctx.add_transforms(
        "browser/browser/browser.ftl", "browser/browser/browser.ftl", [
            FTL.Message(
                id=FTL.Identifier("pointerlock-warning-domain"),
                value=CONCAT_BEFORE_AFTER(
                    COPY("browser/chrome/browser/browser.dtd",
                         "pointerlockWarning.beforeDomain.label",
                         trim=True),
                    CONCAT(
                        FTL.TextElement('<span data-l10n-name="domain">'),
                        VARIABLE_REFERENCE('domain'),
                        FTL.TextElement('</span>'),
                    ),
                    COPY("browser/chrome/browser/browser.dtd",
                         "pointerlockWarning.afterDomain.label",
                         trim=True),
                ))
        ])

    ctx.add_transforms(
        "browser/browser/browser.ftl", "browser/browser/browser.ftl",
        transforms_from("""
pointerlock-warning-no-domain = { COPY(from_path, "pointerlockWarning.generic.label") }
""",
                        from_path="browser/chrome/browser/browser.dtd"))
Пример #15
0
def migrate(ctx):
    """Bug 1579540 - Migrate the notification-popup-box element to ftl, part {index}"""

    ctx.add_transforms(
        'browser/browser/browser.ftl', 'browser/browser/browser.ftl',
        transforms_from("""
urlbar-services-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.servicesNotificationAnchor.tooltip") }
urlbar-web-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.webNotificationAnchor.tooltip") }
urlbar-midi-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.midiNotificationAnchor.tooltip") }
urlbar-eme-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.emeNotificationAnchor.tooltip") }
urlbar-web-authn-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.webAuthnAnchor.tooltip") }
urlbar-canvas-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.canvasNotificationAnchor.tooltip") }
urlbar-web-rtc-share-microphone-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.webRTCShareMicrophoneNotificationAnchor.tooltip") }
urlbar-default-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.defaultNotificationAnchor.tooltip") }
urlbar-geolocation-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.geolocationNotificationAnchor.tooltip") }
urlbar-storage-access-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.storageAccessAnchor.tooltip") }
urlbar-translate-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.translateNotificationAnchor.tooltip") }
urlbar-web-rtc-share-screen-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.webRTCShareScreenNotificationAnchor.tooltip") }
urlbar-indexed-db-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.indexedDBNotificationAnchor.tooltip") }
urlbar-password-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.passwordNotificationAnchor.tooltip") }
urlbar-translated-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.translatedNotificationAnchor.tooltip") }
urlbar-plugins-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.pluginsNotificationAnchor.tooltip") }
urlbar-web-rtc-share-devices-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.webRTCShareDevicesNotificationAnchor.tooltip") }
urlbar-autoplay-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.autoplayNotificationAnchor.tooltip") }
urlbar-persistent-storage-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.persistentStorageNotificationAnchor.tooltip") }
urlbar-addons-notification-anchor =
    .tooltiptext = { COPY("browser/chrome/browser/browser.dtd", "urlbar.addonsNotificationAnchor.tooltip") }
"""))

    ctx.add_transforms(
        'browser/browser/browser.ftl',
        'browser/browser/browser.ftl',
        transforms_from("""
urlbar-identity-button =
    .aria-label = {COPY_PATTERN(from_path, "browser-urlbar-identity-button.aria-label")}
""",
                        from_path='browser/browser/browser.ftl'),
    )
Пример #16
0
def migrate(ctx):
    """Migrate bedrock/firefox/templates/firefox/welcome/page3.html, part {index}."""

    ctx.add_transforms("firefox/welcome/page3.ftl", "firefox/welcome/page3.ftl", [
        FTL.Message(
            id=FTL.Identifier("welcome-page3-get-the-free-account-that"),
            value=REPLACE(
                page3,
                "Get the free account that protects your privacy. Join Firefox.",
                {
                    "Firefox": TERM_REFERENCE("brand-name-firefox"),
                })),
    ] + transforms_from(
        """
welcome-page3-no-account-required-but-you = {COPY(page3, "No account required. But you might want one.",)}
""",
        page3=page3
    ) + [
        FTL.Message(
            id=FTL.Identifier("welcome-page3-the-firefox-browser-collects"),
            value=REPLACE(
                page3,
                "The Firefox browser collects so little data about you, we don’t even require your email address. But when you use it to create a Firefox account, we can protect your privacy across more of your online life.",
                {
                    "Firefox":
                    TERM_REFERENCE("brand-name-firefox"),
                    "Firefox account":
                    TERM_REFERENCE("brand-name-firefox-account"),
                })),
    ] + transforms_from(
        """
welcome-page3-firefox-monitor = { -brand-name-firefox-monitor }
welcome-page3-have-at-least-one-company = {COPY(page3, "Have at least one company looking out for your data, instead of leaking it.",)}
welcome-page3-firefox-lockwise = { -brand-name-firefox-lockwise }
welcome-page3-never-forget-reset-or-travel = {COPY(page3, "Never forget, reset or travel without your passwords again.",)}
welcome-page3-facebook-container = { -brand-name-facebook-container }
""",
        page3=page3
    ) + [
        FTL.Message(
            id=FTL.Identifier(
                "welcome-page3-get-a-container-to-keep-facebook"),
            value=REPLACE(
                page3,
                "Get a container to keep Facebook out of your business.", {
                    "Facebook": TERM_REFERENCE("brand-name-facebook"),
                })),
    ] + transforms_from("""
welcome-page3-pocket = { -brand-name-pocket }
welcome-page3-trade-clickbait-and-fake-news = {COPY(page3, "Trade clickbait and fake news for quality content.",)}
welcome-page3-firefox-send = { -brand-name-firefox-send }
welcome-page3-send-huge-files-to-anyone = {COPY(page3, "Send huge files to anyone you want, with self-destructing links.",)}
welcome-page3-why-am-i-seeing-this = {COPY(page3, "Why am I seeing this?",)}
""",
                        page3=page3))
Пример #17
0
def migrate(ctx):
    """Bug 1521792 - Migrate unknownContentType dialog to FTL, part {index}"""

    ctx.add_transforms(
        "toolkit/toolkit/global/unknownContentType.ftl",
        "toolkit/toolkit/global/unknownContentType.ftl",
        transforms_from(
            """

unknowncontenttype-intro = { COPY(path1, "intro2.label") }
unknowncontenttype-which-is = { COPY(path1, "whichIs.label") }
unknowncontenttype-from = { COPY(path1, "from.label") }
unknowncontenttype-prompt = { COPY(path1, "unknownPromptText.label") }
""",
            path1="toolkit/chrome/mozapps/downloads/unknownContentType.dtd",
        ) + [
            FTL.Message(
                id=FTL.Identifier("unknowncontenttype-action-question"),
                value=REPLACE(
                    "toolkit/chrome/mozapps/downloads/unknownContentType.dtd",
                    "actionQuestion.label",
                    {
                        "&brandShortName;": TERM_REFERENCE("brand-short-name"),
                    },
                ),
            ),
        ] + transforms_from(
            """
unknowncontenttype-open-with =
    .label = { COPY(path1, "openWith.label") }
    .accesskey = { COPY(path1, "openWith.accesskey") }
unknowncontenttype-other =
    .label = { COPY(path1, "other.label") }
unknowncontenttype-choose-handler =
    .label =
        { PLATFORM() ->
            [macos] { COPY(path1, "chooseHandlerMac.label") }
           *[other] { COPY(path1, "chooseHandler.label") }
        }
    .accesskey =
        { PLATFORM() ->
            [macos] { COPY(path1, "chooseHandlerMac.accesskey") }
           *[other] { COPY(path1, "chooseHandler.accesskey") }
        }
unknowncontenttype-save-file =
    .label = { COPY(path1, "saveFile.label") }
    .accesskey = { COPY(path1, "saveFile.accesskey") }
unknowncontenttype-remember-choice =
    .label = { COPY(path1, "rememberChoice.label") }
    .accesskey = { COPY(path1, "rememberChoice.accesskey") }
""",
            path1="toolkit/chrome/mozapps/downloads/unknownContentType.dtd",
        ),
    )
Пример #18
0
def migrate(ctx):
    """Bug 1728460  - Migrate appmenu-viewcache.inc.xhtml to Fluent, part {index}."""
    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenuitem-print =
    .label = { COPY(from_path, "printCmd.label") }
appmenuitem-downloads =
    .label = { COPY(from_path, "libraryDownloads.label") }
appmenuitem-history =
    .label = { COPY(from_path, "historyMenu.label") }
appmenuitem-zoom =
    .value = { COPY(from_path, "fullZoom.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
    ctx.add_transforms(
        "browser/browser/sync.ftl",
        "browser/browser/sync.ftl",
        transforms_from(
            """
fxa-menu-send-tab-to-device-description = { COPY(from_path, "fxa.service.sendTab.description") }
fxa-menu-send-tab-to-device-syncnotready =
    .label = { COPY(from_path, "sendToDevice.syncNotReady.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        [
            FTL.Message(
                id=FTL.Identifier("appmenuitem-fxa-sign-in"),
                value=REPLACE(
                    "browser/chrome/browser/browser.dtd",
                    "fxa.menu.signin.label",
                    {
                        "&brandProductName;":
                        TERM_REFERENCE("brand-product-name"),
                    },
                ),
            ),
        ],
    )
Пример #19
0
def migrate(ctx):
    """Bug 1625478 - Convert appMenu* strings from browser.dtd to appmenu.ftl, part {index}."""
    ctx.add_transforms(
        "browser/browser/appmenu.ftl",
        "browser/browser/appmenu.ftl",
        transforms_from(
            """
appmenuitem-help =
    .label = { COPY(from_path, "appMenuHelp.label") }
appmenu-remote-tabs-showall =
    .label = { COPY(from_path, "appMenuRemoteTabs.showAll.label") }
    .tooltiptext = { COPY(from_path, "appMenuRemoteTabs.showAll.tooltip") }
appmenu-remote-tabs-showmore =
    .label = { COPY_PATTERN("browser/browser/appmenu.ftl", "appmenu-fxa-show-more-tabs")}
    .tooltiptext = { COPY(from_path, "appMenuRemoteTabs.showMore.tooltip") }
appmenu-remote-tabs-notabs = { COPY(from_path, "appMenuRemoteTabs.notabs.label") }
appmenu-remote-tabs-tabsnotsyncing = { COPY(from_path, "appMenuRemoteTabs.tabsnotsyncing.label") }
appmenu-remote-tabs-noclients = { COPY(from_path, "appMenuRemoteTabs.noclients.subtitle") }
appmenu-remote-tabs-connectdevice =
  .label = { COPY(from_path, "appMenuRemoteTabs.connectdevice.label") }
appmenu-remote-tabs-welcome = { COPY(from_path, "appMenuRemoteTabs.welcome.label") }
appmenu-remote-tabs-unverified = { COPY(from_path, "appMenuRemoteTabs.unverified.label") }
""",
            from_path="browser/chrome/browser/browser.dtd",
        ),
    )
Пример #20
0
def migrate(ctx):
    """Bug 1660259 - Correct nav aria-label and label and description for theme buttons, part {index}."""

    ctx.add_transforms(
        "browser/browser/newtab/onboarding.ftl",
        "browser/browser/newtab/onboarding.ftl",
        transforms_from("""
onboarding-multistage-theme-tooltip-automatic-2 =
   .title = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-automatic.title") }
onboarding-multistage-theme-description-automatic-2 =
  .aria-description =  { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-automatic.title") }

onboarding-multistage-theme-tooltip-light-2 =
   .title = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-light.title") }
onboarding-multistage-theme-description-light =
  .aria-description = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-light.title") }

onboarding-multistage-theme-tooltip-dark-2 =
   .title = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-dark.title") }
onboarding-multistage-theme-description-dark =
  .aria-description = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-dark.title") }

onboarding-multistage-theme-tooltip-alpenglow-2 =
   .title = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-alpenglow.title") }
onboarding-multistage-theme-description-alpenglow =
  .aria-description = { COPY_PATTERN(from_path, "onboarding-multistage-theme-tooltip-alpenglow.title") }
""", from_path="browser/browser/newtab/onboarding.ftl"))
Пример #21
0
def migrate(ctx):
    """Bug 1692669: Replace icon group navigation on macOS page context menu, part {index}."""
    ctx.add_transforms(
        "browser/browser/browserContext.ftl",
        "browser/browser/browserContext.ftl",
        transforms_from(
            """
main-context-menu-back-mac =
    .label = { COPY_PATTERN(from_path, "main-context-menu-back-2.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-back-2.accesskey") }

main-context-menu-forward-mac =
    .label = { COPY_PATTERN(from_path, "main-context-menu-forward-2.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-forward-2.accesskey") }

main-context-menu-reload-mac =
    .label = { COPY_PATTERN(from_path, "main-context-menu-reload.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-reload.accesskey") }

main-context-menu-stop-mac =
    .label = { COPY_PATTERN(from_path, "main-context-menu-stop.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-stop.accesskey") }

""",
            from_path="browser/browser/browserContext.ftl",
        ),
    )
Пример #22
0
def migrate(ctx):
    """Bug 1626381 - Add titles to about:addons sidebar, part {index}"""

    ctx.add_transforms(
        'toolkit/toolkit/about/aboutAddons.ftl',
        'toolkit/toolkit/about/aboutAddons.ftl',
        transforms_from(
"""
header-back-button =
    .title = {COPY_PATTERN(from_path, "go-back-button.tooltiptext")}

addon-category-discover-title =
    .title = {COPY_PATTERN(from_path, "addon-category-discover")}
addon-category-available-updates-title =
    .title = {COPY_PATTERN(from_path, "addon-category-available-updates")}
addon-category-recent-updates-title =
    .title = {COPY_PATTERN(from_path, "addon-category-recent-updates")}
addon-category-extension-title =
    .title = {COPY_PATTERN(from_path, "addon-category-extension")}
addon-category-theme-title =
    .title = {COPY_PATTERN(from_path, "addon-category-theme")}
addon-category-locale-title =
    .title = {COPY_PATTERN(from_path, "addon-category-locale")}
addon-category-plugin-title =
    .title = {COPY_PATTERN(from_path, "addon-category-plugin")}
addon-category-dictionary-title =
    .title = {COPY_PATTERN(from_path, "addon-category-dictionary")}

sidebar-help-button-title =
    .title = {COPY_PATTERN(from_path, "help-button")}
sidebar-preferences-button-title =
    .title = {COPY_PATTERN(from_path, "preferences")}
"""
        , from_path='toolkit/toolkit/about/aboutAddons.ftl')
    )
Пример #23
0
def migrate(ctx):
    """Bug 1591003 - Migrate urlbar notification tooltips to Fluent, part {index}"""

    ctx.add_transforms(
        "browser/browser/browser.ftl", "browser/browser/browser.ftl",
        transforms_from("""

urlbar-geolocation-blocked =
    .tooltiptext = { COPY(path1, "urlbar.geolocationBlocked.tooltip") }
urlbar-web-notifications-blocked =
    .tooltiptext = { COPY(path1, "urlbar.webNotificationsBlocked.tooltip") }
urlbar-camera-blocked =
    .tooltiptext = { COPY(path1, "urlbar.cameraBlocked.tooltip") }
urlbar-microphone-blocked =
    .tooltiptext = { COPY(path1, "urlbar.microphoneBlocked.tooltip") }
urlbar-screen-blocked =
    .tooltiptext = { COPY(path1, "urlbar.screenBlocked.tooltip") }
urlbar-persistent-storage-blocked =
    .tooltiptext = { COPY(path1, "urlbar.persistentStorageBlocked.tooltip") }
urlbar-popup-blocked =
    .tooltiptext = { COPY(path1, "urlbar.popupBlocked.tooltip") }
urlbar-autoplay-media-blocked =
    .tooltiptext = { COPY(path1, "urlbar.autoplayMediaBlocked.tooltip") }
urlbar-canvas-blocked =
    .tooltiptext = { COPY(path1, "urlbar.canvasBlocked.tooltip") }
urlbar-midi-blocked =
    .tooltiptext = { COPY(path1, "urlbar.midiBlocked.tooltip") }
urlbar-install-blocked =
    .tooltiptext = { COPY(path1, "urlbar.installBlocked.tooltip") }
""",
                        path1="/browser/chrome/browser/browser.dtd"))
def migrate(ctx):
    """Bug 1625480 - Migrate remaining notifications strings from browser.dtd to Fluent, part {index}."""

    ctx.add_transforms(
        "browser/browser/appMenuNotifications.ftl",
        "browser/browser/appMenuNotifications.ftl",
        transforms_from("""
appmenu-new-tab-controlled =
    .label = { COPY(from_path, "newTabControlled.header.message") }
    .buttonlabel = { COPY(from_path, "newTabControlled.keepButton.label") }
    .buttonaccesskey = { COPY(from_path, "newTabControlled.keepButton.accesskey") }
    .secondarybuttonlabel = { COPY(from_path, "newTabControlled.disableButton.label") }
    .secondarybuttonaccesskey = { COPY(from_path, "newTabControlled.disableButton.accesskey") }
appmenu-homepage-controlled =
    .label = { COPY(from_path, "homepageControlled.header.message") }
    .buttonlabel = { COPY(from_path, "homepageControlled.keepButton.label") }
    .buttonaccesskey = { COPY(from_path, "homepageControlled.keepButton.accesskey") }
    .secondarybuttonlabel = { COPY(from_path, "homepageControlled.disableButton.label") }
    .secondarybuttonaccesskey = { COPY(from_path, "homepageControlled.disableButton.accesskey") }
appmenu-tab-hide-controlled =
    .label = { COPY(from_path, "tabHideControlled.header.message") }
    .buttonlabel = { COPY(from_path, "tabHideControlled.keepButton.label") }
    .buttonaccesskey = { COPY(from_path, "tabHideControlled.keepButton.accesskey") }
    .secondarybuttonlabel = { COPY(from_path, "tabHideControlled.disableButton.label") }
    .secondarybuttonaccesskey = { COPY(from_path, "tabHideControlled.disableButton.accesskey") }
""",
                        from_path="browser/chrome/browser/browser.dtd"))
Пример #25
0
def migrate(ctx):
    """Bug 1411707 - Migrate the findbar XBL binding to a Custom Element, part {index}."""

    ctx.add_transforms(
        'toolkit/toolkit/main-window/findbar.ftl',
        'toolkit/toolkit/main-window/findbar.ftl',
        transforms_from(
"""
findbar-next =
    .tooltiptext = { COPY(from_path, "next.tooltip") }
findbar-previous =
    .tooltiptext = { COPY(from_path, "previous.tooltip") }

findbar-find-button-close =
    .tooltiptext = { COPY(from_path, "findCloseButton.tooltip") }

findbar-highlight-all =
    .label = { COPY(from_path, "highlightAll.label") }
    .accesskey = { COPY(from_path, "highlightAll.accesskey") }
    .tooltiptext = { COPY(from_path, "highlightAll.tooltiptext") }

findbar-case-sensitive =
    .label = { COPY(from_path, "caseSensitive.label") }
    .accesskey = { COPY(from_path, "caseSensitive.accesskey") }
    .tooltiptext = { COPY(from_path, "caseSensitive.tooltiptext") }

findbar-entire-word =
    .label = { COPY(from_path, "entireWord.label") }
    .accesskey = { COPY(from_path, "entireWord.accesskey") }
    .tooltiptext = { COPY(from_path, "entireWord.tooltiptext") }
""", from_path="toolkit/chrome/global/findbar.dtd")
    )
def migrate(ctx):
    """Bug 1552333 - Migrate strings from pipnss.properties to aboutCertError.ftl"""
    ctx.add_transforms(
        "browser/browser/aboutCertError.ftl",
        "browser/browser/aboutCertError.ftl",
        transforms_from(
            """
cert-error-symantec-distrust-admin = { COPY(from_path, "certErrorSymantecDistrustAdministrator") }
""",
            from_path="security/manager/chrome/pipnss/pipnss.properties",
        ),
    )
    ctx.add_transforms(
        "browser/browser/aboutCertError.ftl",
        "browser/browser/aboutCertError.ftl",
        [
            FTL.Message(
                id=FTL.Identifier("cert-error-symantec-distrust-description"),
                value=REPLACE(
                    "security/manager/chrome/pipnss/pipnss.properties",
                    "certErrorSymantecDistrustDescription1",
                    {
                        "%1$S": VARIABLE_REFERENCE("hostname"),
                    },
                    normalize_printf=True,
                ),
            ),
        ],
    )
Пример #27
0
def migrate(ctx):
    """Bug 1685779 - Add keyboard shortcut to Back/Forward button tooltip, part {index}."""
    ctx.add_transforms(
        "browser/browser/browserContext.ftl",
        "browser/browser/browserContext.ftl",
        transforms_from(
            """
main-context-menu-back-2 =
    .tooltiptext = { COPY_PATTERN(from_path, "main-context-menu-back.tooltiptext") } ({ $shortcut })
    .aria-label = { COPY_PATTERN(from_path, "main-context-menu-back.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-back.accesskey") }
navbar-tooltip-back-2 =
    .value = { main-context-menu-back-2.tooltiptext }
toolbar-button-back-2 =
    .label = { main-context-menu-back-2.aria-label }

main-context-menu-forward-2 =
    .tooltiptext = { COPY_PATTERN(from_path, "main-context-menu-forward.tooltiptext") } ({ $shortcut })
    .aria-label = { COPY_PATTERN(from_path, "main-context-menu-forward.aria-label") }
    .accesskey = { COPY_PATTERN(from_path, "main-context-menu-forward.accesskey") }
navbar-tooltip-forward-2 =
    .value = { main-context-menu-forward-2.tooltiptext }
toolbar-button-forward-2 =
    .label = { main-context-menu-forward-2.aria-label }    
""",
            from_path="browser/browser/browserContext.ftl",
        ),
    )
def migrate(ctx):
    """Bug 1524777 - Convert the certificate viewer's XUL grid to HTML table, part {index}."""

    ctx.add_transforms(
        "security/manager/security/certificates/certManager.ftl",
        "security/manager/security/certificates/certManager.ftl",
        transforms_from(
"""
certmgr-subject-label = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.subjectinfo.label") }

certmgr-issuer-label = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.issuerinfo.label") }

certmgr-period-of-validity = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.periodofvalidity.label") }

certmgr-fingerprints = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.fingerprints.label") }

certmgr-cert-detail-commonname = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.cn") }

certmgr-cert-detail-org = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.o") }

certmgr-cert-detail-orgunit = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.ou") }

certmgr-cert-detail-serial-number = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.serialnumber") }

certmgr-cert-detail-sha-256-fingerprint = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.sha256fingerprint") }

certmgr-cert-detail-sha-1-fingerprint = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.certdetail.sha1fingerprint") }

certmgr-begins-on = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.begins") }

certmgr-expires-on = { COPY("security/manager/chrome/pippki/certManager.dtd", "certmgr.expires") }

""")
)
Пример #29
0
def migrate(ctx):
    """Migrate bedrock/base/templates/macros.html, part {index}."""

    ctx.add_transforms("fxa_form.ftl", "fxa_form.ftl", [
        FTL.Message(
            id=FTL.Identifier("fxa-form-enter-your-email"),
            value=REPLACE(
                "main.lang",
                "<strong>Enter your email</strong> to access Firefox Accounts.",
                {
                    "Firefox Accounts":
                    TERM_REFERENCE("brand-name-firefox-accounts"),
                })),
        FTL.Message(
            id=FTL.Identifier("fxa-form-by-proceeding"),
            value=REPLACE(
                "main.lang",
                "By proceeding, you agree to the <a href=\"%(url1)s\">Terms of Service</a> and <a href=\"%(url2)s\">Privacy Notice</a>.",
                {
                    "%%": "%",
                    "%(url1)s": VARIABLE_REFERENCE("url1"),
                    "%(url2)s": VARIABLE_REFERENCE("url2"),
                })),
    ])

    ctx.add_transforms(
        "fxa_form.ftl", "fxa_form.ftl",
        transforms_from("""
fxa-form-email-address = {COPY(main, "Email address",)}
fxa-form-continue = {COPY(main, "Continue",)}
fxa-form-create-account = {COPY(main, "Create account",)}
fxa-form-get-the-app = {COPY(main, "Get the app",)}
""",
                        main=main))
Пример #30
0
def migrate(ctx):
    """Migrate bedrock/firefox/templates/firefox/switch.html, part {index}."""

    ctx.add_transforms(
        "firefox/switch.ftl", "firefox/switch.ftl",
        transforms_from("""
switch-switch-from-chrome = {COPY(switch, "Switch from Chrome to Firefox in just a few minutes",)}
switch-switching-to-firefox-is-fast = {COPY(switch, "Switching to Firefox is fast, easy and risk-free, because Firefox imports your bookmarks, autofills, passwords and preferences from Chrome.",)}
switch-switching-to-firefox-page-description = {COPY(switch, "Switching to Firefox is fast, easy and risk-free. Firefox imports your bookmarks, autofills, passwords and preferences from Chrome.",)}
switch-select-what-to-take = {COPY(switch, "Select what to take from Chrome.",)}
switch-let-firefox-do-the-rest = {COPY(switch, "Let Firefox do the rest.",)}
switch-enjoy-the-web-faster = {COPY(switch, "Enjoy the web faster, all set up for you.",)}
switch-download-and-switch = {COPY(switch, "Download and switch",)}
switch-use-firefox-and-still-chrome = {COPY(switch, "You can use Firefox and still have Chrome. Chrome won’t change on your machine one bit.",)}
switch-share-with-your-friends = {COPY(switch, "Share with your friends how to switch to Firefox",)}
switch-share-to-facebook = {COPY(switch, "Share to Facebook",)}
switch-firefox-makes-switching-fast-tweet = {COPY(switch, "🔥 Firefox makes switching from Chrome really fast. Try it out!",)}
switch-send-a-tweet = {COPY(switch, "Send a tweet",)}
switch-switch-to-firefox = {COPY(switch, "Switch to Firefox",)}
switch-hey = {COPY(switch, "Hey,",)}
switch-firefox-makes-switching-fast-email = {COPY(switch, "Firefox makes switching from Chrome really fast. I like it a lot, and you should try it.",)}
switch-check-it-out = {COPY(switch, "Check it out and let me know what you think:",)}
switch-send-an-email = {COPY(switch, "Send an email",)}
switch-still-not-convinced = {COPY(switch, "Still not convinced that switching to Firefox is easy?",)}
""",
                        switch=switch))