зеркало из https://github.com/mozilla/bedrock.git
Remove old L10n machinery (#10660)
This commit is contained in:
Родитель
9b3353c011
Коммит
f5c98cf462
|
@ -18,8 +18,6 @@ omit =
|
|||
tests/*
|
||||
venv/*
|
||||
wsgi/*
|
||||
# There are no unit tests for this dir, and it is slated for removal anyway:
|
||||
lib/fluent_migrations*
|
||||
|
||||
[report]
|
||||
exclude_lines =
|
||||
|
|
|
@ -42,9 +42,6 @@ update-l10n:
|
|||
- "l10n/**/*"
|
||||
refs:
|
||||
- master
|
||||
except:
|
||||
changes:
|
||||
- "lib/fluent_migrations/**/*"
|
||||
script:
|
||||
- bin/open-ftl-pr.sh
|
||||
retry: 2
|
||||
|
|
|
@ -8,7 +8,6 @@ exclude: >
|
|||
| static
|
||||
| bedrock/externalfiles/files_cache
|
||||
| git-repos
|
||||
| lib/fluent_migrations
|
||||
)
|
||||
repos:
|
||||
# Note: hooks that add content must run before ones which check formatting, lint, etc
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
#}
|
||||
|
||||
{% set_lang_files "main" %}
|
||||
<!doctype html>
|
||||
{# Note the "windows" class, without javascript platform-specific assets default to windows #}
|
||||
<html class="windows x86 no-js" lang="{{ LANG|replace('en-US', 'en') }}" dir="{{ DIR }}" data-country-code="{{ country_code }}" data-latest-firefox="{{ latest_firefox_version }}" data-esr-versions="{{ esr_firefox_versions|join(' ') }}" {% if settings.GTM_CONTAINER_ID %}data-gtm-container-id="{{ settings.GTM_CONTAINER_ID }}"{% endif %} {% block gtm_page_id %}{% endblock %} {% if settings.STUB_ATTRIBUTION_RATE %}data-stub-attribution-rate="{{ settings.STUB_ATTRIBUTION_RATE }}"{% endif %} {% block html_attrs %}{% endblock %} {% if settings.SENTRY_FRONTEND_DSN %}data-sentry-dsn="{{ settings.SENTRY_FRONTEND_DSN }}"{% endif %}>
|
||||
|
|
|
@ -57,14 +57,8 @@ S3_BASE_URL = "https://s3-{}.amazonaws.com/{}".format(
|
|||
|
||||
|
||||
def get_l10n_repo_info():
|
||||
repo = git.GitRepo(settings.LOCALES_PATH, settings.LOCALES_REPO)
|
||||
fluent_repo = git.GitRepo(settings.FLUENT_REPO_PATH, settings.FLUENT_REPO_URL)
|
||||
return (
|
||||
{
|
||||
"latest_ref": repo.current_hash,
|
||||
"last_updated": repo.last_updated,
|
||||
"repo_url": repo.clean_remote_url,
|
||||
},
|
||||
{
|
||||
"latest_ref": fluent_repo.current_hash,
|
||||
"last_updated": fluent_repo.last_updated,
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
{% endcall %}
|
||||
|
||||
<ul class="mzp-l-columns mzp-t-columns-three mzp-l-content mzp-t-content-lg">
|
||||
{% if l10n_has_tag('default-browser-012020') %}
|
||||
{% call picto(
|
||||
title=ftl('set-as-default-landing-choose-automatic-privacy'),
|
||||
image_url='protocol/img/icons/brand/violet/no-eye.svg',
|
||||
|
@ -58,31 +57,6 @@
|
|||
) %}
|
||||
<p>{{ ftl('set-as-default-landing-firefox-is-the-only') }}</p>
|
||||
{% endcall %}
|
||||
{% else %}
|
||||
{% call picto(
|
||||
title=ftl('set-as-default-landing-choose-automatic-privacy'),
|
||||
image_url='protocol/img/icons/brand/violet/no-eye.svg',
|
||||
body=true,
|
||||
) %}
|
||||
<p>{{ ftl('set-as-default-landing-the-internet-keeps') }}</p>
|
||||
{% endcall %}
|
||||
|
||||
{% call picto(
|
||||
title=ftl('set-as-default-landing-choose-freedom-on-every'),
|
||||
image_url='protocol/img/icons/brand/orange/devices.svg',
|
||||
body=true,
|
||||
) %}
|
||||
<p>{{ ftl('set-as-default-landing-firefox-is-fast-no-interest') }}</p>
|
||||
{% endcall %}
|
||||
|
||||
{% call picto(
|
||||
title=ftl('set-as-default-landing-choose-corporate-independence'),
|
||||
image_url='protocol/img/icons/brand/blue/mountain.svg',
|
||||
body=true,
|
||||
) %}
|
||||
<p>{{ ftl('set-as-default-landing-firefox-is-the-only-major') }}</p>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</main>
|
||||
{% endblock %}
|
||||
|
|
|
@ -19,13 +19,8 @@
|
|||
{% set _utm_campaign = 'welcome-1-monitor' %}
|
||||
{% set _cta_type = 'lifecycle-monitor' %}
|
||||
|
||||
{% if l10n_has_tag('monitor_title_30102019') %}
|
||||
{% set hero_title = ftl('welcome-page1-stay-ahead-of-hackers-check') %}
|
||||
{% set _utm_content = 'stay-ahead-hackers' %}
|
||||
{% else %}
|
||||
{% set hero_title = ftl('welcome-page1-youre-on-track-to-stay-protected') %}
|
||||
{% set _utm_content = 'on-track-protected' %}
|
||||
{% endif %}
|
||||
{% set hero_title = ftl('welcome-page1-stay-ahead-of-hackers-check') %}
|
||||
{% set _utm_content = 'stay-ahead-hackers' %}
|
||||
|
||||
{% block content_intro %}
|
||||
{% call hero(
|
||||
|
|
|
@ -41,8 +41,7 @@ from bedrock.newsletter.forms import NewsletterFooterForm
|
|||
from bedrock.products.forms import VPNWaitlistForm
|
||||
from bedrock.releasenotes import version_re
|
||||
from lib import l10n_utils
|
||||
from lib.l10n_utils import L10nTemplateView
|
||||
from lib.l10n_utils.dotlang import get_translations_native_names
|
||||
from lib.l10n_utils import L10nTemplateView, get_translations_native_names
|
||||
from lib.l10n_utils.fluent import ftl, ftl_file_is_active
|
||||
|
||||
UA_REGEXP = re.compile(r"Firefox/(%s)" % version_re)
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-article.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2011faq" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2011 Annual Report') }}{% endblock %}
|
||||
{% block body_id %}annual-2011{% endblock %}
|
||||
{% block body_class %}mzp-t-mozilla{% endblock %}
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-article.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2011" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2011 Annual Report') }} | {{ _('Frequently Asked Questions') }}{% endblock %}
|
||||
{% block body_id %}annual-2011{% endblock %}
|
||||
{% block body_class %}mzp-t-mozilla{% endblock %}
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-protocol-mozilla.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2012/index" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2012 Annual Report') }} | {{ _('Frequently Asked Questions') }}{% endblock %}
|
||||
{% block body_id %}annual-2012{% endblock %}
|
||||
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-protocol-mozilla.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2013/index" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2013 Annual Report') }} | {{ _('Frequently Asked Questions') }}{% endblock %}
|
||||
{% block body_id %}annual-2013{% endblock %}
|
||||
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-protocol-mozilla.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2014/index" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2014 Annual Report') }} | {{ _('Frequently Asked Questions') }}{% endblock %}
|
||||
{% block body_id %}annual-2014{% endblock %}
|
||||
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
{% extends "base-protocol-mozilla.html" %}
|
||||
|
||||
{% add_lang_files "foundation/annualreport/2015/index" %}
|
||||
|
||||
{% block page_title %}{{ _('The State of Mozilla: 2015 Annual Report') }} | {{ _('Frequently Asked Questions') }}{% endblock %}
|
||||
{% block body_id %}annual-2015{% endblock %}
|
||||
|
||||
|
|
|
@ -307,20 +307,9 @@
|
|||
{% set lockwise='https://testpilot.firefox.com/experiments/firefox-lockbox/' %}
|
||||
{% set lockbox=lockwise %}
|
||||
|
||||
{% if l10n_has_tag('lockwise_update_201906') %}
|
||||
{% trans vpn=vpn, lockwise=lockwise %}
|
||||
The overhaul of our core browser has given Mozilla Corporation the ability to begin the exploration of new user engagement and revenue models derived from Firefox to meet these ambitious goals. Specifically in 2018 we began testing in Firefox a new paid virtual private network (<a href="{{ vpn }}">VPN</a>) service and a password manager called <a href="{{ lockwise }}">Lockwise</a> which is currently being offered for free. Over time, with deep engagement with our users, we expect to offer premium solutions.
|
||||
{% endtrans %}
|
||||
{% else %}
|
||||
{% trans vpn=vpn, lockbox=lockbox %}
|
||||
The overhaul of our core browser has given Mozilla Corporation the ability to begin the exploration
|
||||
of new user engagement and revenue models derived from Firefox to meet these ambitious goals.
|
||||
Specifically in 2018 we began testing in Firefox a new paid virtual private network
|
||||
(<a href="{{ vpn }}">VPN</a>) service and a password manager called <a href="{{ lockbox }}">Lockbox</a>
|
||||
which is currently being offered for free. Over time, with deep engagement with our users, we expect
|
||||
to offer premium solutions.
|
||||
{% endtrans %}
|
||||
{% endif %}
|
||||
{% trans vpn=vpn, lockwise=lockwise %}
|
||||
The overhaul of our core browser has given Mozilla Corporation the ability to begin the exploration of new user engagement and revenue models derived from Firefox to meet these ambitious goals. Specifically in 2018 we began testing in Firefox a new paid virtual private network (<a href="{{ vpn }}">VPN</a>) service and a password manager called <a href="{{ lockwise }}">Lockwise</a> which is currently being offered for free. Over time, with deep engagement with our users, we expect to offer premium solutions.
|
||||
{% endtrans %}
|
||||
</p>
|
||||
<p>
|
||||
{% trans sponsored='https://blog.mozilla.org/futurereleases/2018/04/30/a-privacy-conscious-approach-to-sponsored-content/' %}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
#}
|
||||
|
||||
{% set_lang_files "foundation/index" %}
|
||||
{% extends "base-article.html" %}
|
||||
|
||||
{% block page_title_suffix %}{% endblock %}
|
||||
|
|
|
@ -118,9 +118,7 @@
|
|||
|
||||
</ul>
|
||||
|
||||
{% if l10n_has_tag('trademarks-policy-0918') %}
|
||||
<p>{{ _(' For example, you cannot name your add-on “Firefox NewGadget Extension”. However, it would be acceptable to name your add-on "NewGadget Extension for Firefox”.') }}</p>
|
||||
{% endif %}
|
||||
|
||||
<h4 id="social-media">{{ _('Social Media Guidelines') }}</h4>
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
#}
|
||||
|
||||
{%- set_lang_files "main" -%}
|
||||
{% extends "base-article.html" %}
|
||||
|
||||
{% set navigation_bar = [
|
||||
|
|
|
@ -8,8 +8,6 @@
|
|||
|
||||
{% extends "base-protocol-mozilla.html" %}
|
||||
|
||||
{% set_lang_files "mozorg/about/manifesto" %}
|
||||
|
||||
{% from 'macros.html' import twitter_share_url with context %}
|
||||
|
||||
{% block page_title %}{{ ftl('manifesto-details-the-mozilla-manifesto') }}{% endblock %}
|
||||
|
|
|
@ -12,7 +12,6 @@ from bedrock.mozorg.tests import TestCase
|
|||
|
||||
|
||||
@patch("bedrock.newsletter.forms.get_lang_choices", lambda *x: [["en", "English"], ["fr", "French"], ["pt", "Portuguese"]])
|
||||
@patch("lib.l10n_utils.translations_for_template", lambda *x: ["en-US", "fr", "pt-BR", "af"])
|
||||
class TestNewsletterFooter(TestCase):
|
||||
def setUp(self):
|
||||
self.view_name = "newsletter.subscribe"
|
||||
|
|
|
@ -224,14 +224,9 @@ PROD_LANGUAGES = (
|
|||
"zu",
|
||||
)
|
||||
|
||||
LOCALES_PATH = DATA_PATH / "locale"
|
||||
default_locales_repo = "www.mozilla.org" if DEV else "bedrock-l10n"
|
||||
default_locales_repo = "https://github.com/mozilla-l10n/{}".format(default_locales_repo)
|
||||
LOCALES_REPO = config("LOCALES_REPO", default=default_locales_repo)
|
||||
GITHUB_REPO = "https://github.com/mozilla/bedrock"
|
||||
|
||||
# Global L10n files.
|
||||
DOTLANG_FILES = ["main"]
|
||||
FLUENT_DEFAULT_FILES = [
|
||||
"banners/firefox-app-store",
|
||||
"banners/fundraising",
|
||||
|
@ -268,8 +263,6 @@ FLUENT_PATHS = [
|
|||
# remote FTL files from l10n team
|
||||
FLUENT_REPO_PATH,
|
||||
]
|
||||
FLUENT_MIGRATIONS = "lib.fluent_migrations"
|
||||
FLUENT_MIGRATIONS_PATH = ROOT_PATH / "lib" / "fluent_migrations"
|
||||
|
||||
# templates to exclude from having an "edit this page" link in the footer
|
||||
# these are typically ones for which most of the content is in the DB
|
||||
|
@ -502,22 +495,6 @@ PROJECT_MODULE = "bedrock"
|
|||
|
||||
ROOT_URLCONF = "bedrock.urls"
|
||||
|
||||
# Tells the extract script what files to look for L10n in and what function
|
||||
# handles the extraction.
|
||||
PUENTE = {
|
||||
"BASE_DIR": ROOT,
|
||||
"PROJECT": "Bedrock",
|
||||
"MSGID_BUGS_ADDRESS": "https://bugzilla.mozilla.org/enter_bug.cgi?product=www.mozilla.org&component=L10N",
|
||||
"DOMAIN_METHODS": {
|
||||
"django": [
|
||||
("bedrock/**.py", "lib.l10n_utils.extract.extract_python"),
|
||||
("bedrock/**/templates/**.html", "lib.l10n_utils.extract.extract_jinja2"),
|
||||
("bedrock/**/templates/**.js", "lib.l10n_utils.extract.extract_jinja2"),
|
||||
("bedrock/**/templates/**.jsonp", "lib.l10n_utils.extract.extract_jinja2"),
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def get_app_name(hostname):
|
||||
"""
|
||||
|
@ -573,7 +550,6 @@ INSTALLED_APPS = (
|
|||
# Third-party apps, patches, fixes
|
||||
"commonware.response.cookies",
|
||||
# L10n
|
||||
"puente", # for ./manage.py extract
|
||||
"product_details",
|
||||
# third-party apps
|
||||
"django_jinja_markdown",
|
||||
|
@ -652,12 +628,9 @@ WATCHMAN_CHECKS = (
|
|||
"watchman.checks.databases",
|
||||
)
|
||||
|
||||
LOCALE_PATHS = (str(LOCALES_PATH),)
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
"BACKEND": "django_jinja.backend.Jinja2",
|
||||
"DIRS": LOCALE_PATHS,
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"match_extension": None,
|
||||
|
@ -690,8 +663,6 @@ TEMPLATES = [
|
|||
"django_jinja.builtins.extensions.StaticFilesExtension",
|
||||
"django_jinja.builtins.extensions.DjangoFiltersExtension",
|
||||
"lib.l10n_utils.template.i18n",
|
||||
"lib.l10n_utils.template.l10n_blocks",
|
||||
"lib.l10n_utils.template.lang_blocks",
|
||||
"django_jinja_markdown.extensions.MarkdownExtension",
|
||||
],
|
||||
},
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
#!/bin/bash
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
|
||||
TARGET=$1
|
||||
LOCKFILE="/tmp/compile-mo-${2}.lock"
|
||||
|
||||
function usage() {
|
||||
echo "syntax:"
|
||||
echo " compile-mo.sh locale-dir/ [unique]"
|
||||
echo "unique is an optional string that will be used as the name of the lockfile"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# check if file and dir are there
|
||||
if [[ ($# -gt 2) || (! -d "$TARGET") ]]; then usage; fi
|
||||
|
||||
# check if the lockfile exists
|
||||
if [ -e $LOCKFILE ]; then
|
||||
echo "$LOCKFILE present, exiting"
|
||||
exit 99
|
||||
fi
|
||||
|
||||
touch $LOCKFILE
|
||||
for lang in `find $TARGET -type f -name "*.po"`; do
|
||||
dir=`dirname $lang`
|
||||
stem=`basename $lang .po`
|
||||
msgfmt -o ${dir}/${stem}.mo $lang
|
||||
done
|
||||
rm $LOCKFILE
|
|
@ -1,210 +0,0 @@
|
|||
.. This Source Code Form is subject to the terms of the Mozilla Public
|
||||
.. License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
.. file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
.. _fluent:
|
||||
|
||||
======================
|
||||
L10n Fluent Conversion
|
||||
======================
|
||||
|
||||
There are some tools that exist now but are only useful during our conversion
|
||||
from .lang to .ftl files. This document will cover the usage of these.
|
||||
|
||||
If you've got a translated page you'd like to convert as-is to the Fluent system
|
||||
then you can follow this procedure to get a big head start.
|
||||
|
||||
The key concept in converting a page to Fluent is a recipe. The recipe is a
|
||||
piece of python code that can programmatically generate a Fluent file. It can
|
||||
use existing Fluent files as templates, and .lang localizations as data sources.
|
||||
|
||||
All the functionality is provided by the ``fluent`` management command via
|
||||
subcommands for each phase.
|
||||
|
||||
Create a recipe from a template
|
||||
===============================
|
||||
|
||||
The first step is to create the recipe. Let's say you want to convert
|
||||
``bedrock/mozorg/templates/mozorg/mission.html``, then you'll run
|
||||
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make run-shell
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./manage.py fluent recipe bedrock/mozorg/templates/mozorg/mission.html
|
||||
|
||||
This will parse all of the calls to ``_()`` and the ``trans`` blocks, process the strings in the
|
||||
same way the old string extraction process did, and create new Fluent string IDs.
|
||||
It will generate the recipe in ``lib/fluent_migrations/mozorg/mission.py``. The recipe name is based
|
||||
on the template name after ``templates``.
|
||||
|
||||
Sanitize recipe
|
||||
===============
|
||||
|
||||
The recipe creates migrations for each localizable string in the template,
|
||||
with some possibly bad string IDs. At this point, you want to change
|
||||
the IDs to be conforming with the best practices laid out in the l10n docs.
|
||||
The existing recipe will already have the template name as prefix, though.
|
||||
|
||||
You can also choose to remove strings from the conversion, if you just
|
||||
want to convert a subset of the strings.
|
||||
|
||||
The migrations will automatically add ``REPLACE()`` helpers when it detects
|
||||
that any of the strings in ``brands.ftl`` are in the text. Make sure these
|
||||
are correct, and remove any of them that shouldn't be used. If you need
|
||||
to add any that it missed they should look like the following:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/switch.ftl",
|
||||
"firefox/switch.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-switching-to-firefox-is-fast"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"Switching to Firefox is fast, easy and risk-free, because Firefox imports your bookmarks, autofills, passwords and preferences from Chrome.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome")
|
||||
}
|
||||
)
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
Once you're happy with the recipe, you can create the Fluent files and the template.
|
||||
|
||||
Convert a .lang file to English .ftl
|
||||
====================================
|
||||
|
||||
The next step is to convert an existing english .lang file into an equivalent
|
||||
.ftl file in the ``en`` folder of the ``l10n`` directory in bedrock. Let's
|
||||
continue with the example of ``mission.html``; you would run:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make run-shell
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./manage.py fluent ftl bedrock/mozorg/templates/mozorg/mission.html
|
||||
|
||||
This should create ``l10n/en/mozorg/mission.ftl`` which has all of the strings
|
||||
in the order in which they appear in the template.
|
||||
|
||||
You want to sanitize this Fluent file by adding license headers, file comments
|
||||
with staging URLs, as well as comments individual strings or groups of strings.
|
||||
|
||||
It's a good idea to add the new Fluent file to a project config, and validate
|
||||
it for errors like duplicated IDs.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ moz-l10n-lint l10n/l10n-pontoon.toml
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ moz-l10n-lint l10n/l10n-vendor.toml
|
||||
|
||||
Convert the template
|
||||
====================
|
||||
|
||||
With the recipe created in the first step, you'll do the following
|
||||
(assuming your docker shell is still running):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./manage.py fluent template bedrock/mozorg/templates/mozorg/mission.html
|
||||
|
||||
This will reparse the template much in the same way it did when creating the recipe.
|
||||
It will inspect the recipe to see which legacy strings map to which ID, that you've
|
||||
chosen when you sanitized the recipe. It will then take this mapping of IDs and replace all of the old calls with new calls to ``ftl()``.
|
||||
If there are any issues you should see warnings printed to your screen, but always inspect the new
|
||||
template and give the page a test run to make sure all is working as expected.
|
||||
|
||||
Convert the View or URL
|
||||
-----------------------
|
||||
|
||||
To get it working on the site you do have to do a bit more. The above step creates a new template
|
||||
with a ``_ftl.html`` suffix instead of overwriting the old one so that you can compare them before
|
||||
removing the old one. You can then either delete the old one and rename the new one with the original
|
||||
name, or keep them both for a while if you may need to quickly switch back. You then need to specify
|
||||
which .ftl file to use by passing it (or them) to the ``l10n_utils.render`` function in the view,
|
||||
or the ``page()`` function in urls.py. See the :ref:`specifying_fluent_files` section for more details.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# urls.py
|
||||
urlpatterns = [
|
||||
page('mission', 'mozorg/mission.html', ftl_files=['mozorg/mission']),
|
||||
]
|
||||
|
||||
# views.py
|
||||
def mission_view(request):
|
||||
return l10n_utils.render(request, 'mozorg/mission.html', ftl_files=['mozorg/mission'])
|
||||
|
||||
.. note::
|
||||
|
||||
If you are using the ``page()`` helper and switch to the new template name that will also change
|
||||
the name of the URL referenced by calls to ``url`` and ``reverse`` around the site. To avoid this
|
||||
you can pass the original name to the page function, e.g. ``url_name='mozorg.mission'``.
|
||||
|
||||
Port the translations
|
||||
=====================
|
||||
|
||||
The remaining step is to port all of the existing translation in the .lang files over to .ftl
|
||||
files in our fluent files repo.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./manage.py fluent ftl bedrock/mozorg/templates/mozorg/mission.html de it
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ ./manage.py fluent ftl lib/fluent_migrations/mozorg/mission.py de it
|
||||
|
||||
This is the same command we used to create the original ``en`` Fluent file.
|
||||
As you can see, you can specify both the template path here as well as the
|
||||
recipe path.
|
||||
|
||||
Before you run this, make sure to update the local clones of your l10n repositories.
|
||||
|
||||
This command will use the Fluent file you edited as template, read the legacy translations
|
||||
from ``locale`` and write the generated Fluent files for each locale into the ``data/www-l10n/`` directory.
|
||||
|
||||
Append each locale you wish to convert in a space-separated list. You can find the full
|
||||
list of supported locales in the `Pontoon configuration file`_ and below in a space-separated
|
||||
format for easier copy and paste (note this list may differ from the current list of active locales
|
||||
if these docs fall out of sync; compare to the latest Pontoon configuration to be safe.)
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
ach af am an ar ast az azz be bg bn br bs ca cak crh cs cy da de dsb el en-CA en-GB eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hto hu hy-AM ia id is it ja ka kab kk km kn ko lij lo lt ltg lv mk ml mr ms my nb-NO ne-NP nl nn-NO nv oc pa-IN pai pbb pl pt-BR pt-PT qvi rm ro ru si sk sl son sq sr sv-SE sw ta te th tl tr trs uk ur uz vi wo xh zam zh-CN zh-TW zu
|
||||
|
||||
.. _Pontoon configuration file: https://github.com/mozilla/bedrock/blob/master/l10n/configs/pontoon.toml
|
||||
|
||||
Commit
|
||||
======
|
||||
|
||||
Once a migration has been run and looks good locally, the next step is to commit all
|
||||
of these changes and push them to where they need to be: a pull request to bedrock for
|
||||
the template and English .ftl file changes, and a pull request to the mozilla-l10n/www-l10n
|
||||
repo for the translated .ftl files and config changes (don't forget to include the `en`
|
||||
.ftl file too).
|
||||
|
||||
Becuase migrations involve converting existing .lang files to a new format, it's best that
|
||||
they are carefully reviewed by the L10n team. Having the migration reviewed before the
|
||||
bedrock PR merges is also often a good idea, because then the recipe can be tweaked and
|
||||
run again if needed (fixing typos or missing brand names, adding comments etc).
|
||||
|
||||
Because migrations should be run manually, you can opt-out of the regular L10n automation
|
||||
that happens in bedrock by including ``[skip l10n]`` in the commit message. This will prevent
|
||||
a second pull request being opened, that would contain only the `en` content changes.
|
||||
|
||||
Once the translated files have been reviewed and merged in the mozilla-l10n/www-l10n repo,
|
||||
you should be able to pull those files back into bedrock by running ``./manage.py l10n_update``.
|
|
@ -24,7 +24,6 @@ Contents
|
|||
|
||||
install
|
||||
l10n
|
||||
fluent-conversion
|
||||
coding
|
||||
contribute
|
||||
pipeline
|
||||
|
|
398
docs/l10n.rst
398
docs/l10n.rst
|
@ -8,28 +8,26 @@
|
|||
Localization
|
||||
============
|
||||
|
||||
The site is fully localizable. Localization files are not shipped with the code
|
||||
distribution, but are available in separate GitHub repositories. The proper repos
|
||||
can be cloned and kept up-to-date using the ``l10n_update`` management command:
|
||||
The site is fully localizable. Localization files are not shipped with the code distribution, but
|
||||
are available in separate GitHub repositories. The proper repos can be cloned and kept up-to-date
|
||||
using the ``l10n_update`` management command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_update
|
||||
|
||||
If you don't already have a ``data/locale`` directory, this command will clone the
|
||||
git repo containing the .lang translation files (either the dev or prod files
|
||||
depending on your ``DEV`` setting). If the folder is already present, it will
|
||||
update the repository to the latest version. It does the same thing for the
|
||||
repository for the .ftl translation files in ``data/www-l10n`` directory.
|
||||
If you don't already have a ``data/www-l10n`` directory, this command will clone the git repo
|
||||
containing the .ftl translation files (either the dev or prod files depending on your ``DEV``
|
||||
setting). If the folder is already present, it will update the repository to the latest version.
|
||||
|
||||
Fluent
|
||||
======
|
||||
|
||||
Bedrock's Localization (l10n) system is based on `Project Fluent`_. This is a
|
||||
departure from the legacy system (see below) that relied on a gettext work flow
|
||||
of string extraction from template and code files, in that it relies on developers
|
||||
directly editing the default language (English in our case) Fluent files and using
|
||||
the string IDs created there in their templates and views.
|
||||
Bedrock's Localization (l10n) system is based on `Project Fluent`_. This is a departure from a
|
||||
standard Django project that relies on a gettext work flow of string extraction from template and
|
||||
code files, in that it relies on developers directly editing the default language (English in our
|
||||
case) Fluent files and
|
||||
using the string IDs created there in their templates and views.
|
||||
|
||||
The default files for the Fluent system live in the ``l10n`` directory in the root
|
||||
of the bedrock project. This directory houses directories for each locale the developers
|
||||
|
@ -39,10 +37,6 @@ are plain and easy to understand English, as free from colloquialisms as possibl
|
|||
translators are able to easily understand the meaning of the string, and can then add their
|
||||
own local flair to the ideas.
|
||||
|
||||
.. note::
|
||||
|
||||
We have some :ref:`fluent tools <fluent>` to aid in the transition from the legacy system.
|
||||
|
||||
.. _Project Fluent: https://projectfluent.org/
|
||||
|
||||
.ftl files
|
||||
|
@ -350,12 +344,11 @@ FTL files for that template (or a single file name if that's all you need).
|
|||
|
||||
return [template_name]
|
||||
|
||||
If you need for your URL to use multiple Fluent files to determine the full list of active locales,
|
||||
for example when you are redesigning a page and have multiple templates in use for a single URL depending
|
||||
on locale, you can use the `activation_files` parameter. This should be a list of FTL filenames
|
||||
(or template file names if they are still using .lang) that should all be used when determining the full
|
||||
list of translations for the URL. Bedrock will gather the full list for each file and combine them into a
|
||||
single list so that the footer language switcher works properly.
|
||||
If you need for your URL to use multiple Fluent files to determine the full list of active locales, for
|
||||
example when you are redesigning a page and have multiple templates in use for a single URL depending on
|
||||
locale, you can use the `activation_files` parameter. This should be a list of FTL filenames that should all
|
||||
be used when determining the full list of translations for the URL. Bedrock will gather the full list for each
|
||||
file and combine them into a single list so that the footer language switcher works properly.
|
||||
|
||||
Using in a view function
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -383,7 +376,7 @@ via a set of configuration files:
|
|||
|
||||
Each configuration file consists of a pre-defined set of locales for which each group is
|
||||
responsible for translating. The locales defined in each file should not be changed without
|
||||
first consulting the with L10n team, and such changes should not be a regular occurence.
|
||||
first consulting the with L10n team, and such changes should not be a regular occurrence.
|
||||
|
||||
To establish a localization strategy for a Fluent file, it needs to be included as a path
|
||||
in one or more configuration files. For example:
|
||||
|
@ -561,309 +554,6 @@ merged by the L10n team, everything is done.
|
|||
|
||||
.. _mozilla-l10n/www-l10n: https://github.com/mozilla-l10n/www-l10n
|
||||
|
||||
Legacy
|
||||
======
|
||||
|
||||
This section describes the legacy l10n system based on .lang files, which will
|
||||
be frozen and no longer supported for new translations in January of 2020.
|
||||
|
||||
.lang files
|
||||
-----------
|
||||
|
||||
Bedrock supports a workflow similar to gettext. You extract all the
|
||||
strings from the codebase, then merge them into each locale to get
|
||||
them translated.
|
||||
|
||||
The files containing the strings are called ".lang files" and end with
|
||||
a ``.lang`` extension.
|
||||
|
||||
To extract all the strings from the codebase, run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_extract
|
||||
|
||||
If you'd only like to extract strings from certain files, you may optionally
|
||||
list them on the command line:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_extract bedrock/mozorg/templates/mozorg/contribute.html
|
||||
|
||||
Command line glob matching will work as well if you want all of the HTML files
|
||||
in a directory, for example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_extract bedrock/mozorg/templates/mozorg/*.html
|
||||
|
||||
That will use gettext to get all the needed localizations from Python
|
||||
and HTML files, and will convert the result into a series of .lang
|
||||
files inside ``locale/templates``. This directory represents the
|
||||
"reference" set of strings to be translated, and you are free to
|
||||
modify or split up .lang files here as needed (just make sure they are
|
||||
being referenced correctly, from the code, see
|
||||
:ref:`Which .lang file should it use? <which-lang>`).
|
||||
|
||||
Once you have extracted .lang files locally, they can then be added via
|
||||
pull request to the `mozilla.org l10n repository`_ for translation.
|
||||
You can read the `full documentation`_ for more information on the
|
||||
extraction workflow.
|
||||
|
||||
.. _using-lang:
|
||||
|
||||
Translating with .lang files
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To translate a string from a .lang file, simply use the gettext interface.
|
||||
|
||||
In a jinja2 template:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
<div>{{ _('Hello, how are you?') }}<div>
|
||||
|
||||
<div>{{ _('<a href="%s">Click here</a>')|format('http://mozilla.org/') }}</div>
|
||||
|
||||
<div>{{ _('<a href="%(url)s">Click here</a>')|format(url='http://mozilla.org/') }}</div>
|
||||
|
||||
Note the usage of variable substitution in the latter examples. It is
|
||||
important not to hardcode URLs or other parameters in the string.
|
||||
jinja's `format` filter lets us apply variables outsite of the string.
|
||||
|
||||
You can provide a one-line comment to the translators like this:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{# L10n: "like" as in "similar to", not "is fond of" #}
|
||||
{{ _('Like this:') }}
|
||||
|
||||
The comment will be included in the .lang files above the string to be
|
||||
translated.
|
||||
|
||||
In a Python file, use ``lib.l10n_utils.dotlang._`` or
|
||||
``lib.l10n_utils.dotlang._lazy``, like this:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from lib.l10n_utils.dotlang import _lazy as _
|
||||
|
||||
sometext = _('Foo about bar.')
|
||||
|
||||
You can provide a one-line comment to the translators like this:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# L10n: "like" as in "similar to", not "is fond of"
|
||||
sometext = _('Like this:')
|
||||
|
||||
The comment will be included in the .lang files above the string to be
|
||||
translated.
|
||||
|
||||
|
||||
There's another way to translate content within jinja2 templates. If
|
||||
you need a big chunk of content translated, you can put it all inside
|
||||
a `trans` block.
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% trans %}
|
||||
<div>Hello, how are you</div>
|
||||
{% endtrans %}
|
||||
|
||||
{% trans url='http://mozilla.org' %}
|
||||
<div><a href="{{ url }}">Click here</a></div>
|
||||
{% endtrans %}
|
||||
|
||||
Note that it also allows variable substitution by passing variables
|
||||
into the block and using template variables to apply them.
|
||||
|
||||
|
||||
.. _which-lang:
|
||||
|
||||
Which .lang file should it use?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Translated strings are split across several .lang files to make it
|
||||
easier to manage separate projects and pages. So how does the system
|
||||
know which one to use when translating a particular string?
|
||||
|
||||
* All translations from Python files are put into main.lang. This
|
||||
should be a very limited set of strings and most likely should be
|
||||
available to all pages.
|
||||
* Templates always load `main.lang` and `download_button.lang`.
|
||||
* Additionally, each template has its own .lang file, so a template at
|
||||
`mozorg/firefox.html` would use the .lang file at
|
||||
`<locale>/mozorg/firefox.lang`.
|
||||
* Templates can override which .lang files are loaded. The above
|
||||
global ones are always loaded, but instead of loading
|
||||
`<locale>/mozorg/firefox.lang`, the template can specify a list of
|
||||
additional lang files to load with a template block:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% add_lang_files "foo" "bar" %}
|
||||
|
||||
That will make the page load `foo.lang` and `bar.lang` in addition to
|
||||
`main.lang` and `download_button.lang`.
|
||||
|
||||
When strings are extracted from a template, they are added to the
|
||||
template-specific .lang file. If the template explicitly specifies
|
||||
.lang files like above, it will add the strings to the first .lang
|
||||
file specified, so extracted strings from the above template would go
|
||||
into `foo.lang`.
|
||||
|
||||
You can similarly specify extra .lang files in your Python source as well.
|
||||
Simply add a module-level constant in the file named `LANG_FILES`. The
|
||||
value should be either a string, or a list of strings, similar to the
|
||||
`add_lang_files` tag above.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# forms.py
|
||||
|
||||
from lib.l10n_utils.dotlang import _
|
||||
|
||||
LANG_FILES = ['foo', 'bar']
|
||||
|
||||
sometext = _('Foo about bar.')
|
||||
|
||||
This file's strings would be extracted to `foo.lang`, and the lang files
|
||||
`foo.lang`, `bar.lang`, `main.lang` and `download_button.lang` would be
|
||||
searched for matches in that order.
|
||||
|
||||
l10n blocks
|
||||
-----------
|
||||
|
||||
Bedrock also has a block-based translation system that works like the
|
||||
``{% block %}`` template tag, and marks large sections of translatable
|
||||
content. This should not be used very often; lang files are the
|
||||
preferred way to translate content. However, there may be times when
|
||||
you want to control a large section of a page and customize it
|
||||
without caring very much about future updates to the English page.
|
||||
|
||||
A Localizers' guide to l10n blocks
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Let's look at how we would translate an example file from **English** to
|
||||
**German**.
|
||||
|
||||
The English source template, created by a developer, lives under
|
||||
`apps/appname/templates/appname/example.html` and looks like this:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% extends "base-protocol.html" %}
|
||||
|
||||
{% block content %}
|
||||
<img src="someimage.jpg">
|
||||
|
||||
{% l10n foo, 20110801 %}
|
||||
<h1>Hello world!</h1>
|
||||
{% endl10n %}
|
||||
|
||||
<hr>
|
||||
|
||||
{% l10n bar, 20110801 %}
|
||||
<p>This is an example!</p>
|
||||
{% endl10n %}
|
||||
{% endblock %}
|
||||
|
||||
The ``l10n`` blocks mark content that should be localized.
|
||||
Realistically, the content in these blocks would be much larger. For a
|
||||
short string like above, please use lang files. We'll use this trivial
|
||||
code for our example though.
|
||||
|
||||
The ``l10n`` blocks are named and tagged with a date (in ISO format).
|
||||
The date indicates the time that this content was updated and needs to
|
||||
be translated. If you are changing trivial things, you shouldn't
|
||||
update it. The point of l10n blocks is that localizers completely
|
||||
customize the content, so they don't care about small updates.
|
||||
However, you may add something important that needs to be added in the
|
||||
localized blocks; hence, you should update the date in that case.
|
||||
|
||||
When the command ``./manage.py l10n_extract`` is run, it generates
|
||||
the corresponding files in the ``locale`` folder (see below for more
|
||||
info on this command).
|
||||
|
||||
The German version of this template is created at
|
||||
``locale/de/templates/appname/example.html``. The contents of it are:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% extends "appname/example.html" %}
|
||||
|
||||
{% l10n foo %}
|
||||
<h1>Hello world!</h1>
|
||||
{% endl10n %}
|
||||
|
||||
{% l10n bar %}
|
||||
<p>This is an example!</p>
|
||||
{% endl10n %}
|
||||
|
||||
This file is an actual template for the site. It extends the main
|
||||
template and contains a list of l10n blocks which override the content
|
||||
on the page.
|
||||
|
||||
The localizer just needs to translate the content in the l10n blocks.
|
||||
|
||||
When the reference template is updated with new content and the date
|
||||
is updated on an l10n block, the generated l10n file will simply add
|
||||
the new content. It will look like this:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% extends "appname/example.html" %}
|
||||
|
||||
{% l10n foo %}
|
||||
<h1>This is an English string that needs translating.</h1>
|
||||
{% was %}
|
||||
<h1>Dies ist ein English string wurde nicht.</h1>
|
||||
{% endl10n %}
|
||||
|
||||
{% l10n bar %}
|
||||
<p>This is an example!</p>
|
||||
{% endl10n %}
|
||||
|
||||
Note the ``was`` block in ``foo``. The old translated content is in
|
||||
there, and the new content is above it. The ``was`` content is always
|
||||
shown on the site, so the old translation still shows up. The
|
||||
localizer needs to update the translated content and remove the ``was``
|
||||
block.
|
||||
|
||||
Generating the locale files
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_check
|
||||
|
||||
This command will check which blocks need to be translated and update
|
||||
the locale templates with needed translations. It will copy the
|
||||
English blocks into the locale files if a translation is needed.
|
||||
|
||||
You can specify a list of locales to update:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_check fr
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./manage.py l10n_check fr de es
|
||||
|
||||
Currency
|
||||
--------
|
||||
|
||||
When dealing with currency, make a separate gettext wrapper, placing the amount
|
||||
inside a variable. You should also include a comment describing the intent. For
|
||||
example:
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{# L10n: Inserts a sum in US dollars, e.g. '$100'. Adapt the string in your translation for your locale conventions if needed, ex: %(sum)s US$ #}
|
||||
{{ _('$%(sum)s')|format(sum='15') }}
|
||||
|
||||
CSS
|
||||
---
|
||||
|
||||
|
@ -958,42 +648,15 @@ Sans* and *X-LocaleSpecific* so locale-specific fonts, if defined, will be
|
|||
applied to localized pages. The variant mixins, ``.open-sans-light`` and
|
||||
``.open-sans-extrabold``, are also available.
|
||||
|
||||
Staging Copy Changes
|
||||
--------------------
|
||||
|
||||
The need will often arise to push a copy change to production before the new
|
||||
copy has been translated for all locales. To prevent locales not yet translated
|
||||
from displaying English text, you can use the ``l10n_has_tag`` template
|
||||
function. For example, if the string "Firefox benefits" needs to be changed to
|
||||
"Firefox features":
|
||||
|
||||
.. code-block:: jinja
|
||||
|
||||
{% if l10n_has_tag('firefox_products_headline_spring_2016') %}
|
||||
<h1>{{ _('Firefox features') }}</h1>
|
||||
{% else %}
|
||||
<h1>{{ _('Firefox benefits') }}</h1>
|
||||
{% endif %}
|
||||
|
||||
This function will check the .lang file(s) of the current page for the tag
|
||||
``firefox_products_headline_spring_2016``. If it exists, the translation for
|
||||
"Firefox features" will be displayed. If not, the pre-existing translation for
|
||||
"Firefox benefits" will be displayed.
|
||||
|
||||
When using ``l10n_has_tag``, be sure to coordinate with the localization team to
|
||||
decide on a good tag name. Always use underscores instead of hyphens if you need
|
||||
to visually separate words.
|
||||
|
||||
All
|
||||
===
|
||||
|
||||
Locale-specific Templates
|
||||
-------------------------
|
||||
|
||||
While the ``l10n_has_tag`` or ``ftl_has_messages`` template functions are great in small doses,
|
||||
they don't scale particularly well. A template filled with conditional copy can be
|
||||
difficult to comprehend, particularly when the conditional copy has associated
|
||||
CSS and/or JavaScript.
|
||||
While the ``ftl_has_messages`` template function is great in small doses, it doesn't scale
|
||||
particularly well. A template filled with conditional copy can be difficult to comprehend,
|
||||
particularly when the conditional copy has associated CSS and/or JavaScript.
|
||||
|
||||
In instances where a large amount of a template's copy needs to be changed, or
|
||||
when a template has messaging targeting one particular locale, creating a
|
||||
|
@ -1015,12 +678,6 @@ render it instead of the originally specified (locale-agnostic) template.
|
|||
feature was introduced, but it is now. So you can create your en-US-only
|
||||
template and the rest of the locales will continue to use the default.
|
||||
|
||||
.. IMPORTANT::
|
||||
|
||||
Note that the presence of an L10n template (e.g.
|
||||
``locale/de/templates/firefox/new.html``) will take precedence over
|
||||
a locale-specific template in bedrock.
|
||||
|
||||
|
||||
Specifying Active Locales in Views
|
||||
----------------------------------
|
||||
|
@ -1072,18 +729,3 @@ from the lang files then you can use the `add_active_locales` name in all of the
|
|||
This is useful in situations where we would have needed the l10n team to create an empty .lang file with
|
||||
an active tag in it because we have a locale-specific-template with text in the language hard-coded into
|
||||
the template and therefore do not otherwise need a .lang file.
|
||||
|
||||
Development
|
||||
-----------
|
||||
|
||||
In local development environments and on demo servers all ``l10n_has_tag`` calls
|
||||
evaluate to true. If the content has not been translated it will display
|
||||
the English strings.
|
||||
|
||||
To test l10n locally you can set ``DEV=False`` in your ``.env`` file.
|
||||
|
||||
If you are running your local server you will need to restart it after altering
|
||||
your ``.env`` file.
|
||||
|
||||
.. _mozilla.org l10n repository: https://github.com/mozilla-l10n/www.mozilla.org/
|
||||
.. _full documentation: https://mozilla-l10n.github.io/documentation/products/mozilla_org/
|
||||
|
|
|
@ -21,21 +21,17 @@ Usage
|
|||
|
||||
{% from "macros.html" import send_to_device with context %}
|
||||
|
||||
2. Add the appropriate lang file to the page template::
|
||||
|
||||
{% add_lang_files "firefox/sendto" %}
|
||||
|
||||
3. Make sure necessary files are in your CSS/JS bundles:
|
||||
2. Make sure necessary files are in your CSS/JS bundles:
|
||||
|
||||
- ``'css/protocol/components/send-to-device.scss'``
|
||||
|
||||
- ``'js/base/send-to-device.js'``
|
||||
|
||||
4. Include the macro in your page template::
|
||||
3. Include the macro in your page template::
|
||||
|
||||
{{ send_to_device() }}
|
||||
|
||||
5. Initialize the widget:
|
||||
4. Initialize the widget:
|
||||
|
||||
In your page JS, initialize the widget using::
|
||||
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
not_found = "mozorg/404.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/base/templates/404.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"404.ftl",
|
||||
"404.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
not-found-page-not-found-page-page-not-found = {COPY(not_found, "404: Page Not Found",)}
|
||||
not-found-page-sorry-we-cant-find-that-page = {COPY(not_found, "Sorry, we can’t find that page",)}
|
||||
not-found-page-were-all-about-a-healthy-internet = {COPY(not_found, "We’re all about a healthy internet but sometimes broken URLs happen.",)}
|
||||
not-found-page-go-back = {COPY(not_found, "Go Back",)}
|
||||
""",
|
||||
not_found=not_found,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("not-found-page-learn-about-mozilla-the-non"),
|
||||
value=REPLACE(
|
||||
not_found,
|
||||
'<a href="%(about)s">Learn</a> about Mozilla, the non-profit behind Firefox.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(about)s": VARIABLE_REFERENCE("about"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("not-found-page-explore-the-entire-family-for"),
|
||||
value=REPLACE(
|
||||
not_found,
|
||||
"<a href=%(explore)s>Explore</a> the entire family for Firefox products designed to respect your privacy.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(explore)s": VARIABLE_REFERENCE("explore"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("not-found-page-download-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
not_found,
|
||||
"<a href=%(download)s>Download</a> the Firefox browser for your mobile device or desktop",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(download)s": VARIABLE_REFERENCE("download"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,38 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
error_page = "mozorg/500.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/base/templates/500.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"500.ftl",
|
||||
"500.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
error-page-error-page-internal-server-error = {COPY(error_page, "500: Internal Server Error",)}
|
||||
error-page-something-went-wrong = {COPY(error_page, "Something went wrong",)}
|
||||
error-page-its-probably-just-a-server-error = {COPY(error_page, "It’s probably just a server error and we’re working to fix it.",)}
|
||||
""",
|
||||
error_page=error_page,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("error-page-you-can-also-try-refreshing"),
|
||||
value=REPLACE(
|
||||
error_page,
|
||||
"You can also try refreshing this page or go to <a href=%(firefox)s>firefox.com</a> or <a href=%(mozilla)s>mozilla.org</a>",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(firefox)s": VARIABLE_REFERENCE("firefox"),
|
||||
"%(mozilla)s": VARIABLE_REFERENCE("mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,193 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
accounts_2019 = "firefox/accounts-2019.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/accounts-2019.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/accounts.ftl",
|
||||
"firefox/accounts.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-there-is-a-way-to"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"There is a way to protect your privacy. Join Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-get-a-firefox-account"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Get a Firefox Account – Keep your data private, safe and synced",
|
||||
{
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-take-your-stand-stay-smart = {COPY(accounts_2019, "Take your stand against an industry that’s selling your data to third parties. Stay smart and safe online with technology that fights for you.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-securely-sync-your"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Securely sync your passwords, bookmarks and tabs across all your devices. Get a Firefox Account now – One login – Power and privacy everywhere.",
|
||||
{
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-there-is-a-way-to-protect"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"There is a way to protect your privacy. <span>Join Firefox.</span>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-take-your-stand-against = {COPY(accounts_2019, "Take your stand against an industry that’s making you the product.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-youre-signed-in-to"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"You’re signed <br>in to Firefox. <br><span>Now try Firefox Monitor.</span>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-see-if-youve-been = {COPY(accounts_2019, "See if you’ve been involved in an online data breach.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-sign-in-to-monitor"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Sign In to Monitor",
|
||||
{
|
||||
"Monitor": TERM_REFERENCE("brand-name-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-join-firefox"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Join Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-enter-your-email-address = {COPY(accounts_2019, "Enter your email address to get started.",)}
|
||||
firefox-accounts-already-have-an-account = {COPY(accounts_2019, "Already have an account?",)}
|
||||
firefox-accounts-sign-in = {COPY(accounts_2019, "Sign In",)}
|
||||
firefox-accounts-meet-our-family-of = {COPY(accounts_2019, "Meet our family of privacy-first products.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-firefox-is-technology"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Firefox is technology that fights for you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-get-technology-that = {COPY(accounts_2019, "Get technology that fights for you.",)}
|
||||
firefox-accounts-travel-the-internet = {COPY(accounts_2019, "Travel the internet with protection, on every device.",)}
|
||||
firefox-accounts-keep-your-passwords = {COPY(accounts_2019, "Keep your passwords protected and portable.",)}
|
||||
firefox-accounts-get-a-lookout-for = {COPY(accounts_2019, "Get a lookout for data breaches.",)}
|
||||
firefox-accounts-share-large-files = {COPY(accounts_2019, "Share large files without prying eyes.",)}
|
||||
firefox-accounts-get-it-all-on-every = {COPY(accounts_2019, "Get it all on every device, without feeling trapped in a single operating system.",)}
|
||||
firefox-accounts-and-get-it-all-on = {COPY(accounts_2019, "And get it all on every device, without feeling trapped in a single operating system.",)}
|
||||
firefox-accounts-get-the-respect-you = {COPY(accounts_2019, "Get the respect you deserve.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-youll-always-get-the"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
'You’ll always get the truth from us. Everything we make and do honors our <a href="%(promise)s">Personal Data Promise</a>:',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(promise)s": VARIABLE_REFERENCE("promise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-take-less-keep-it = {COPY(accounts_2019, "Take less.<br> Keep it safe.<br> No secrets.",)}
|
||||
firefox-accounts-get-the-knowledge = {COPY(accounts_2019, "Get the knowledge to keep you safe.",)}
|
||||
firefox-accounts-learn-everything-you = {COPY(accounts_2019, "Learn everything you need to know (but don’t yet) about staying smart and safe online, from some of the world’s foremost experts.",)}
|
||||
firefox-accounts-and-be-part-of-protecting = {COPY(accounts_2019, "And be part of protecting the internet for future generations.",)}
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-accounts-help-us-build-a-better"),
|
||||
value=REPLACE(
|
||||
accounts_2019,
|
||||
"Help us build a better Firefox for all.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-accounts-get-into-the-open = {COPY(accounts_2019, "Get into the open source spirit by test-driving upcoming products.",)}
|
||||
firefox-accounts-help-us-keep-big-tech = {COPY(accounts_2019, "Help us keep Big Tech in check.",)}
|
||||
firefox-accounts-we-support-communities = {COPY(accounts_2019, "We support communities all over the world standing up for a healthier internet. Add your voice to the fight.",)}
|
||||
firefox-accounts-firefox-browser = { -brand-name-firefox-browser }
|
||||
firefox-accounts-firefox-lockwise = { -brand-name-firefox-lockwise }
|
||||
firefox-accounts-firefox-monitor = { -brand-name-firefox-monitor }
|
||||
firefox-accounts-firefox-send = { -brand-name-firefox-send }
|
||||
""",
|
||||
accounts_2019=accounts_2019,
|
||||
),
|
||||
)
|
|
@ -1,180 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
all_unified = "firefox/all-unified.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/all-unified.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/all.ftl",
|
||||
"firefox/all.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
firefox-all-check-the-system-requirements = {COPY(all_unified, "Check the system requirements",)}
|
||||
firefox-all-release-notes = {COPY(all_unified, "Release notes",)}
|
||||
firefox-all-source-code = {COPY(all_unified, "Source code",)}
|
||||
firefox-all-need-help = {COPY(all_unified, "Need help?",)}
|
||||
firefox-all-which-browser-would = {COPY(all_unified, "Which browser would you like to download?",)}
|
||||
firefox-all-get-help = {COPY(all_unified, "Get help",)}
|
||||
firefox-all-you-are-about-to-download = {COPY(all_unified, "You are about to download:",)}
|
||||
firefox-all-browser = {COPY(all_unified, "Browser:",)}
|
||||
firefox-all-platform = {COPY(all_unified, "Platform:",)}
|
||||
firefox-all-language = {COPY(all_unified, "Language:",)}
|
||||
firefox-all-sorry-we-couldnt-find = {COPY(all_unified, "Sorry, we couldn’t find the download you’re looking for. Please try again, or select a download from the list below.",)}
|
||||
firefox-all-the-pre-alpha-version = {COPY(all_unified, "The pre-alpha version for power users who like to hunt crashes and test new features as they’re coded.",)}
|
||||
firefox-all-64-bit-installers = {COPY(all_unified, "64-bit installers",)}
|
||||
firefox-all-choose-a-64-bit-installer = {COPY(all_unified, "Choose a 64-bit installer for computers with 64-bit processors, which allow them to allocate more RAM to individual programs — particularly important for games and other demanding applications.",)}
|
||||
firefox-all-32-bit-installers = {COPY(all_unified, "32-bit installers",)}
|
||||
""",
|
||||
all_unified=all_unified,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-download-the-firefox"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Download the Firefox Browser in English (US) and more than 90 other languages",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-everyone-deserves-access"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Everyone deserves access to the internet — your language should never be a barrier. That’s why — with the help of dedicated volunteers around the world — we make the Firefox Browser available in more than 90 languages.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-choose-which-firefox"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Choose which Firefox Browser to download in your language",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-firefox-privacy-notice"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Firefox Privacy Notice",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-learn-about-firefox"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Learn about Firefox browsers",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-the-standard-firefox"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"The standard Firefox browser — fast and private. If you’re not sure which Firefox to choose, choose this.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-get-a-sneak-peek-at"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Get a sneak peek at the latest Firefox browser features before they’re released.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-test-your-sites-against"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Test your sites against soon-to-be-released Firefox browser features with powerful, flexible DevTools that are on by default.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-count-on-stability-and"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Count on stability and ease of use with this Firefox browser built for enterprise.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-windows-installers-for"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Windows installers for corporate IT that simplify the configuration, deployment and management of the Firefox Browser.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-choose-a-32-bit-installer"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
'Choose a 32-bit installer for computers with 32-bit processors — or for older or less powerful computers. <a href="%(url)s">If you aren’t sure</a> whether to choose a 64-bit or 32-bit installer, we recommend you go with 32-bit.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-all-download-product-for"),
|
||||
value=REPLACE(
|
||||
all_unified,
|
||||
"Download %(product_label)s for %(platform)s in %(locale)s",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(product_label)s": VARIABLE_REFERENCE("product_label"),
|
||||
"%(platform)s": VARIABLE_REFERENCE("platform"),
|
||||
"%(locale)s": VARIABLE_REFERENCE("locale"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-all-msi-installers = {COPY(all_unified, "MSI installers",)}
|
||||
firefox-all-which-version = {COPY(all_unified, "Which version would you like?",)}
|
||||
firefox-all-select-your-preferred-installer = {COPY(all_unified, "Select your preferred installer",)}
|
||||
firefox-all-select-your-preferred-language = {COPY(all_unified, "Select your preferred language",)}
|
||||
firefox-all-learn-about-installers = {COPY(all_unified, "Learn about installers",)}
|
||||
firefox-all-product-firefox = { -brand-name-firefox }
|
||||
firefox-all-product-firefox-beta = { -brand-name-firefox-beta }
|
||||
firefox-all-product-firefox-developer = { -brand-name-firefox-developer-edition }
|
||||
firefox-all-product-firefox-nightly = { -brand-name-firefox-nightly }
|
||||
firefox-all-product-firefox-esr = { -brand-name-firefox-extended-support-release }
|
||||
firefox-all-product-firefox-android = { -brand-name-firefox } { -brand-name-android }
|
||||
firefox-all-product-firefox-android-beta = { -brand-name-firefox } { -brand-name-android } { -brand-name-beta }
|
||||
firefox-all-product-firefox-android-nightly = { -brand-name-firefox } { -brand-name-android } { -brand-name-nightly }
|
||||
""",
|
||||
all_unified=all_unified,
|
||||
),
|
||||
)
|
|
@ -1,173 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
best_browser = "firefox/browsers/best-browser.lang"
|
||||
best_browser = "firefox/best-browser.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/best-browser.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/best-browser.ftl",
|
||||
"firefox/browsers/best-browser.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
best-browser-find-your-best-browser = {COPY(best_browser, "Find your best browser for speed, privacy and security.",)}
|
||||
best-browser-so-many-browser-options = {COPY(best_browser, "So many browser options, but there’s only one that works best for your needs. The best browser for you should offer both speed and privacy protection.",)}
|
||||
best-browser-privacy-speed-and-security = {COPY(best_browser, "Privacy, speed, and security.",)}
|
||||
best-browser-how-to-choose-the-best = {COPY(best_browser, "How to choose the best browser for you.",)}
|
||||
best-browser-the-internet-has-become = {COPY(best_browser, "The internet has become as essential as electricity and running water, so choosing the best browser for you is more important than ever. The internet is a second office, a teacher and sometimes a medical advisor, even if your actual doctor would prefer you didn’t look up your symptoms online.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-in-the-mid-nineties"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
"In the mid-nineties, Netscape, Internet Explorer and AOL dominated the landscape. It was a simpler time when the sweet melody of dial-up internet rang across the land. You learned the meaning of patience waiting for web pages to load. Back then, all that mattered was browser speed.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-today-is-a-different = {COPY(best_browser, "Today is a different story. Ads, privacy hacks, security breaches, and fake news might have you looking at other qualities in a browser. How does the browser protect your privacy? Does it allow trackers to follow you across the web? Does it built to multitask and handle many computer and internet operations at once?",)}
|
||||
best-browser-when-you-use-a-browser = {COPY(best_browser, "When you use a browser for everything, it needs to be fast. But for the same reason, it needs to be private. A browser has access to everything you do online, so it can put you at real risk if it doesn’t have strong privacy features.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-marshall-erwin-senior"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
"Marshall Erwin, Senior Director of Trust and Security at Mozilla",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-if-youre-wondering = {COPY(best_browser, "If you’re wondering what it means to have a private or fast browser, here’s a breakdown of three things a browser should have.",)}
|
||||
best-browser-a-browser-built-for = {COPY(best_browser, "A browser built for speed.",)}
|
||||
best-browser-a-browser-is-still = {COPY(best_browser, "A browser is still a tool, so it makes sense that you’ll want to pick the best one for the job. If you’re a human who needs to work to survive, you’ll need a fast internet browser. One thing to keep in mind is a browser that runs third-party trackers is more likely to be slower than a browser that doesn’t. Third-party trackers are cookies, and while you can’t see them, they are running in the background of the site, taking up precious time. The more third-party trackers a browser blocks, the faster it can run.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-this-is-one-of-the"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
"This is one of the many reasons to choose the Firefox browser: Firefox blocks third-party trackers by default. We have other reasons and we’ll get into those later.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-a-browser-that-puts = {COPY(best_browser, "A browser that puts safety first.",)}
|
||||
best-browser-remember-the-last-massive = {COPY(best_browser, "Remember the last massive data breach? If not, it’s probably because it happens so often. Companies hold on to customer data, like their personal or financial information, and hackers steal it. If you’re making safety a priority, then a secure internet browser is the best browser for you.",)}
|
||||
best-browser-there-are-a-few-ways = {COPY(best_browser, "There are a few ways a browser can help its users stay secure. A browser that is up to date with the latest security tech can help protect your computer and websites from unwanted visitors, such as malware or computer viruses.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-the-second-is-not-storing"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
'The second is not storing too much user data. Hackers can’t steal what’s not there, which is why Firefox keeps a minimum amount of information about its users. <a href="%(data)s">Firefox knows</a> if you use the browser and your general location <a href="%(privacy)s">but not the name of your childhood pet or your favorite color.</a>',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(data)s": VARIABLE_REFERENCE("data"),
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-last-but-not-least = {COPY(best_browser, "Last but not least, a safe browser should offer tools to help you keep an eye on your accounts. Think of alerts that go straight to your email if any of your accounts get breached or icons that tell you whether a website is encrypted, (i.e., if it’s a good idea to enter your credit number on a shopping site).",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-firefox-is-offering"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
'Firefox is offering something new to keep you safe: <a href="%(monitor)s">Firefox Monitor</a>. It’s a free service that will alert you if there are any public hacks on your accounts and let you know if your accounts got hacked in the past. Another neat feature is the Green Lock. It looks like a small green icon at the top left side of the browser window. If you’re on Firefox and see the green lock, it means the website is encrypted and secure. If the lock is grey, you might want to think twice about entering any sensitive information.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(monitor)s": VARIABLE_REFERENCE("monitor"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-we-visit-hundreds-or = {COPY(best_browser, "We visit hundreds or even thousands of websites each day, and you can’t expect users to make security and privacy decisions for each of these sites. That is why a browser that gives you more control is so important - because it offers real, meaningful protection.",)}
|
||||
best-browser-a-browser-that-minds = {COPY(best_browser, "A browser that minds its business.",)}
|
||||
best-browser-privacy-on-the-web = {COPY(best_browser, "Privacy on the web is a hot button issue. If privacy is number one on your list of priorities, you want to look for a browser that takes that seriously. When choosing the best private browser for you, look at the tracking policy and how a browser handles your data. These seem like technical questions, but they’re the reason some browsers are more private than others.",)}
|
||||
best-browser-trackers-are-all-those = {COPY(best_browser, "Trackers are all those annoying “cookies” messages you get on airline sites. These third-party trackers know where you click and can be used to analyze your behavior. A private browser should give users the option to turn off third-party trackers, but ideally, turn them off by default.",)}
|
||||
best-browser-another-way-to-stop = {COPY(best_browser, "Another way to stop trackers from tracking is using private mode to browse. Any browser that claims to be private should offer browsing in private mode.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-one-easy-way-to-check"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
'One easy way to check is to visit a browser’s content setting page and privacy policy. The privacy webpage should outline if your data is shared and why. It’s why the <a href="%(privacy)s">Firefox privacy notice</a> is easy to read and easy to find.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-choosing-the-best-browser = {COPY(best_browser, "Choosing the best browser for you is a lot like choosing a home. You want to explore your options, do some research and make a decision based on what’s important to you.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("best-browser-at-firefox-weve-worked"),
|
||||
value=REPLACE(
|
||||
best_browser,
|
||||
'At <a href="%(firefox)s">Firefox</a>, we’ve worked hard to build a browser that is twice as fast as before and gives users more control over their online life.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(firefox)s": VARIABLE_REFERENCE("firefox"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
best-browser-take-control-of-your = {COPY(best_browser, "Take control of your browser.",)}
|
||||
""",
|
||||
best_browser=best_browser,
|
||||
),
|
||||
)
|
|
@ -1,238 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
browser_history = "firefox/browsers/browser-history.lang"
|
||||
browser_history = "mozorg/browser-history.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/browser-history.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/history/browser-history.ftl",
|
||||
"firefox/browsers/history/browser-history.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
browser-history-browser-history = {COPY(browser_history, "Browser History: Epic power struggles that brought us modern browsers",)}
|
||||
browser-history-the-browser-wars-underdogs-giants = {COPY(browser_history, "The browser wars, underdogs vs giants, and moments that changed the world. Read about the history of the web browser.",)}
|
||||
browser-history-the-history-of-web = {COPY(browser_history, "The History of Web Browsers",)}
|
||||
browser-history-world-history-is = {COPY(browser_history, "World history is rife with epic power struggles, world-conquering tyrants, and heroic underdogs. The history of web browsers isn’t very different. University pioneers wrote simple software that sparked an information revolution, and battle for browser superiority and internet users.",)}
|
||||
browser-history-before-web-era = {COPY(browser_history, "Before Web Era",)}
|
||||
browser-history-in-1950-computers = {COPY(browser_history, "In 1950, computers took up whole rooms and were dumber than today’s pocket calculators. But progress was swift, and by 1960 they were able to run complex programs. Governments and universities across the globe thought it would be great if the machines could talk, nurturing collaboration and scientific breakthroughs.",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-arpanet-was-the"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'<a href="%(arpanet)s">ARPANET</a> was the first successful networking project and in 1969 the first message was sent from the computer science lab at University of California, Los Angeles (UCLA) to Stanford Research Institute (SRI), also in California.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(arpanet)s": VARIABLE_REFERENCE("arpanet"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
browser-history-that-sparked-a-revolution = {COPY(browser_history, "That sparked a revolution in computer networking. New networks formed, connecting universities and research centers across the globe. But for the next 20 years, the internet wasn’t accessible to the public. It was restricted to university and government researchers, students, and private corporations. There were dozens of programs that could trade information over telephone lines, but none of them were easy to use. The real open internet, and the first web browser, wasn’t created until 1990.",)}
|
||||
browser-history-web-era = {COPY(browser_history, "Web Era",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-british-computer"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'British computer scientist Tim Berners-Lee created the first web server and graphical web browser in 1990 while <a href="%(cern)s">working at CERN</a>, the European Organization for Nuclear Research, in Switzerland. He called his new window into the internet “WorldWideWeb.” It was an easy-to-use graphical interface created for the NeXT computer. For the first time, text documents were linked together over a public network—the web as we know it.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(cern)s": VARIABLE_REFERENCE("cern"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
browser-history-a-year-later-berners = {COPY(browser_history, "A year later, Berners-Lee asked CERN math student Nicola Pellow to write the Line Mode Browser, a program for basic computer terminals.",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-by-1993-the-web"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'By 1993, the web exploded. Universities, governments, and private corporations all saw opportunity in the open internet. Everyone needed new computer programs to access it. That year, Mosaic was created at the National Center for Supercomputing Applications (NCSA) at the University of Illinois Urbana-Champaign by computer scientist Marc Andreessen. It was the very first popular web browser and the early ancestor of <a href="%(firefox)s">Mozilla Firefox</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(firefox)s": VARIABLE_REFERENCE("firefox"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-ncsa-mosaic-ran"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'NCSA Mosaic ran on Windows computers, was easy to use, and gave anyone with a PC access to early web pages, chat rooms, and image libraries. The next year (1994), Andreessen founded <a href="%(netscape)s">Netscape</a> and released Netscape Navigator to the public. It was wildly successful, and the first browser for the people. It was also the first move in a new kind of war for internet users.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(netscape)s": VARIABLE_REFERENCE("netscape"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
browser-history-the-browser-wars = {COPY(browser_history, "The Browser Wars",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-by-1995-netscape"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'By 1995, Netscape Navigator wasn’t the only way to get online. Computer software giant Microsoft licensed the old Mosaic code and built its own window to the web, <a href="%(ie)s">Internet Explorer</a>. The release sparked a war. Netscape and Microsoft worked feverishly to make new versions of their programs, each attempting to outdo the other with faster, better products.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(ie)s": VARIABLE_REFERENCE("ie"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-netscape-created"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'Netscape created and released JavaScript, which gave websites powerful computing capabilities they never had before. (They also made the infamous <a href="%(blink)s"><blink> tag</a>.) Microsoft countered with Cascading Style Sheets (CSS), which became the standard for web page design.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(blink)s": VARIABLE_REFERENCE("blink"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-things-got-a-little"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'Things got a little out of hand in 1997 when Microsoft released Internet Explorer 4.0. The team built a giant letter “e” and snuck it on the lawn of Netscape headquarters. The Netscape team promptly knocked the giant “e” over and <a href="%(dino)s">put their own Mozilla dinosaur mascot on top of it</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(dino)s": VARIABLE_REFERENCE("dino"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-then-microsoft-began"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'Then Microsoft began shipping Internet Explorer with their Windows operating system. Within 4 years, it had 75%% of the market and by 1999 it had 99%% of the market. The company faced antitrust litigation over the move, and Netscape decided to open source its codebase and created the not-for-profit <a href="%(mozilla)s">Mozilla</a>, which went on to create and release Firefox in 2002. Realizing that having a browser monopoly wasn’t in the best interests of users and the open web, Firefox was created to provide choice for web users. By 2010, Mozilla Firefox and others had <a href="%(marketshare)s">reduced Internet Explorer’s market share to 50%%</a>.',
|
||||
{
|
||||
"%%": FTL.TextElement("%"),
|
||||
"%(mozilla)s": VARIABLE_REFERENCE("mozilla"),
|
||||
"%(marketshare)s": VARIABLE_REFERENCE("marketshare"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Netscape": TERM_REFERENCE("brand-name-netscape"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-other-competitors"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
"Other competitors emerged during the late ‘90s and early 2000s, including Opera, Safari, and Google Chrome. Microsoft Edge replaced Internet Explorer with the release of Windows 10 in 2015.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
browser-history-browsing-the-web = {COPY(browser_history, "Browsing the Web Today",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-today-there-are"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'Today there are just a handful of ways to access the internet. Firefox, Google Chrome, Microsoft Edge, Safari and Opera are the main competitors. Mobile devices have emerged during the past decade as the preferred way to access the internet. Today, most internet users only use mobile browsers and <a href="%(applications)s">applications</a> to get online. Mobile versions of the major browsers are available for iOS and Android devices. While these apps are very useful for specific purposes, they only provide limited access to the web.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(applications)s": VARIABLE_REFERENCE("applications"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-in-the-future-the"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
'In the future, the web will likely stray further from its hypertext roots to become a vast sea of interactive experiences. Virtual reality has been on the horizon for decades (at least since the release of Lawnmower Man in 1992 and the Nintendo Virtual Boy in 1995), but the web may finally bring it to the masses. Firefox now has support for <a href="%(vr)s">WebVR and A-Frame</a>, which let developers quickly and easily build virtual reality websites. Most modern mobile devices support <a href="%(vr)s">WebVR</a>, and can easily be used as headsets with simple cardboard cases. A 3D virtual reality web like the one imagined by science fiction author Neal Stephenson may be just around the corner. If that’s the case, the web browser itself may completely disappear and become a true window into another world.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(vr)s": VARIABLE_REFERENCE("vr"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("browser-history-whatever-the-future"),
|
||||
value=REPLACE(
|
||||
browser_history,
|
||||
"Whatever the future of the web holds, Mozilla and Firefox will be there for users, ensuring that they have powerful tools to experience the web and all it has to offer. The web is for everyone, and everyone should have control of their online experience. That’s why we give Firefox tools to protect user privacy and we never sell user data to advertisers.",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
browser-history-resources = {COPY(browser_history, "Resources",)}
|
||||
browser-history-take-control-of = {COPY(browser_history, "Take control of your browser.",)}
|
||||
""",
|
||||
browser_history=browser_history,
|
||||
),
|
||||
)
|
|
@ -1,265 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
chrome = "firefox/compare/chrome.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/chrome.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/chrome.ftl",
|
||||
"firefox/browsers/compare/chrome.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
compare-chrome-we-compare-mozilla-firefox = {COPY(chrome, "We compare Mozilla Firefox with Google Chrome in terms of privacy, utility and portability",)}
|
||||
""",
|
||||
chrome=chrome,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-at-firefox-we-have-a-huge"),
|
||||
value=REPLACE(
|
||||
chrome,
|
||||
"At Firefox, we have a huge number of dedicated users who appreciate our steadfast dedication to online privacy. For example, the latest version of Firefox includes a feature called Enhanced Tracking Protection (ETP) which is turned on by default for all users worldwide. ETP blocks over 2,000 trackers, including social trackers from companies like Facebook, Twitter, and LinkedIn. It also has an integrated feature called <a %(attrs)s>Firefox Monitor</a> that automatically notifies you if your password has been breached or needs to be updated. In addition to these protections, Firefox's Private Browsing mode automatically deletes your browsing information such as history and cookies, leaving no trace after you finish your session.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Twitter": TERM_REFERENCE("brand-name-twitter"),
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-weve-also-recently-restated"),
|
||||
value=REPLACE(
|
||||
chrome,
|
||||
"We’ve also recently restated our commitment to privacy and transparency regarding user data in our most recent <a %(attrs)s>Privacy Notice</a> that states, “At Mozilla, we believe that privacy is fundamental to a healthy internet.”",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
compare-chrome-ultimately-its-up-to-you = {COPY(chrome, "Ultimately, it’s up to you to decide whether or not or where to draw the line with sharing things like your search history and shopping history. But if you’re anything like most people, you’ve probably searched for some things on the internet that you would rather keep private.",)}
|
||||
""",
|
||||
chrome=chrome,
|
||||
),
|
||||
)
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/chrome.ftl",
|
||||
"firefox/browsers/compare/chrome.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-google-chrome-is-by-all-accounts"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Google Chrome is by all accounts a secure browser, with features like Google Safe Browsing, which helps protect users by displaying an impossible-to-miss warning when they attempt to navigate to dangerous sites or download dangerous files.",
|
||||
{
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-firefox-vs-chrome-which-is"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Firefox vs. Chrome: Which is better?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-comparing-firefox-browser"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Comparing Firefox Browser with Google Chrome",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-fast-forward-to-today-the"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Fast-forward to today, the competitive landscape for browsers has changed with many people beginning to question just what is happening to their online data such as browsing history, passwords, and other sensitive information. A lot has changed since 2008 when Chrome came onto the scene. At Firefox, we’ve been heads down, working to redesign our interface and provide users with an ever growing number of privacy and performance enhancements as well as plenty of handy browser tools.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-and-so-here-we-are-the-browser"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"And so here we are, the browser-wars are escalating once again and it’s time to reevaluate and compare Firefox Browser vs Google Chrome.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-in-2008-google-introduced"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"In 2008, Google introduced Chrome, and its impact as an innovation in browser technology was immediate. It was faster for loading sites, took up minimal screen space and offered an undeniably simple user interface.",
|
||||
{
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-in-fact-both-chrome-and-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"In fact, both Chrome and Firefox have rigorous security in place. Both include a thing called “sandboxing” which separates the processes of the browser so something like a harmful website doesn’t infect other parts of your laptop or other device.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-while-chrome-proves-to-be"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"While Chrome proves to be a safe web browser, its privacy record is questionable. Google actually collects a disturbingly large amount of data from its users including location, search history and site visits. Google makes its case for data collection saying it’s doing it to improve its services – like helping you find a sweater or a coffee shop like the one you previously bought or visited. However, others might disagree, making the point that Google is actually gathering an unprecedented amount of data for its own marketing purposes. They tout that they’re keeping your information private from hackers, but that’s beside the point. Google itself runs the world’s largest advertising network, thanks in large part to data they harvest from their users.",
|
||||
{
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-in-terms-of-features-both"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"In terms of features, both Firefox and Chrome offer a large library of extensions and plug-ins, with Chrome’s catalog vastly outnumbering any other browser while nicely integrating with other Google services, like Gmail and Google Docs.",
|
||||
{
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-firefox-also-has-a-sync-feature"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Firefox also has a sync feature to see your open and recent tabs, browsing history, and bookmarks across all your devices.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-while-chrome-gets-the-nod"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"While Chrome gets the nod with add-ons and extensions, Firefox has a nicely curated set of built-in features, such as the incredibly handy screen capture tool, and reading mode feature which strips away everything from the page except the text from the article you’re reading.",
|
||||
{
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-although-not-as-extensive"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Although not as extensive as Chrome’s add-on library, Firefox, as open-source software with a huge number of active contributors, also features an incredible number of useful extensions.",
|
||||
{
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-if-having-tons-of-open-tabs"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"If having tons of open tabs is your thing, then it really comes down to your UI preference. Firefox features a horizontal scroll on all your open tabs rather than shrinking them smaller and smaller with each new one. Google Chrome prefers to shrink them down so just the favicon is visible. The only problem with this is when you have multiple tabs open from the same website, so you see the same favicon across your tabs.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-almost-needless-to-say-versions"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Almost needless to say, versions of both Firefox and Chrome are available for the most popular desktop and mobile operating systems (Windows, macOS, Linux, Android, iOS).",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-both-chrome-and-firefox-also"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"Both Chrome and Firefox also allow you to sync things like passwords, bookmarks, and open tabs across all your devices. If you have a Firefox account, you can manually send an open tab on your desktop to your mobile device or vice versa. With Chrome, it’s done automatically if you’ve chosen that setting in your preferences. Not having to manually send the tab from one device to the other is convenient when you want to do something like continue reading an article you didn’t finish earlier. But there could be times where automatic syncing might not be ideal if there’s a chance multiple users are browsing while signed in to your Google account.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-we-think-its-fair-to-say"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"We think it’s fair to say Firefox and Chrome are really neck and neck in terms of portability and utility, with Chrome having a slight edge in utility because of its huge library of extensions and add-on features. But in terms of Privacy, Firefox wins the day with our commitment to preserving our users’ online data and providing free baked-in services like password managers that also alert you if there happens to be a data breach involving your credentials.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-as-for-customization-our"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"As for customization, our fans will tell you one of the things they love most about our browser is its ability to allow you to move and arrange a majority of the UI elements to best suit your needs. Chrome allows you to hide certain UI elements but there’s not much allowance, if any, for moving things around based on your preferences. However, it should be noted that both Chrome and Firefox make it pretty easy to change your browser’s appearance and theme.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-chrome-for-practical-purposes-theres"),
|
||||
value=REPLACE(
|
||||
"firefox/compare/chrome.lang",
|
||||
"For practical purposes, there’s obviously really nothing preventing you from using both browsers—Firefox for those moments in life when privacy really matters, and Chrome if you’re still invested in the Google ecosystem. Yet with the growing number of incursions into our personal data, Firefox may prove to be the right choice in the long run for those of us who value protecting our personal privacy online.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,291 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
edge = "firefox/compare/edge.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/edge.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/edge.ftl",
|
||||
"firefox/browsers/compare/edge.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-vs-microsoft-edge-which"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox vs. Microsoft Edge: Which is the better browser for you?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-compare-microsoft-edge-to-the"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Compare Microsoft Edge to the Firefox Browser to find out which is the better browser for you.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-comparing-firefox-browser-with"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Comparing Firefox Browser with Microsoft Edge",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-with-windows-10-microsoft-introduced"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"With Windows 10, Microsoft introduced its Edge browser to compete with Firefox and Chrome making it the default browser pre-installed on millions of PCs sold. Even so, users were slow to adopt it and Microsoft eventually announced plans to relaunch Edge as a Chromium-based browser (Chromium of course being Google’s Open Source browser project).",
|
||||
{
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-here-well-compare-our-firefox"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Here we’ll compare our Firefox Browser to the Chromium-based Microsoft Edge in terms of privacy, utility, and portability, to help you have a better understanding of which browser better suits your needs and preferences.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-edge-is-integrated-into-the"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Edge is integrated into the Windows 10 platform and runs in a sandbox environment, meaning it isolates programs and prevents malicious programs from spying on your computer. It has a built-in SmartScreen that scans the reputation of sites you visit and blocks suspicious sites. To enhance privacy, Edge allows you to use biometrics or a PIN with Windows Hello instead of passwords for online authentication.",
|
||||
{
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-at-firefox-our-privacy-fallback"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"At Firefox, our <a %(attrs)s>privacy policy</a> is transparent and in plain language. We actually put a lot of work into making sure it was straightforward and easy to read. We pride ourselves in protecting our users security and privacy. With Enhanced Tracking Protection now on by default, we block 2000+ trackers automatically. Trackers are those little pieces of code that try to piece together what you're doing across multiple internet sites to build a composite and detailed picture of who you are, compromising your privacy all just to target better ads.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-your-privacy-protections-shows"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Your <a %(attrs)s>Privacy Protections</a> shows you the trackers and cookies that pages have attempted to leave, and how many Firefox has blocked for you.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-in-firefox-private-browsing"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"In Firefox, Private Browsing mode automatically erases your browsing information like passwords, cookies, and history, leaving no trace after you close out the session. Edge on the other hand, actually records browsing history in their private mode (called “InPrivate”) and it’s a relatively easy task for someone to reconstruct your full browsing history, regardless of whether your browsing was done in regular or InPrivate mode.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-both-browsers-are-relatively"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Both browsers are relatively equal in terms of data encryption. However, if online privacy and transparency are important to you, then Firefox is clearly a better choice here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-is-a-fast-and-open-fallback"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox is a fast and open source browser, which means users can customize their browsing experience in every way possible. Firefox also allows the casual user several different ways to customize the UI with applying different themes and toolbar configurations. Since our browser has always been open source we have a large following of devoted developers who have created an extensive library of add-ons and browser extensions.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-since-edge-has-moved-to-the"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Since Edge has moved to the processor intensive Chromium platform, you can expect it to run a little slower, especially if you have multiple programs running at once. However, with Chromium platform comes a massive library of extensions as well as a decent level of UI customization that Edge did not have before it’s move to Chromium.",
|
||||
{
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-edge-has-some-nice-ui-features"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Edge has some nice UI features, like their tab previews which can make it easy to find the right open tabs if you’ve got a lot of them open. Another helpful tab-related feature lets you set aside any active tabs that you aren’t using but don’t want to close down.",
|
||||
{
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-features-a-scrolling"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox features a scrolling tab interface, which keeps tab information viewable and scrolls them horizontally instead of shrinking them down to just favicon size. Also whenever you open a new tab, our <a %(attrs)s>Pocket feature</a> suggests relevant articles and content for you. Plus with Pocket, you can also save articles, videos, and other content with one click, for reading at a later time.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-and-edge-both-offer-fallback"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox and Edge both offer excellent reading modes. With Firefox you just tap on the small icon in the search bar and the browser strips down all unnecessary elements and presents you a clean looking article. In Edge you just tap on the small book icon and browser to get a clean easy-to-read UI.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-also-includes-lots"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox also includes lots of handy built-in features by default like <a %(attrs)s>Enhanced Tracking Protection</a>, a built-in screenshot tool, large file sending and more.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-out-of-the-gate-firefox-has"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Out of the gate, Firefox has more features and integrations built into the browser and readily available on download. And while both browsers have a tremendous number of add-ons and extensions available, Edge’s compatibility with Google’s Chromium platform gives it the advantage in terms of sheer numbers.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-with-internet-explorer-fallback"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"With Internet Explorer, Microsoft learned from its lack of availability across platforms and made Edge available for macOS and Android. The software is now readily available on iOS, Android, Windows and Mac.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-firefox-has-been-available"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Firefox has been available on iOS, Android, Windows, macOS and Linux for years. And as you would expect with any modern browser, Firefox lets you log in with a <a %(attrs)s>free account</a> and sync data such as passwords, browsing history, bookmarks, and open tabs between your computer, tablet and phone. It also allows you to sync across platforms as well.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-edge-also-allows-you-to-fallback"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Edge also allows you to connect your associated Microsoft account and sign in to sync your favorites, history, passwords, and more between your computer and iOS or Android devices, although some Android tablets are not currently supported.",
|
||||
{
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-aside-from-sucking-up-a-lot"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"Aside from sucking up a lot of computing power, Edge running on Chromium has answered a lot of users’ needs for functionality and features. But there’s still a lot to account for in terms of the browser’s privacy protections. It’s our assessment that Firefox is still a better choice for most people to use in their daily lives, based not only on functionality but more importantly on our transparency in how we collect user data, what exactly we collect, and what we do with it. Because our parent company is <a %(attrs)s>Mozilla</a>, a non-profit organization dedicated to internet privacy and freedom, we simply have a different set of priorities when it comes to users’ data.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-edge-the-bottom-line-is-that-while"),
|
||||
value=REPLACE(
|
||||
edge,
|
||||
"The bottom line is that while we suggest using Firefox, the best browser for you ultimately will be the one that fits your individual needs with extension support, browsing tools customization, speed, privacy and security.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,222 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
ie = "firefox/compare/ie.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/ie.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/ie.ftl",
|
||||
"firefox/browsers/compare/ie.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-firefox-vs-internet-explorer"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Firefox vs. Internet Explorer: Which is the better browser for you?",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-compare-internet-explorer-to"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Compare Internet Explorer to the Firefox Browser to find out which is the better browser for you.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-comparing-firefox-browser-with"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Comparing Firefox Browser with Microsoft Internet Explorer",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-while-microsofts-internet-explorer"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"While Microsoft’s Internet Explorer still comes pre-installed on most Windows-based PCs, clearly Microsoft would prefer you to use their Edge browser, which is set as the default when you purchase.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-microsoft-discontinued-its-internet"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Microsoft discontinued its Internet Explorer brand several years ago, in favor of its updated Edge browser for Windows 10. However, slow adoption for Edge created room for Internet Explorer to live on, mainly for business compatibility reasons.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-here-well-compare-our-firefox"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Here we’ll compare our Firefox Browser with Internet Explorer in terms of security, utility, and portability. We’ll help you understand the differences between how a modern browser like Firefox that adheres to web standards compares with the browser you may be using for business purposes or out of old habits that die hard.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-if-you-havent-moved-on-from-using"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"If you haven’t moved on from using Internet Explorer, the security risk factor alone should be enough to convince you. <a %(attrs)s>Microsoft’s own security chief has warned</a> millions of people who continue to use Internet Explorer as their main web browser that they are placing themselves in “peril.”",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-microsoft-is-no-longer-supporting"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Microsoft is no longer supporting new development for Internet Explorer, which means security concerns are rampant. Microsoft openly acknowledges the fact that vulnerabilities exist within basically every version of Internet Explorer.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-so-whats-the-solution-if-your-fallback"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"So what’s the solution if your company is running outdated apps that only work on Internet Explorer? Our best advice for you personally is, don’t mix business with pleasure. The simple thing to do is download and use a more secure browser like Firefox. Then, if you need to do things like check your personal email or shop online, you can just switch over to the more secure browser. The bottom line is, if Microsoft is warning people not to use Internet Explorer, don’t use it. Your online privacy and security are not worth risking because you (or your company) have a hard time breaking an old habit. We make Firefox with security and privacy features like <a %(lockwise)s>Lockwise</a>, our password manager, private browsing and lots of other add-ons that help us make the web safer for you. Also, our <a %(privacy)s>Privacy Policy</a> is straightforward: we tell you what we know about you, and why we collect that information. All of these things obviously go beyond what Internet Explorer offers, and even what other modern browsers like Google Chrome and Microsoft Edge offer.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(lockwise)s": VARIABLE_REFERENCE("lockwise"),
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-alarmingly-4-to-5-of-all-desktop-fallback"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Alarmingly, 4 to 5% of all desktop web traffic comes through Internet Explorer. That might not seem like a lot, but in reality it means millions of people are being served a poor internet experience with slow loading and rendering times, pages that won’t display properly — all on top of the security issues already discussed.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-really-the-only-reasons-to-use"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Really the only reasons to use Internet Explorer are for developers to test what their sites look like on an older browser or if a company has business-critical apps that only work with the Internet Explorer browser.",
|
||||
{
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-on-the-other-end-of-the-spectrum-fallback"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"On the other end of the spectrum, Firefox is one of the most frequently updated browsers, and comes loaded with lots of useful and interesting features, like <a %(pocket)s>Pocket</a> that suggests interesting content every time you open a new tab. Our unified search and web address bar, or <em>Awesome Bar</em> as we call it, also gives you suggestions based on your existing bookmarks and tags, history, open tabs and popular searches. And with a free Firefox account you also get access to all your settings and <a %(products)s>our other Firefox products</a> on any device simply by signing in. Plus the peace of mind of knowing your browser is proactively working to protect your personal data.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(pocket)s": VARIABLE_REFERENCE("pocket"),
|
||||
"%(products)s": VARIABLE_REFERENCE("products"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-as-microsoft-has-made-the-move"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"As Microsoft has made the move to sunset the Internet Explorer browser, it no longer supports any version for iOS, and has never been available for Android. Which means unless you’re running a Windows-based laptop or desktop, you won’t have access to your bookmarks, browsing history, saved passwords, and other information that modern browsers sync across devices.",
|
||||
{
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-firefox-works-on-any-platform"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Firefox works on any platform, including Windows, macOS, Linux, Android and iOS. Which also means you can sync all your information across platforms. So if you’re browsing on a Windows-based laptop, you can pick up where you left off when you move to browsing on your iPhone or Android device. This convenience should come standard with any modern web browser, and is sorely lacking with Internet Explorer.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-there-was-a-time-not-so-long"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"There was a time not so long ago where Internet Explorer was the most popular and widely used browser in the world. Times have changed and so has technology, but unfortunately Internet Explorer has pretty much stayed the same. Microsoft itself openly implores users to stop using Internet Explorer and instead switch to their newer Chromium-based Edge browser.",
|
||||
{
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-ie-our-opinion-is-just-to-go-with"),
|
||||
value=REPLACE(
|
||||
ie,
|
||||
"Our opinion is just to go with a trusted, private browser with a track record of delivering a great experience across devices. In a head-to-head comparison, it’s really no contest at all. Firefox is hands down the winner across all assessment categories. If you do find yourself at Nana’s house firing up Internet Explorer, maybe you want to do Nana a favor and <a %(attrs)s>download Firefox</a> for her.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,188 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
compare = "firefox/compare.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/index.ftl",
|
||||
"firefox/browsers/compare/index.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
compare-index-six-of-the-best-browsers-fallback = {COPY(compare, "Six of the best browsers in direct comparison",)}
|
||||
compare-index-privacy-utility-portability = {COPY(compare, "Privacy. Utility. Portability.",)}
|
||||
compare-index-a-great-internet-browser-should = {COPY(compare, "A great internet browser should have the functionality you need, portability across devices, and the privacy you deserve.",)}
|
||||
compare-index-which-browser-is-best-at-keeping = {COPY(compare, "Which browser is best at keeping things confidential?",)}
|
||||
compare-index-its-not-unreasonable-to-expect = {COPY(compare, "It’s not unreasonable to expect a high level of data protection and privacy from the products we regularly use to get online. At a minimum, a browser should offer some version of “private browsing mode” that automatically deletes your history and search history so other users on the same computer can’t access it. In this area, all six of the browsers compared here score points.",)}
|
||||
compare-index-what-you-do-online-literally = {COPY(compare, "What you do online literally shouldn’t be anyone else’s business.",)}
|
||||
compare-index-what-has-your-browser-done = {COPY(compare, "What has your browser done for you lately?",)}
|
||||
compare-index-how-well-does-your-browser = {COPY(compare, "How well does your browser work across your devices?",)}
|
||||
compare-index-almost-all-of-the-browsers = {COPY(compare, "Almost all of the browsers compared here allow synchronization between desktop and mobile devices. You’ll need an account to do it, which you can use to log into the browser on all devices and synchronize things like passwords, browsing history, bookmarks and settings.",)}
|
||||
compare-index-conclusion = {COPY(compare, "Conclusion:",)}
|
||||
compare-index-and-the-winner-is = {COPY(compare, "And the winner is…",)}
|
||||
""",
|
||||
compare=compare,
|
||||
),
|
||||
)
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/index.ftl",
|
||||
"firefox/browsers/compare/index.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-using-a-browser-that-blocks"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Using a browser that blocks third-party trackers isn’t just important for privacy — it usually means it runs much faster, too. Most trackers are just scripts that run in the background on a number of websites. You can’t see them, but you can feel them slowing down your browser. As of version 67 of Firefox, fingerprinting and cryptominers are also blocked. If you’re not familiar with cryptominers, here’s an example of how they can affect you: maybe you’ve experienced your computer suddenly running hotter or the battery depleting faster than normal. That’s often the byproduct of cryptominers creeping around on your device.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-another-browser-feature-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Another browser feature that should be a given is the ability to prevent websites and companies from tracking your browsing and shopping data — even in normal browsing mode. But that’s actually not the case: in fact, the only browsers that block third party tracking cookies by default are Firefox and Safari.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-in-addition-to-privacy-protection-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"In addition to privacy protection, which largely takes place in the background of the browser, another key ingredient to a well-made browser is the actual user interface and functionality. Almost all six browsers are equal when it comes to tab browsing, bookmark management, auto-completion, proofreading and extensions. Firefox, Edge and Opera also offer a quick screenshot function that proves to be quite handy and is definitely something you notice is missing when you switch over to a browser without it.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-find-out-how-firefox-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Find out how Firefox, Chrome, Edge, Safari, Opera and Internet Explorer differ in terms of privacy, utility and portability.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-looking-for-a-better-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Looking for a better browser? We’ll compare Firefox with Chrome, Edge, Safari, Opera and Internet Explorer to help you make your decision.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-so-is-your-browser-the-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"So is your browser the best one for what you do online? The right browser can make a big difference in how you experience the web. So, without further ado, let’s compare Google Chrome, Firefox, Safari, Opera, Microsoft Internet Explorer and Edge — and see which best suits your needs.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-since-your-browser-is-your"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Since your browser is your gateway to the internet, speed, security, privacy and utility are paramount. In recent years, Google Chrome has been the browser of choice for many. But at a time when online ads seem to follow us everywhere and data breaches are a fixture of news headlines, a lot of people are starting to demand more privacy and respect from their browser.",
|
||||
{
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-the-first-thing-to-point-fallback"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"The first thing to point out about portability is that not all browsers run on all operating systems. While Firefox, Chrome and Opera work on all major systems and are easy to install, Internet Explorer, Edge and Safari only work on Microsoft and Apple’s own systems. The mobile version of Safari is pre-installed on Apple’s mobile devices, and most Android devices come with a pre-installed browser modified by the manufacturer for the device. Firefox, Chrome, Edge and Opera can easily be installed and even used side by side.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Internet Explorer": TERM_REFERENCE("brand-name-ie"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-browsers-have-come-a-long"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Browsers have come a long way since Chrome was introduced and took over the market share. Most of the modern browsers have closed the gap on portability and functionality, and in some areas, like speed and privacy, have actually surpassed Chrome. Still, determining which browser is right for you will always depend on your individual needs and what you value most as you navigate online.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-firefox-is-backed-by-the-not"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Firefox is backed by the not-for-profit Mozilla.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-firefox-puts-your-privacy"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Firefox puts your privacy first — in everything we make and do. We believe you have the right to decide how and with whom you share your personal information. Firefox collects as little data as possible and never sells it. The little data we do collect is only used to make products and features better. No secrets. But a lot of transparency and real privacy.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-index-based-on-the-criteria-we-outlined"),
|
||||
value=REPLACE(
|
||||
"firefox/compare.lang",
|
||||
"Based on the criteria we outlined — privacy, utility, and portability — there’s really only one browser that meets the mark, and that’s Firefox. The real area of difference isn’t in functionality, it’s privacy. Firefox is the most private browser that doesn’t lock you into an ecosystem. Use it on any operating system, on all your devices, and feel secure when you do.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,238 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
opera = "firefox/compare/opera.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/opera.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/opera.ftl",
|
||||
"firefox/browsers/compare/opera.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-firefox-vs-opera-which-is"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Firefox vs. Opera: Which is the better browser for you?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-compare-opera-to-the-firefox"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Compare Opera to the Firefox Browser to find out which is the best browser for you.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-comparing-firefox-browser"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Comparing Firefox Browser with Opera",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-the-firefox-browser-and-opera"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"The Firefox Browser and Opera are two of the earliest browsers on the scene still releasing frequent updates. While Opera has not reached the same level of user adoption as Firefox or Google Chrome, it’s maintained a relatively stable and loyal base over a sustained period of time. In this review, we’ll compare the Opera browser with our Firefox browser in terms of security and privacy, utility, and portability to help you choose which browser might be the best fit for you.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-operas-privacy-policy-lacks-fallback"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Opera’s privacy policy lacks some specificity in its explanation of which types of information it collects and how, in certain sections, it says they collect names of account holders, IP addresses and search terms. What seems confusing and troubling is the section about International data transfers; when, how often and why they need to transfer your data internationally is not explained.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-firefoxs-privacy-policy-is"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Firefox’s <a %(attrs)s>privacy policy</a> is very transparent in describing what personal information we collect with the only end goal being to give you greater control over the information you share online.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-as-far-as-actual-privacy-protections"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"As far as actual privacy protections in the Opera browser, it does offer a robust Private mode that allows you to surf the web without the browser tracking your activity. Also in normal browsing mode, you can also turn off some data collection features by digging into the settings to enable the ad blocker and adjust other security features.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-with-the-latest-version-of"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"With the latest version of Firefox, <a %(attrs)s>Enhanced Tracking Protection</a> is turned on by default in normal browsing mode, so you don’t have to mess around with the settings just to protect yourself from trackers. With Enhanced Tracking Protection, Firefox actively blocks thousands of third-party trackers that try to follow you around the web. You are provided with a personalized protection report that shows how often Firefox blocked third-party cookies, social media trackers, fingerprinting tools and cryptominers as you browse the web.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-we-make-firefox-for-people"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"We make Firefox for people like you, who care deeply about personal privacy and security. That's why we collect so little info about users and are transparent about how we use that info. It's hard to know how Opera is operating from a privacy perspective. While there are robust privacy features, how they themselves collect and share your data is murky. Firefox remains consistent in what we say and what we do in protecting your privacy.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-theres-no-debate-that-opera"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"There’s no debate that Opera is a feature-packed browser with a clean user interface and strong customization options. Because Opera is built on Chromium, it can take advantage of most of Google Chrome’s vast extension library. Firefox also features a large <a %(attrs)s>extension library to browse</a>, but not quite as large as Chrome’s.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-like-firefox-opera-delivers"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Like Firefox, Opera delivers a scrolling tab experience, which means that when you open more tabs than will fit on screen, it scrolls them off screen instead of just continuously shrinking them down. Also both Firefox and Opera have a screenshot tool that lets you capture a snapshot of your screen or part of the page. However, the Opera tool doesn’t give you the ability to create one huge capture of the whole webpage, only the visible portion.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-opera-provides-a-lot-of-hidden"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Opera provides a lot of hidden utility within its simple and manageable interface. For example there’s built-in support for messaging apps, like Facebook Messenger. There’s also a news reader that aggregates articles from your choice of sites and news outlets. The parallel feature to this on Firefox is called <a %(attrs)s>Pocket</a>. Pocket is a free service for Firefox account holders that makes it easy to find and save interesting articles and videos from all around the web. In addition, it recommends a variety of articles that expand your knowledge base curated by real, thoughtful humans.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-in-terms-of-head-to-head-utility"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"In terms of head to head utility, Opera and Firefox are close competitors. Opera may have an advantage in one aspect with its compatibility with and access to Chrome’s huge extension library. But one significant factor to consider is the fact that Opera, because it’s built on Chromium, is a processor-hungry browser with its RAM consumption comparable to Chrome, which is known for its high CPU usage.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Chromium": TERM_REFERENCE("brand-name-chromium"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-both-firefox-and-opera-are"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Both Firefox and Opera are compatible across every platform including Windows, Mac, Linux, Android and iOS. Firefox account holders can easily sync their bookmarks, passwords, open tabs, and browsing history across all their signed into devices. The same is true for Opera users with an account. However, many sites, especially old sites that haven’t been updated in years, block the latest version of Opera entirely. So if visiting places like your Ex’s old blog is important, take heed, you may not be able to access some of the dustier corners of the internet if you use Opera.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-in-addition-to-the-regular"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"In addition to the regular mobile app, Opera has two other mobile versions of its browser: Touch and Mini. Touch is light on features but it’s designed to use on the go with only one hand. The Mini version aims at lowering data usage and increased speeds on slow connections by downgrading images and stripping away content.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-we-also-offer-an-additional"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"We also offer an additional, albeit experimental version of our Firefox mobile app, <a %(attrs)s>Firefox Preview</a>, which focuses on speed and security.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-most-major-browsers-these"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Most major browsers these days, with the exception of Safari, work seamlessly across platforms and browsers. Opera and Firefox are no exception with both browsers providing excellent portability across every device.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-opera-overall-opera-is-a-solid-browser"),
|
||||
value=REPLACE(
|
||||
opera,
|
||||
"Overall, Opera is a solid browser, with a clean interface and a lot of useful features available. There are, however, some serious privacy concerns as well as an issue with it using a lot of processing power. Although Opera has some really terrific ease of use features, we still believe Firefox remains a superior browser based on performance and with a transparent user-privacy stance and strict privacy protections.",
|
||||
{
|
||||
"Opera": TERM_REFERENCE("brand-name-opera"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
|
@ -1,294 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
safari = "firefox/compare/safari.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/safari.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/safari.ftl",
|
||||
"firefox/browsers/compare/safari.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-firefox-vs-safari-which-is"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Firefox vs. Safari: Which is the better browser for you?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-safari-is-the-pre-installed"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Safari is the pre-installed browser on Mac and iPhone. Compare Safari to the Firefox Browser to find out which is the better browser for you.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-comparing-firefox-browser"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Comparing Firefox Browser with Apple Safari",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-if-you-use-a-mac-or-have"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"If you use a Mac or have an iPhone, chances are you’re familiar with the Safari web browser. The fact that it’s pre-installed as the default browser for Apple product users definitely gives it an early advantage, but Firefox has its own set of useful features that make it an attractive alternative. Here we’ll explore the main differences between our browser and Safari in terms of privacy, utility, and portability between devices.",
|
||||
{
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-privacy-has-become-a-white"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Privacy has become a white hot topic for tech companies as they realize more and more people are feeling vulnerable to things like data breaches, ad trackers and hackers. But when it comes down to the real tools people use to navigate the actual interwebs, is it all talk or are they actually taking action to keep your data secure?",
|
||||
{
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-as-alluded-to-before-apple-fallback"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"As alluded to before, Apple is one of those companies that recently decided to step up their privacy game. Not long ago, Apple implemented cross-site tracking prevention in Safari, which prevents ads from following you around the internet. Safari also offers a strong password suggestion when you sign up for a new account on any website. And if you’re invested in the iCloud ecosystem, it syncs that password securely with your other devices, so you never actually have to remember it.",
|
||||
{
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-like-safari-we-at-firefox"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Like Safari, we at Firefox have made a point of focusing on privacy and security. But unlike Safari, we’ve been standing on the privacy soap box for a long time. In fact, Mozilla (our parent company) was one of the first voices in the tech community to sound the alarm for online privacy.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-our-private-browsing-mode"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Our Private Browsing mode blocks trackers and erases your passwords, cookies and history every time you close it. But you can also experience our advanced privacy features even in regular browsing mode. With the latest edition of Firefox, enhanced tracking prevention is turned on by default. This prevents things like cross-site trackers from following you as you jump around the web. Also, with Facebook being caught out almost daily for privacy problems, our <a %(attrs)s>Facebook Container</a> extension makes a lot of sense. It makes it harder for Facebook to track you around the web — similar to what Safari does to prevent cross-site tracking — but Firefox actually isolates your Facebook session into a separate container blocking Facebook from tracking what you do on other websites. Why do they need to know what you look up on WebMD anyway?",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-as-far-as-security-goes-firefox"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"As far as security goes, Firefox is solid there as well. Any time you’re in Firefox, you can right-click in the password field to securely generate a strong password using the Fill Password option. When you save your new password, we will prompt you to save to its built-in password manager, <a %(lockwise)s>Lockwise</a>. We also serve up users and account holders with another free and useful product called <a %(monitor)s>Monitor</a> that automatically alerts you if your data is included in a known data breach.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(lockwise)s": VARIABLE_REFERENCE("lockwise"),
|
||||
"%(monitor)s": VARIABLE_REFERENCE("monitor"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
"Monitor": TERM_REFERENCE("brand-name-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-if-you-choose-to-use-safari"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"If you choose to use Safari, you’re in safe hands as long as you’re using an Apple device. But Safari only works on Apple devices, whereas Firefox works on Windows, Mac, iOS, Android and Linux. So no matter what operating system you choose, Firefox has you covered with our security and privacy protections.",
|
||||
{
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-apple-is-widely-known-for"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Apple is widely known for its closed ecosystem as it relates to creating software for its products. But inside the App Store, it does offer a section to developers to create plugins and add-ons to make the browser more robust. These extensions are also browsable through the App Store and easily added to Safari.",
|
||||
{
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"App Store": TERM_REFERENCE("brand-name-app-store"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-in-addition-to-the-regular"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"In addition to the regular set of features you’d expect in a browser, such as tabbed browsing and private browsing, Safari has some unexpected features as well. For instance, if a user were to right-click a word anywhere on a page inside Safari, then click Look Up, they’d get a dictionary definition plus entries from the thesaurus, App Store, movies and more. Safari’s Parental Controls are easy to customize, allowing the adults to breathe a little easier when the kids begin to get curious about the internet.",
|
||||
{
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"App Store": TERM_REFERENCE("brand-name-app-store"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-like-safari-firefox-encourages"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Like Safari, Firefox encourages its enthusiastic developer community to create <a %(attrs)s>add-ons and extensions</a> to the browser. And since our platform is open-source, there’s a vast selection adding a wealth of functionality.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-also-when-you-sign-up-for-fallback"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Also, when you sign up for a Firefox account you get access to some unique services like Screenshots, <a %(pocket)s>Pocket</a> and <a %(send)s>Send</a> that integrate directly into the browser. Screenshots is a feature built right into the Firefox browser, allowing you to copy or download any or all part of a web page. When you save the screenshot, you can also choose which folder you want to find it in, instead of cluttering your desktop. The Pocket for Firefox button lets you save web pages and videos to Pocket in just one click, so you can read a clean, distraction-free version whenever and wherever you want — even offline. With Send, you can share large files with end-to-end encryption and a variety of security controls, such as the ability to set an expiration time for a file link to expire, the number of downloads, and whether to add an optional password for an extra layer of security.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(pocket)s": VARIABLE_REFERENCE("pocket"),
|
||||
"%(send)s": VARIABLE_REFERENCE("send"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
"Send": TERM_REFERENCE("brand-name-send"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-firefox-and-safari-both-provide"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Firefox and Safari both provide a seamless experience when moving from desktop to mobile browsing or vice versa. For Safari, one of its main strengths is its continuity features. It syncs your bookmarks, tabs, history and more to iCloud so they’re available on all your devices. That means you can open a tab on your iPhone and have it also appear on your Mac laptop with just a click.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-both-browsers-have-a-lot"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Both browsers have a lot of crossover features, as well as some unique functions. It’s worth mentioning, if you take a lot of screenshots, you’ll wonder how you ever lived without this handy feature that’s built right into Firefox. But if you’re just looking for a fast, private browser for surfing and shopping, then you may want to give Firefox a try — especially if you’ve been exclusively using Safari because it came preloaded as the default browser on your computer. Eventually, you’ll discover which one is more suited to your needs.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-firefox-also-offers-a-similar"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Firefox also offers a similar sync feature when you sign up for a free <a %(attrs)s>Firefox Account</a> that enables users to easily synchronize their bookmarks, browsing history, preferences, passwords, filled forms, add-ons, and the last 25 opened tabs across multiple computers. What sets Firefox apart from Safari is that it is available on any desktop or mobile platform, iOS, Android, Windows or macOS, boosting its portability across any device you may own.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"macOS": TERM_REFERENCE("brand-name-macos"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-the-firefox-app-for-ios-and"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"The Firefox app for <a %(ios)s>iOS</a> and <a %(android)s>Android</a> is one of the fastest browsers available and also has solid security and anti-tracking features — a huge plus if you’re constantly bouncing between a laptop and mobile devices.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(ios)s": VARIABLE_REFERENCE("ios"),
|
||||
"%(android)s": VARIABLE_REFERENCE("android"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-since-safari-is-apples-proprietary"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Since Safari is Apple’s proprietary web browser, its iCloud syncing works exclusively with Apple products. This can be somewhat limiting if, for example, you’re both an Android user and an iPhone user or if you have a Windows based PC for work but use an iPhone as your personal device.",
|
||||
{
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-safari-does-a-great-job-of"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"Safari does a great job of making the browsing experience simple, fast, and seamless if you’re an Apple user with multiple Apple products. Like Safari, Firefox is a fast and utilitarian browser, but privacy and cross-platform compatibility are our defining features. Firefox updates each month with new features and functionality. For example, one recent update switched on our <a %(attrs)s>Enhanced Tracking Protection (ETP)</a> by default for new users, which effectively blocks cookies and cross-site trackers.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(attrs)s": VARIABLE_REFERENCE("attrs"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("compare-safari-in-the-end-it-just-boils"),
|
||||
value=REPLACE(
|
||||
safari,
|
||||
"In the end, it just boils down to what you value in your browser. If you’re integrated with the Apple ecosystem, Safari is still a great choice. But if you value having the latest and greatest privacy protections and being able to work across multiple operating systems, we think Firefox is your best bet. Firefox is also a solid option as a secondary browser for those Apple-exclusive users who may want to switch into a different browser for those online moments that call for extra layers of privacy protection.",
|
||||
{
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,58 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
shared = "firefox/compare/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/compare/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/compare/shared.ftl",
|
||||
"firefox/browsers/compare/shared.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
compare-shared-yes = {COPY(shared, "Yes",)}
|
||||
compare-shared-no = {COPY(shared, "No",)}
|
||||
compare-shared-private-browsing-mode = {COPY(shared, "Private Browsing mode",)}
|
||||
compare-shared-blocks-third-party-tracking = {COPY(shared, "Blocks third-party tracking cookies",)}
|
||||
compare-shared-blocks-cryptomining-scripts = {COPY(shared, "Blocks cryptomining scripts",)}
|
||||
compare-shared-blocks-social-trackers = {COPY(shared, "Blocks social trackers",)}
|
||||
compare-shared-autoplay-blocking = {COPY(shared, "Autoplay blocking",)}
|
||||
compare-shared-tab-browsing = {COPY(shared, "Tab browsing",)}
|
||||
compare-shared-bookmark-manager = {COPY(shared, "Bookmark manager",)}
|
||||
compare-shared-automatically-fills-out-forms = {COPY(shared, "Automatically fills out forms",)}
|
||||
compare-shared-search-engine-options = {COPY(shared, "Search engine options",)}
|
||||
compare-shared-text-to-speech = {COPY(shared, "Text to speech",)}
|
||||
compare-shared-reader-mode = {COPY(shared, "Reader mode",)}
|
||||
compare-shared-spell-checking = {COPY(shared, "Spell checking",)}
|
||||
compare-shared-web-extensionsadd-ons = {COPY(shared, "Web extensions/Add-ons",)}
|
||||
compare-shared-in-browser-screenshot-tool = {COPY(shared, "In-browser screenshot tool",)}
|
||||
compare-shared-os-availability = {COPY(shared, "OS availability",)}
|
||||
compare-shared-mobile-os-availability = {COPY(shared, "Mobile OS availability",)}
|
||||
compare-shared-syncs-with-mobile = {COPY(shared, "Syncs with mobile",)}
|
||||
compare-shared-password-management = {COPY(shared, "Password management",)}
|
||||
compare-shared-master-password = {COPY(shared, "Master Password",)}
|
||||
compare-shared-security-and-privacy = {COPY(shared, "Security and Privacy",)}
|
||||
compare-shared-utility = {COPY(shared, "Utility",)}
|
||||
compare-shared-portability = {COPY(shared, "Portability",)}
|
||||
compare-shared-security-and-privacy-strong = {COPY(shared, "Security and <strong>Privacy</strong>",)}
|
||||
compare-shared-utility-strong = {COPY(shared, "<strong>Utility</strong>",)}
|
||||
compare-shared-portability-strong = {COPY(shared, "<strong>Portability</strong>",)}
|
||||
compare-shared-overall-assessment = {COPY(shared, "Overall Assessment",)}
|
||||
compare-shared-the-comparisons-made-here = {COPY(shared, "The comparisons made here were done so across browser release versions as follows:",)}
|
||||
compare-shared-brand-name-firefox = { -brand-name-firefox }
|
||||
compare-shared-brand-name-chrome = { -brand-name-chrome }
|
||||
compare-shared-brand-name-edge = { -brand-name-edge }
|
||||
compare-shared-brand-name-ie = { -brand-name-ie }
|
||||
compare-shared-brand-name-opera = { -brand-name-opera }
|
||||
compare-shared-brand-name-safari = { -brand-name-safari }
|
||||
compare-shared-brand-name-brave = { -brand-name-brave }
|
||||
compare-shared-compare-browsers = {COPY(shared, "Compare Browsers",)}
|
||||
""",
|
||||
shared=shared,
|
||||
),
|
||||
)
|
|
@ -1,162 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
browsers = "firefox/browsers.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers.ftl",
|
||||
"firefox/browsers.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
firefox-browsers-get-the-browsers-that-put = {COPY(browsers, "Get the browsers that put your privacy first — and always have",)}
|
||||
""",
|
||||
browsers=browsers,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-get-the-privacy-you-deserve"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Get the privacy you deserve. Enhanced Tracking Protection is automatic in every Firefox browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-browsers-get-the-browsers-strong = {COPY(browsers, "Get the <strong>browsers</strong> that put your privacy first — and always have",)}
|
||||
firefox-browsers-desktop = {COPY(browsers, "Desktop",)}
|
||||
""",
|
||||
browsers=browsers,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-seriously-private-browsing"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Seriously private browsing. Firefox automatically blocks 2000+ online trackers from collecting information about what you do online.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-browsers-download-for-desktop = {COPY(browsers, "Download for Desktop",)}
|
||||
firefox-browsers-mobile = {COPY(browsers, "Mobile",)}
|
||||
firefox-browsers-take-the-same-level-of-privacy = {COPY(browsers, "Take the same level of privacy — plus your passwords, search history, open tabs and more — with you wherever you go.",)}
|
||||
firefox-browsers-download-for-mobile = {COPY(browsers, "Download for Mobile",)}
|
||||
firefox-browsers-send-me-a-link = {COPY(browsers, "Send me a link",)}
|
||||
""",
|
||||
browsers=browsers,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-enterprise"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Enterprise",
|
||||
{
|
||||
"Enterprise": TERM_REFERENCE("brand-name-enterprise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-browsers-get-unmatched-data-protection = {COPY(browsers, "Get unmatched data protection with support cycles tailored to suit your company’s needs.",)}
|
||||
""",
|
||||
browsers=browsers,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-enterprise-packages"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Enterprise packages",
|
||||
{
|
||||
"Enterprise": TERM_REFERENCE("brand-name-enterprise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-reality"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Reality",
|
||||
{
|
||||
"Reality": TERM_REFERENCE("brand-name-reality"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-browsers-go-beyond-two-dimensions-and = {COPY(browsers, "Go beyond two dimensions and enjoy the best immersive content from around the web.",)}
|
||||
""",
|
||||
browsers=browsers,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-build-sites-and-refine-your"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Build sites and refine your code with Firefox <strong>DevTools</strong>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"DevTools": TERM_REFERENCE("brand-name-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-learn-more-about-devtools"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Learn more about DevTools",
|
||||
{
|
||||
"DevTools": TERM_REFERENCE("brand-name-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-join-firefox-and-get-the-most"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Join Firefox and get the most out of every product — across every device.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-browsers-already-have-an-account-sign"),
|
||||
value=REPLACE(
|
||||
browsers,
|
||||
"Already have an account? <a %(fxa_attr)s>Sign In</a> or <a %(accounts_attr)s>learn more</a> about joining Firefox.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(fxa_attr)s": VARIABLE_REFERENCE("fxa_attr"),
|
||||
"%(accounts_attr)s": VARIABLE_REFERENCE("accounts_attr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-browsers-android = { -brand-name-android }
|
||||
firefox-browsers-ios = { -brand-name-ios }
|
||||
firefox-browsers-developer-edition = { -brand-name-developer-edition }
|
||||
""",
|
||||
browsers=browsers,
|
||||
),
|
||||
)
|
|
@ -1,160 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
what_is_a_browser = "firefox/browsers/what-is-a-browser.lang"
|
||||
what_is_a_browser = "mozorg/what-is-a-browser.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/what-is-a-browser.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/browsers/history/what-is-a-browser.ftl",
|
||||
"firefox/browsers/history/what-is-a-browser.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
what-is-a-browser-what-is-a-web = {COPY(what_is_a_browser, "What is a web browser?",)}
|
||||
what-is-a-browser-a-web-browser = {COPY(what_is_a_browser, "A web browser takes you anywhere on the internet, letting you see text, images and video from anywhere in the world.",)}
|
||||
what-is-a-browser-the-web-is-a-vast = {COPY(what_is_a_browser, "The web is a vast and powerful tool. Over the course of a few decades the internet has changed the way we work, the way we play and the way we interact with one another. Depending on how it’s used, it bridges nations, drives commerce, nurtures relationships, drives the innovation engine of the future and is responsible for more memes than we know what to do with.",)}
|
||||
""",
|
||||
what_is_a_browser=what_is_a_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-its-important"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
'It’s important that everyone has access to the web, but it’s also vital that we all <a href="%(tools)s">understand the tools</a> we use to access it. We use web browsers like Mozilla Firefox, Google Chrome, Microsoft Edge and Apple Safari every day, but do we understand what they are and how they work?',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(tools)s": VARIABLE_REFERENCE("tools"),
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
what-is-a-browser-in-a-short-period-long = {COPY(what_is_a_browser, "In a short period of time we’ve gone from being amazed by the ability to send an email to someone around the world, to a change in how we think of information. It’s not a question of how much you know anymore, but simply a question of what browser or app can get you to that information fastest.",)}
|
||||
what-is-a-browser-in-a-short-period = {COPY(what_is_a_browser, "In a short period of time we’ve gone from being amazed by the ability to send an email to someone around the world, to a change in how we think about information.",)}
|
||||
what-is-a-browser-how-does-a-web = {COPY(what_is_a_browser, "How does a web browser work?",)}
|
||||
what-is-a-browser-a-web-browser-long = {COPY(what_is_a_browser, "A web browser takes you anywhere on the internet. It retrieves information from other parts of the web and displays it on your desktop or mobile device. The information is transferred using the Hypertext Transfer Protocol, which defines how text, images and video are transmitted on the web. This information needs to be shared and displayed in a consistent format so that people using any browser, anywhere in the world can see the information.",)}
|
||||
""",
|
||||
what_is_a_browser=what_is_a_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-sadly-not-all"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
'Sadly, not all browser makers choose to interpret the format in the same way. For users, this means that a website can look and function differently. Creating consistency between browsers, so that any user can enjoy the internet, regardless of the browser they choose, is called <a href="%(standards)s">web standards</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(standards)s": VARIABLE_REFERENCE("standards"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-when-the-web-browser"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
'When the web browser fetches data from an internet connected server and it then uses a piece of software called a rendering engine to translate that data into text and images. This data is written in <a href="%(html)s">Hypertext Markup Language</a> (HTML) and web browsers read this code to create what we see, hear and experience on the internet.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(html)s": VARIABLE_REFERENCE("html"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-hyperlinks-allow"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
'<a href="%(hyperlink)s">Hyperlinks</a> allow users to follow a path to other pages or sites on the web. Every webpage, image and video has its own unique <a href="%(url)s">Uniform Resource Locator</a> (URL), which is also known as a web address. When a browser visits a server for data, the web address tells the browser where to look for each item that is described in the html, which then tells the browser where it goes on the web page.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(hyperlink)s": VARIABLE_REFERENCE("hyperlink"),
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
what-is-a-browser-cookies-not-the = {COPY(what_is_a_browser, "Cookies (not the yummy kind)",)}
|
||||
""",
|
||||
what_is_a_browser=what_is_a_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-websites-save"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
'Websites save information about you in files called <a href="%(cookies)s">cookies</a>. They are saved on your computer for the next time you visit that site. Upon your return, the website code will read that file to see that it’s you. For example, when you go to a website and the page remembers your username and password – that’s made possible by a cookie.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(cookies)s": VARIABLE_REFERENCE("cookies"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
what-is-a-browser-there-are-also = {COPY(what_is_a_browser, "There are also cookies that remember more detailed information about you. Perhaps your interests, your web browsing patterns, etc. This means that a site can provide you more targeted content – often in the form of ads. There are types of cookies, called <em>third-party</em> cookies, that come from sites you’re not even visiting at the time and can track you from site to site to gather information about you, which is sometimes sold to other companies. Sometimes you can block these kinds of cookies, though not all browsers allow you to.",)}
|
||||
what-is-a-browser-when-you-go-to = {COPY(what_is_a_browser, "When you go to a website and the page remembers your username and password – that’s made possible by a cookie.",)}
|
||||
what-is-a-browser-understanding = {COPY(what_is_a_browser, "Understanding privacy",)}
|
||||
""",
|
||||
what_is_a_browser=what_is_a_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-nearly-all-major"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
"Nearly all major browsers have a private browsing setting. These exist to hide the browsing history from other users on the same computer. Many people think that private browsing or incognito mode will hide both their identity and browsing history from internet service providers, governments and advertisers. They don’t. These settings just clear the history on your system, which is helpful if you’re dealing with sensitive personal information on a shared or public computer. Firefox goes beyond that.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-firefox-helps"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
"Firefox helps you be more private online by letting you block trackers from following you around the web.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
what-is-a-browser-making-your-web = {COPY(what_is_a_browser, "Making your web browser work for you",)}
|
||||
what-is-a-browser-most-major-web = {COPY(what_is_a_browser, "Most major web browsers let users modify their experience through extensions or add-ons. Extensions are bits of software that you can add to your browser to customize it or add functionality. Extensions can do all kinds of fun and practical things like enabling new features, foreign language dictionaries, or visual appearances and themes.",)}
|
||||
""",
|
||||
what_is_a_browser=what_is_a_browser,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("what-is-a-browser-all-browser-makers"),
|
||||
value=REPLACE(
|
||||
what_is_a_browser,
|
||||
"All browser makers develop their products to display images and video as quickly and smoothly as possible making it easy for you to make the most of the web. They all work hard to make sure users have a browser that is fast, powerful and easy to use. Where they differ is why. It’s important to choose the right browser for you. Mozilla builds Firefox to ensure that users have control over their online lives and to ensure that the internet is a global, public resource, accessible to all.",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,156 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
windows_64_bit = "firefox/windows-64-bit.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/browsers/windows-64-bit.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/windows-64-bit.ftl",
|
||||
"firefox/windows-64-bit.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-firefox-for-windows"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"Firefox for Windows 64-bit",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-users-on-64-bit-windows"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"Users on 64-bit Windows who download Firefox can get our 64-bit version by default. That means you get a more secure version of Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
windows-64-bit-64-bit = {COPY(windows_64_bit, "64-bit",)}
|
||||
""",
|
||||
windows_64_bit=windows_64_bit,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-a-more-secure-firefox"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"A more secure Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-users-on-64-bit-windows-crashes"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
'Users on 64-bit Windows who download Firefox can get our 64-bit version by default. That means you get a more secure version of Firefox, one that also <a href="%(crashes)s">crashes a whole lot less</a>. How much less? In our tests so far, 64-bit Firefox reduced crashes by 39%% on machines with 4GB of RAM or more.',
|
||||
{
|
||||
"%%": FTL.TextElement("%"),
|
||||
"%(crashes)s": VARIABLE_REFERENCE("crashes"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
windows-64-bit-whats-the-difference = {COPY(windows_64_bit, "What’s the difference between 32-bit and 64-bit?",)}
|
||||
""",
|
||||
windows_64_bit=windows_64_bit,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-heres-the-key-thing"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"Here’s the key thing to know: 64-bit applications can access more memory and are less likely to crash than 32-bit applications. Also, with the jump from 32 to 64 bits, a security feature called <a href=%(ASLR)s>Address Space Layout Randomization (ASLR)</a> works better to protect you from attackers. Linux and macOS users, fret not, you already enjoy a Firefox that’s optimized for 64-bit.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(ASLR)s": VARIABLE_REFERENCE("ASLR"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-how-do-you-get-64"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"How do you get 64-bit Firefox?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-if-youre-running"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
'If you’re running 64-bit Windows (<a href="%(version)s">here’s how to check</a>), your Firefox may already be 64-bit. <a href="%(check)s">Check your Firefox version</a> (in the “About Firefox” window) and look for “(32-bit)” or “(64-bit)” after the version number:',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(version)s": VARIABLE_REFERENCE("version"),
|
||||
"%(check)s": VARIABLE_REFERENCE("check"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-if-you-see-32-bit-older"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"If you see “(32-bit)” and you are running Firefox 56.0 or older, updating to the latest Firefox version should automatically upgrade you to 64-bit.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-if-you-see-32-bit-newer"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
"If you see “(32-bit)” and are running Firefox 56.0.1 or newer, then your computer may not meet the minimum memory requirement for 64-bit (3 GB RAM or more). You can still manually install 64-bit Firefox, if you choose.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("windows-64-bit-if-you-need-to-run"),
|
||||
value=REPLACE(
|
||||
windows_64_bit,
|
||||
'If you need to run 32-bit Firefox or manually install 64-bit Firefox, you can simply download and re-run the Windows (32-bit or 64-bit) Firefox installer from the <a href="%(all)s">Firefox platforms and languages download page.</a>',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(all)s": VARIABLE_REFERENCE("all"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
windows-64-bit-take-control-of-your = {COPY(windows_64_bit, "Take control of your browser.",)}
|
||||
""",
|
||||
windows_64_bit=windows_64_bit,
|
||||
),
|
||||
)
|
|
@ -1,415 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/channel/index.lang"
|
||||
main = "main.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/channel/base.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/channel.ftl",
|
||||
"firefox/channel.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
firefox-channel-desktop = {COPY(index, "Desktop",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-android"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Android",
|
||||
{
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-ios"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"iOS",
|
||||
{
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-take-a-browse-on-the-wild-side = {COPY(index, "Take a browse on the wild side.",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-be-among-the-first-to-explore"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Be among the first to explore future releases of Firefox for desktop, Android and iOS.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-see-something-that-isnt-working = {COPY(index, "See something that isn’t working? Let us know.",)}
|
||||
firefox-channel-file-a-bug-now = {COPY(index, "File a bug now",)}
|
||||
firefox-channel-tips-for-filing-a-bug = {COPY(index, "Tips for filing a bug",)}
|
||||
""",
|
||||
index=index,
|
||||
),
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/channel.ftl",
|
||||
"firefox/channel.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-try-new-features-in-a-pre"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Try New Features in a Pre-Release Android Browser | Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-download-and-test-future"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Download and test future releases of Firefox for desktop, Android and iOS.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-experience-cutting-edge-android-updated"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Experience cutting-edge features in a pre-release browser for Android: Firefox Beta and Firefox Nightly. Install now!",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
"Firefox Beta": TERM_REFERENCE("brand-name-firefox-beta"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-experience-cutting-edge-android"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Experience cutting-edge features in a pre-release browser for Android: Firefox Beta, Firefox Aurora and Firefox Nightly. Install now!",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
"Firefox Aurora": TERM_REFERENCE("brand-name-firefox-aurora"),
|
||||
"Firefox Beta": TERM_REFERENCE("brand-name-firefox-beta"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-download-and-test-the-latest-android"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Download and test the latest Firefox for Android features with Aurora, Beta and Nightly builds.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Beta": TERM_REFERENCE("brand-name-beta"),
|
||||
"Aurora": TERM_REFERENCE("brand-name-aurora"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-try-the-latest-android-features"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Try the latest Android features, before they get released to the rest of the world.",
|
||||
{
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-all-languages-and-platforms = {COPY(index, "All Languages and Platforms",)}
|
||||
firefox-channel-all-languages-and-builds = {COPY(index, "All Languages and Builds",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-beta-is-an-unstable-testing"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Beta is an unstable testing and development platform. By default, Beta sends data to Mozilla — and sometimes our partners — to help us handle problems and try ideas. <a href="%(link)s">Learn what is shared</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(link)s": VARIABLE_REFERENCE("link"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Beta": TERM_REFERENCE("brand-name-beta"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-firefox-beta-automatically"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox Beta automatically sends feedback to Mozilla.",
|
||||
{
|
||||
"Firefox Beta": TERM_REFERENCE("brand-name-firefox-beta"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-give-us-feedback-to-help"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'<a rel="external" href="%(feedback)s">Give us feedback</a> to help us put the final tweaks on performance and functionality in a stable environment.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(feedback)s": VARIABLE_REFERENCE("feedback"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-check-out-new-android-features"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Check out new Android features in their earliest stages. Enjoy at your own risk.",
|
||||
{
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-nightly-blog"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Nightly Blog",
|
||||
{
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-nightly-is-an-unstable-testing"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Nightly is an unstable testing and development platform. By default, Nightly sends data to Mozilla — and sometimes our partners — to help us handle problems and try ideas. <a href="%(link)s">Learn what is shared</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(link)s": VARIABLE_REFERENCE("link"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-firefox-nightly-automatically"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox Nightly automatically sends feedback to Mozilla.",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/channel.ftl",
|
||||
"firefox/channel.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-try-new-browser-features"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Try New Browser Features in Pre-Release Versions | Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-experience-cutting-edge-desktop"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Experience cutting-edge browser features in pre-release versions: Firefox Developer Edition, Firefox Beta and Firefox Nightly. Download now!",
|
||||
{
|
||||
"Firefox Developer Edition": TERM_REFERENCE("brand-name-firefox-developer-edition"),
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
"Firefox Beta": TERM_REFERENCE("brand-name-firefox-beta"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-download-and-test-the-latest-desktop"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Download and test the latest Firefox for desktop features with Developer Edition, Beta and Nightly builds.",
|
||||
{
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
"Beta": TERM_REFERENCE("brand-name-beta"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-beta = { -brand-name-beta }
|
||||
firefox-channel-test-about-to-be-released = {COPY(index, "Test about-to-be-released features in the most stable pre-release build.",)}
|
||||
firefox-channel-release-notes = {COPY(main, "Release Notes")}
|
||||
firefox-channel-developer-edition = { -brand-name-developer-edition }
|
||||
firefox-channel-build-test-scale-and-more = {COPY(index, "Build, test, scale and more with the only browser built just for developers.",)}
|
||||
""",
|
||||
index=index,
|
||||
main=main,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-developer-edition-is-an"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Developer Edition is an unstable testing and development platform. By default, Developer Edition sends data to Mozilla — and sometimes our partners — to help us handle problems and try ideas. <a href="%(link)s">Learn what is shared</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(link)s": VARIABLE_REFERENCE("link"),
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-firefox-developer-edition"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox Developer Edition automatically sends feedback to Mozilla.",
|
||||
{
|
||||
"Firefox Developer Edition": TERM_REFERENCE("brand-name-firefox-developer-edition"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-nightly = { -brand-name-nightly }
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-get-a-sneak-peek-at-our"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Get a sneak peek at our next generation web browser, and help us make it the best browser it can be: try Firefox Nightly.",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-test-brand-new-features = {COPY(index, "Test brand new features daily (or… nightly). Enjoy at your own risk.",)}
|
||||
""",
|
||||
index=index,
|
||||
),
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/channel.ftl",
|
||||
"firefox/channel.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-try-new-features-in-a-pre-release"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Try New Features in a Pre-Release iOS Browser | Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-experience-cutting-edge-features-ios"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Experience cutting-edge features in a pre-release browser for iOS via Apple’s TestFlight program. Install now!",
|
||||
{
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"TestFlight": TERM_REFERENCE("brand-name-test-flight"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-test-beta-versions-of-firefox-ios-long"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Test beta versions of Firefox for iOS via Apple’s TestFlight program and help make our mobile browser for iPhone, iPad and iPod touch even better.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iPhone": TERM_REFERENCE("brand-name-iphone"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"iPad": TERM_REFERENCE("brand-name-ipad"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"TestFlight": TERM_REFERENCE("brand-name-test-flight"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-test-flight = { -brand-name-test-flight }
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-channel-test-beta-versions-of-firefox-ios"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Test beta versions of Firefox for iOS via Apple’s TestFlight program.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Apple": TERM_REFERENCE("brand-name-apple"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"TestFlight": TERM_REFERENCE("brand-name-test-flight"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-channel-sign-up-now = {COPY(index, "Sign up now",)}
|
||||
""",
|
||||
index=index,
|
||||
),
|
||||
)
|
|
@ -1,342 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/developer/index.lang"
|
||||
developer_quantum = "firefox/products/developer-quantum.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/developer/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/developer.ftl",
|
||||
"firefox/developer.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
firefox-developer-page-title = { -brand-name-firefox-developer-edition }
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-developer-edition-desc"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox Developer Edition is the blazing fast browser that offers cutting edge developer tools and latest features like CSS Grid support and framework debugging",
|
||||
{
|
||||
"Firefox Developer Edition": TERM_REFERENCE("brand-name-firefox-developer-edition"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-firefox-browser = { -brand-name-firefox-browser } { -brand-name-developer-edition }
|
||||
firefox-developer-welcome-to-your-new-favorite = {COPY(developer_quantum, "Welcome to your new favorite browser. Get the latest features, fast performance, and the development tools you need to build for the open web.",)}
|
||||
firefox-developer-speak-up = {COPY(developer_quantum, "Speak up",)}
|
||||
firefox-developer-feedback-makes-us = {COPY(developer_quantum, "Feedback makes us better. Tell us how we can improve the browser and Developer tools.",)}
|
||||
firefox-developer-join-the-convo = {COPY(developer_quantum, "Join the conversation",)}
|
||||
firefox-developer-get-involved = {COPY(developer_quantum, "Get involved",)}
|
||||
firefox-developer-help-build-the-last = {COPY(developer_quantum, "Help build the last independent browser. Write code, fix bugs, make add-ons, and more.",)}
|
||||
firefox-developer-start-now = {COPY(developer_quantum, "Start now",)}
|
||||
firefox-developer-design-code-test = {COPY(developer_quantum, "Design. Code. Test. Refine.",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-build-and-perfect"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Build and Perfect your sites<br> with Firefox DevTools",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-inspector = {COPY(developer_quantum, "Inspector",)}
|
||||
firefox-developer-inspect-and-refine = {COPY(developer_quantum, "Inspect and refine code to build pixel-perfect layouts.",)}
|
||||
firefox-developer-learn-about-page-inspector = {COPY(developer_quantum, "Learn more about Page Inspector",)}
|
||||
firefox-developer-console = {COPY(developer_quantum, "Console",)}
|
||||
firefox-developer-track-css = {COPY(developer_quantum, "Track CSS, JavaScript, security and network issues.",)}
|
||||
firefox-developer-learn-about-web-console = {COPY(developer_quantum, "Learn more about Web Console",)}
|
||||
firefox-developer-debugger = {COPY(developer_quantum, "Debugger",)}
|
||||
firefox-developer-powerful-javascript = {COPY(developer_quantum, "Powerful JavaScript debugger with support for your framework.",)}
|
||||
firefox-developer-learn-more-about-debugger = {COPY(developer_quantum, "Learn more about JavaScript Debugger",)}
|
||||
firefox-developer-network = {COPY(developer_quantum, "Network",)}
|
||||
firefox-developer-monitor-network-requests = {COPY(developer_quantum, "Monitor network requests that can slow or block your site.",)}
|
||||
firefox-developer-learn-more-about-newtork-monitor = {COPY(developer_quantum, "Learn more about Network Monitor",)}
|
||||
firefox-developer-storage-panel = {COPY(developer_quantum, "Storage panel",)}
|
||||
firefox-developer-add-modify-remove = {COPY(developer_quantum, "Add, modify and remove cache, cookies, databases and session data.",)}
|
||||
firefox-developer-learn-more-about-storage = {COPY(developer_quantum, "Learn more about Storage Panel",)}
|
||||
firefox-developer-responsive-design-mode = {COPY(developer_quantum, "Responsive Design Mode",)}
|
||||
firefox-developer-test-sites-emulated = {COPY(developer_quantum, "Test sites on emulated devices in your browser.",)}
|
||||
firefox-developer-learn-more-about-responsive = {COPY(developer_quantum, "Learn more about Responsive Design View",)}
|
||||
firefox-developer-visual-editing = {COPY(developer_quantum, "Visual Editing",)}
|
||||
firefox-developer-fine-tuning-animations = {COPY(developer_quantum, "Fine-tune animations, alignment and padding.",)}
|
||||
firefox-developer-learn-more-about-visual-editing = {COPY(developer_quantum, "Learn more about Visual Editing",)}
|
||||
firefox-developer-performance = {COPY(developer_quantum, "Performance",)}
|
||||
firefox-developer-unblock-bottlenecks = {COPY(developer_quantum, "Unblock bottlenecks, streamline processes, optimize assets.",)}
|
||||
firefox-developer-learn-more-about-performance = {COPY(developer_quantum, "Learn more about Performance Tools",)}
|
||||
firefox-developer-memory = {COPY(developer_quantum, "Memory",)}
|
||||
firefox-developer-find-memory-leaks = {COPY(developer_quantum, "Find memory leaks and make your application zippy.",)}
|
||||
firefox-developer-learn-more-about-memory = {COPY(developer_quantum, "Learn more about Memory Tools",)}
|
||||
firefox-developer-style-editor = {COPY(developer_quantum, "Style Editor",)}
|
||||
firefox-developer-edit-and-manage = {COPY(developer_quantum, "Edit and manage all your CSS stylesheets in your browser.",)}
|
||||
firefox-developer-learn-more-about-style = {COPY(developer_quantum, "Learn more about Style Editor",)}
|
||||
firefox-developer-made-for-developers = {COPY(developer_quantum, "The browser made for developers",)}
|
||||
firefox-developer-all-the-latest = {COPY(developer_quantum, "All the latest developer tools in beta, plus <strong>experimental features</strong> like the Multi-line Console Editor and WebSocket Inspector.",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-welcome-to-firefox-browser"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Welcome to Firefox Browser Developer Edition",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-congrats-you-now-have"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Congrats. You now have Firefox Browser Developer Edition.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-a-separate-profile"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"A <strong>separate profile and path</strong> so you can easily run it alongside Release or Beta Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-preferences-tailored = {COPY(developer_quantum, "Preferences <strong>tailored for web developers</strong>: Browser and remote debugging are enabled by default, as are the dark theme and developer toolbar button.",)}
|
||||
firefox-developer-new-tools = {COPY(developer_quantum, "New Tools",)}
|
||||
firefox-developer-inactive-css = {COPY(developer_quantum, "Inactive CSS",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-devtools-now-grays-out"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox DevTools now grays out CSS declarations that don’t have an effect on the page. When you hover over the info icon, you’ll see a useful message about why the CSS is not being applied, including a hint about how to fix the problem.",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-devtools"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox DevTools",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-the-new-firefox-devtools"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"The new Firefox DevTools are powerful, flexible, and best of all, hackable. This includes a best-in-class JavaScript debugger, which can target multiple browsers and is built in React and Redux.",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-master-css-grid = {COPY(developer_quantum, "Master CSS Grid",)}
|
||||
firefox-developer-next-gen-css-engine = {COPY(developer_quantum, "Next-Gen CSS Engine",)}
|
||||
firefox-developer-a-next-generation = {COPY(developer_quantum, "A Next-Generation CSS Engine",)}
|
||||
firefox-developer-master-innovative-features = {COPY(developer_quantum, "Innovative Features",)}
|
||||
firefox-developer-want-to-be-on-the-cutting-edge = {COPY(developer_quantum, "Want to be on the cutting-edge?",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-nightly-receives"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox Nightly receives daily updates and allows you to access features months before they go mainstream.",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-quantum-includes"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox Quantum includes a new CSS engine, written in Rust, that has state-of-the-art innovations and is blazingly fast.",
|
||||
{
|
||||
"Firefox Quantum": TERM_REFERENCE("brand-name-firefox-quantum"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-is-the-only-browser"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox is the only browser with tools built specifically for building and designing with CSS Grid. These tools allow you to visualize the grid, display associated area names, preview transformations on the grid and much more.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-convenient-features = {COPY(developer_quantum, "Convenient Features",)}
|
||||
firefox-developer-faster-performance = {COPY(developer_quantum, "Faster Performance",)}
|
||||
firefox-developer-shapes-editor = {COPY(developer_quantum, "Shapes Editor",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-devtools-has-a-brand-new-v2"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox DevTools has a brand new shape path editor that takes the guesswork out of fine-tuning your shape-outside and clip-path shapes by allowing you to very easily fine-tune your adjustments with a visual editor.",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-devtools-has-a-brand-new"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox DevTools has a brand new shape path editor that takes the guesswork out of fine-tuning your shadow-outside and clip-path shapes by allowing you to very easily fine-tune your adjustments with a visual editor.",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-developer-faster-innovation = {COPY(developer_quantum, "Faster Information",)}
|
||||
firefox-developer-fonts-panel = {COPY(developer_quantum, "Fonts Panel",)}
|
||||
""",
|
||||
developer_quantum=developer_quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-the-new-fonts-panel"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"The new fonts panel in Firefox DevTools gives developers quick access to all of the information they need about the fonts being used in an element. It also includes valuable information such as the font source, weight, style and more.",
|
||||
{
|
||||
"Firefox DevTools": TERM_REFERENCE("brand-name-firefox-devtools"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-developer-edition-sends"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox Developer Edition automatically sends feedback to Mozilla.",
|
||||
{
|
||||
"Firefox Developer Edition": TERM_REFERENCE("brand-name-firefox-developer-edition"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-download-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Download the Firefox browser made for developers",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/developer.ftl",
|
||||
"firefox/developer.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-welcome-to-the-all-new"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Welcome to the all-new Firefox Quantum: Developer Edition",
|
||||
{
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
"Firefox Quantum": TERM_REFERENCE("brand-name-firefox-quantum"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-firefox-has-been-rebuilt"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Firefox has been rebuilt from the ground-up to be faster, sleeker, and more powerful than ever.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/developer.ftl",
|
||||
"firefox/developer.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-congrats-you-now-have-firefox"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"Congrats. You now have Firefox Quantum: Developer Edition.",
|
||||
{
|
||||
"Developer Edition": TERM_REFERENCE("brand-name-developer-edition"),
|
||||
"Firefox Quantum": TERM_REFERENCE("brand-name-firefox-quantum"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-developer-this-isnt-just-an-update"),
|
||||
value=REPLACE(
|
||||
developer_quantum,
|
||||
"This isn’t just an update. This is Firefox Quantum: A brand new Firefox that has been rebuilt from the ground-up to be faster, sleeker, and more powerful than ever.",
|
||||
{
|
||||
"Firefox Quantum": TERM_REFERENCE("brand-name-firefox-quantum"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,257 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/enterprise/index.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/enterprise/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/enterprise.ftl",
|
||||
"firefox/enterprise.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-get-firefox-for-your-enterprise-with"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Get Firefox for your enterprise with ESR and Rapid Release",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"ESR": TERM_REFERENCE("brand-name-esr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-get-unmatched-data-protection"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Get unmatched data protection on the release cadence that suits you with Firefox for enterprise. Download ESR and Rapid Release.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"ESR": TERM_REFERENCE("brand-name-esr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-enterprise"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Enterprise",
|
||||
{
|
||||
"Enterprise": TERM_REFERENCE("brand-name-enterprise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-overview = {COPY(index, "Overview",)}
|
||||
firefox-enterprise-downloads = {COPY(index, "Downloads",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-get-firefox-for-your-enterprise"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Get Firefox for your enterprise",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-get-the-firefox-extended-support"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Get the <a href="%s">Firefox Extended Support Release or Rapid Release</a> browser for comprehensive data security and data protection.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox Extended Support Release": TERM_REFERENCE("brand-name-firefox-extended-support-release"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-unmatched-data-protection = {COPY(index, "Unmatched data protection — on the release cadence that suits you",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-the-firefox-browser-is-open"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"The Firefox browser is open source and provides Enhanced Tracking Protection — all part of our longstanding commitment to data protection.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-your-data-stays-your-business = {COPY(index, "Your data stays your business",)}
|
||||
firefox-enterprise-deploy-when-and-how-you-want = {COPY(index, "Deploy when and how you want",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-with-install-packages-and"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"With install packages and a wide expansion of group policies and features, deployment is faster and more flexible than ever — and a breeze in Windows and MacOS environments.",
|
||||
{
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"MacOS": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-choose-your-release-cadence = {COPY(index, "Choose your release cadence",)}
|
||||
firefox-enterprise-get-rapid-releases-to-make = {COPY(index, "Get rapid releases to make sure you get the latest features faster, or go extended to ensure a super stable experience.",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-enterprise-downloads"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Enterprise downloads",
|
||||
{
|
||||
"Enterprise": TERM_REFERENCE("brand-name-enterprise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-windows-64-bit"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Windows 64-bit",
|
||||
{
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-macos = { -brand-name-mac }
|
||||
firefox-enterprise-select-your-download = {COPY(index, "Select your download",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-firefox-browser"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-firefox-browser-msi-installer"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox browser - MSI installer",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-firefox-extended-support-release"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox Extended Support Release (ESR)",
|
||||
{
|
||||
"Firefox Extended Support Release": TERM_REFERENCE("brand-name-firefox-extended-support-release"),
|
||||
"ESR": TERM_REFERENCE("brand-name-esr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-firefox-extended-support-release-msi"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Firefox Extended Support Release (ESR) - MSI installer",
|
||||
{
|
||||
"Firefox Extended Support Release": TERM_REFERENCE("brand-name-firefox-extended-support-release"),
|
||||
"ESR": TERM_REFERENCE("brand-name-esr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-support = {COPY(index, "Support",)}
|
||||
firefox-enterprise-msi-installers = {COPY(index, "MSI installers",)}
|
||||
firefox-enterprise-legacy-browser-support = {COPY(index, "Legacy browser support",)}
|
||||
firefox-enterprise-admx-templates = {COPY(index, "ADMX templates",)}
|
||||
firefox-enterprise-deployment-guide = {COPY(index, "Deployment guide",)}
|
||||
firefox-enterprise-policy-documentation = {COPY(index, "Policy documentation",)}
|
||||
firefox-enterprise-release-notes = {COPY(index, "Release Notes",)}
|
||||
firefox-enterprise-documentation-and-community = {COPY(index, "Documentation and Community Support",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-sample-plist-for-configuration"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Sample <a href="%s">plist for configuration profile</a>',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-enterprise-pkg-installer = {COPY(index, "PKG installer",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-windows-32-bit"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Windows 32-bit",
|
||||
{
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-enterprise-download-firefox-esr-or-rapid"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Download Firefox ESR or Rapid Release for<br> <a href="%(firefox_all)s">another language or platform.</a>',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(firefox_all)s": VARIABLE_REFERENCE("firefox_all"),
|
||||
"Firefox ESR": TERM_REFERENCE("brand-name-firefox-esr"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,169 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/facebookcontainer/index.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/facebookcontainer/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/facebook_container.ftl",
|
||||
"firefox/facebook_container.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-facebook-container-for-firefox"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Facebook Container for Firefox | Prevent Facebook from seeing what websites you visit.",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-millions-of-people-around"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Millions of people around the world trust Firefox Web browsers on Android, iOS and desktop computers. Fast. Private. Download now!",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-facebook-well-contained-keep"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Facebook. Well contained. Keep the rest of your life to yourself.",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-get-the-facebook-container"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Get the Facebook Container Extension",
|
||||
{
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-download-firefox-and-get-the"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Download Firefox and get the Facebook Container Extension",
|
||||
{
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-the-facebook-container-extension"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"The Facebook Container Extension is not available on mobile devices.",
|
||||
{
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-try-firefox-focus-the-privacy"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Try <strong>Firefox Focus</strong>, the privacy browser for Android and iOS.",
|
||||
{
|
||||
"Firefox Focus": TERM_REFERENCE("brand-name-firefox-focus"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
facebook-container-opt-out-on-your-terms = {COPY(index, "Opt out on your terms",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-facebook-can-track-almost"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Facebook can track almost all your web activity and tie it to your Facebook identity. If that’s too much for you, the <a href="%(fbcontainer)s">Facebook Container extension</a> isolates your identity into a separate container tab, making it harder for Facebook to track you on the web outside of Facebook.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(fbcontainer)s": VARIABLE_REFERENCE("fbcontainer"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
facebook-container-install-and-contain = {COPY(index, "Install and contain",)}
|
||||
""",
|
||||
index=index,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-installing-the-extension-is"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'Installing the <a href="%(fbcontainer)s">extension</a> is easy and, once activated, will open Facebook in a blue tab each time you use it. Use and enjoy Facebook normally. Facebook will still be able to send you advertising and recommendations on their site, but it will be much harder for Facebook to use your activity collected <strong>off Facebook</strong> to send you ads and other targeted messages.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(fbcontainer)s": VARIABLE_REFERENCE("fbcontainer"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-about-firefox-and-mozilla"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"About Firefox and Mozilla",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-were-backed-by-mozilla-the"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
'We’re backed by <a href="%(mozilla)s">Mozilla</a>, the not-for-profit organization that puts people over profit to give everyone more power online. We created this extension because we believe that you should have easy-to-use tools that help you manage your privacy and security.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(mozilla)s": VARIABLE_REFERENCE("mozilla"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("facebook-container-browse-freely-with-firefox"),
|
||||
value=REPLACE(
|
||||
index,
|
||||
"Browse freely with Firefox today.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,261 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
adblocker = "firefox/adblocker.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/adblocker.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/adblocker.ftl",
|
||||
"firefox/features/adblocker.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
features-adblocker-how-to-block-annoying = {COPY(adblocker, "How to block annoying ads using an ad blocker",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-how-to-stop-seeing-too"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
"How to stop seeing too many ads and keep companies from following you around online. An ad blocker guide from the Firefox web browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-the-ad-blocker-a-secret = {COPY(adblocker, "The ad blocker – a secret weapon against annoying ads.",)}
|
||||
features-adblocker-so-many-ads-so-little = {COPY(adblocker, "So many ads, so little patience… It’s time to stop the madness.",)}
|
||||
features-adblocker-the-average-person-sees = {COPY(adblocker, "The average person sees an average of 4,000 ads a day. If you think that’s too many, an ad blocker is your new best friend.",)}
|
||||
features-adblocker-an-ad-blocker-is-a-piece = {COPY(adblocker, "An ad blocker is a piece of software that can be used to block ads, and they work in two ways. The first way is when an ad blocker blocks the signal from an advertiser’s server, so the ad never shows up on your page. Another way ad blockers work is by blocking out sections of a website that could be ads.",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-these-ads-might-be-loud"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'These ads might be loud video ads, ads that follow you around the web, trackers, third-party cookies, and more. To use an ad blocker, you can search for ad blocker add-ons that are available in your browser. <a href="%(firefox)s">Firefox</a>, for example, has <a href="%(addons)s">this list of approved ad blocker add-ons</a>. Click on this list (or ad blockers that are approved for your browser) and see which fits your needs.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(firefox)s": VARIABLE_REFERENCE("firefox"),
|
||||
"%(addons)s": VARIABLE_REFERENCE("addons"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-find-the-right-ad-blocker = {COPY(adblocker, "Find the right ad blocker for you",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-theres-adblocker-ultimate"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'There’s <a href="%(url)s">AdBlocker Ultimate</a> that gets rid of every single ad, but buyer beware. Some of your favorite newspapers and magazines rely on advertising. Too many people blocking their ads could put them out of business.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-popup-ads-are-the-worst"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'Popup ads are the worst. Block them with <a href="%(url)s">Popup Blocker</a> and never deal with another annoying popup again.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-one-of-the-most-popular"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'One of the most popular ad blockers for Chrome, Safari and Firefox is <a href="%(url)s">AdBlock</a>. Use it to block ads on Facebook, YouTube and Hulu.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"YouTube": TERM_REFERENCE("brand-name-youtube"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Safari": TERM_REFERENCE("brand-name-safari"),
|
||||
"Hulu": TERM_REFERENCE("brand-name-hulu"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-create-a-tracker-free = {COPY(adblocker, "Create a tracker-free zone with Content Blocking",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-on-firefox-you-can-use"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'On Firefox, you can use <a href="%(privacy)s">Privacy</a> or <a href="%(blocking)s">Content Blocking</a> settings to get even more control over ad trackers that serve you the ads.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
"%(blocking)s": VARIABLE_REFERENCE("blocking"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-choose-your-level-of-protection = {COPY(adblocker, "Choose your level of protection",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-to-start-click-on-the"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
"To start, click on the Firefox menu in the top right-hand corner of your screen. It looks like three lines stacked on top of each other. In the drop-down menu, click on Content Blocking. You should see a blue pop-up with different selections.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-go-easy-with-standard = {COPY(adblocker, "Go easy with Standard mode",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-if-ads-dont-bother-you"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'If ads don’t bother you and you don’t mind being followed by trackers and third-party cookies, then the Standard setting should work for you. To get trackers off your tail in Standard mode, use a <a href="%(url)s">Private Browsing</a> window.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-get-tough-with-strict = {COPY(adblocker, "Get tough with Strict mode",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-if-seeing-too-many-ads"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
"If seeing too many ads ruins your day, then the Strict mode is a better fit. This mode will block known third-party trackers and cookies in all Firefox windows.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-do-it-yourself-custom = {COPY(adblocker, "Do-it-yourself Custom mode",)}
|
||||
features-adblocker-the-custom-setting-gives = {COPY(adblocker, "The Custom setting gives you the ultimate choice. You can decide what you’re blocking, including trackers, cookies and more. If you allow cookies from a website, you’ll automatically be in Custom mode.",)}
|
||||
features-adblocker-cover-your-trail-block = {COPY(adblocker, "Cover your trail, block trackers",)}
|
||||
features-adblocker-click-on-the-trackers = {COPY(adblocker, "Click on the Trackers box and you’ll be able to block trackers in two ways. One way to block trackers is to do it when you’re working in a Private Window. Another way to do it is to block trackers in all windows. Keep in mind that if you choose to always block trackers, some pages might not load correctly.",)}
|
||||
features-adblocker-take-a-bite-out-of-cookies = {COPY(adblocker, "Take a bite out of cookies",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-cookies-are-sent-by-websites"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'<a href="%(url)s">Cookies</a> are sent by websites you visit. They live on your computer and monitor what you’ve been doing on a site. When an airline hikes your rates because you’ve looked at plane tickets once that day, that is the handiwork of a cookie.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-in-firefox-you-can-block"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
"In Firefox, you can block all third-party cookies or just those set by trackers. Be aware that blocking all cookies can break some sites.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-send-a-do-not-track-signal = {COPY(adblocker, "Send a Do Not Track signal",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-if-you-dont-want-your"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'If you don’t want your online behavior used for ads, you can send websites a polite “thanks but no thanks” letter by checking the <a href="%(url)s">Do Not Track</a> option of Firefox. Participation is voluntary, but the websites that participate will stop tracking you immediately.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-speed-up-thanks-to-ad = {COPY(adblocker, "Speed up thanks to ad blockers",)}
|
||||
features-adblocker-in-some-cases-an-ad-blocker = {COPY(adblocker, "In some cases, an ad blocker can help your browser go faster. When an ad is loading, it can slow down a website. At the same time, it takes longer to find what you’re looking for if you’re too busy closing yet another ad.",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-adblocker-if-you-want-to-learn-more"),
|
||||
value=REPLACE(
|
||||
adblocker,
|
||||
'If you want to learn more about ad blocking, there are hundreds of ad blocker extensions available for Firefox and other browsers. If want to try out the ad blockers Firefox uses, <a href="%(url)s">click here to download</a> a browser that puts privacy first.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-adblocker-take-control-of-your-browser = {COPY(adblocker, "Take control of your browser.",)}
|
||||
""",
|
||||
adblocker=adblocker,
|
||||
),
|
||||
)
|
|
@ -1,90 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
bookmarks = "firefox/features/bookmarks.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/bookmarks.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/bookmarks.ftl",
|
||||
"firefox/features/bookmarks.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-bookmarks-firefox-browser-better"),
|
||||
value=REPLACE(
|
||||
bookmarks,
|
||||
"Firefox Browser: Better bookmarks everywhere you go",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-bookmarks-easily-organize-your-bookmarks = {COPY(bookmarks, "Easily organize your bookmarks into folder and access them across all your devices, from desktop to mobile.",)}
|
||||
features-bookmarks-better-bookmarks = {COPY(bookmarks, "Better bookmarks",)}
|
||||
""",
|
||||
bookmarks=bookmarks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-bookmarks-dont-agonize-lovers-of"),
|
||||
value=REPLACE(
|
||||
bookmarks,
|
||||
"Don’t agonize, lovers of bookmarking. Organize with Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-bookmarks-file-that-bookmark = {COPY(bookmarks, "File that bookmark",)}
|
||||
features-bookmarks-get-your-faves-all-sorted = {COPY(bookmarks, "Get your faves all sorted with the bookmark star icon, which lets you add custom names and folders quickly. Then dial in your bookmarks toolbar to make sure you never lose sight of the links you love.",)}
|
||||
features-bookmarks-fly-with-that-bookmark = {COPY(bookmarks, "Fly with that bookmark",)}
|
||||
""",
|
||||
bookmarks=bookmarks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-bookmarks-take-your-favorites-on"),
|
||||
value=REPLACE(
|
||||
bookmarks,
|
||||
'Take your favorites on the fly. Use Firefox Sync to access your bookmarks across all your devices, from desktop to mobile. Or try <a href="%(url)s">Pocket</a> to save any online article, or page and come back to later – even without internet.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox Sync": TERM_REFERENCE("brand-name-firefox-sync"),
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-bookmarks-futz-with-that-bookmark = {COPY(bookmarks, "Futz with that bookmark",)}
|
||||
""",
|
||||
bookmarks=bookmarks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-bookmarks-practice-your-exactitude"),
|
||||
value=REPLACE(
|
||||
bookmarks,
|
||||
'Practice your exactitude with every bookmark manager <a href="%(url)s">add-on</a> you can think of, from full page snapshots to quick-switch sidebars to locked-down-tight private bookmarks.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,92 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
fast = "firefox/features/fast.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
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"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,121 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
independent = "firefox/features/independent.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/independent.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/independent.ftl",
|
||||
"firefox/features/independent.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-a-different"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox, a different browser for different times. Browse free.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-independent-browse-the-internet = {COPY(independent, "Browse the Internet as it was meant to be… free, safe and accessible to all. Declare your online independence.",)}
|
||||
""",
|
||||
independent=independent,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-rebel-with-a"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox: Rebel with a cause",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-is-independent"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox is independent and a part of the non-profit Mozilla, which fights for your online rights, keeps corporate powers in check and makes the Internet accessible to everyone, everywhere.",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-independent-no-strings-attached = {COPY(independent, "No strings attached",)}
|
||||
""",
|
||||
independent=independent,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-is-built-by"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox is built by a non-profit. That means we can do things that others can’t, like build new products and features without a hidden agenda. We champion your right to privacy with tools like Private Browsing with Tracking Protection.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-is-built-by-old"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox is built by a non-profit. That means we can do things that others can’t, like build new products and features without a hidden agenda. We champion your right to privacy with tools like Private Browsing with Tracking Protection, which go beyond what Google Chrome and Microsoft Edge offer.",
|
||||
{
|
||||
"Microsoft": TERM_REFERENCE("brand-name-microsoft"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-independent-what-you-see-is-what = {COPY(independent, "What you see is what you get",)}
|
||||
features-independent-we-believe-the-internet = {COPY(independent, "We believe the Internet is for people, not profit. Unlike other companies, we don’t sell access to your data. <em>You’re</em> in control over who sees your search and browsing history. Choice — that’s what a healthy Internet is all about!",)}
|
||||
features-independent-a-browser-on-a-mission = {COPY(independent, "A browser on a mission",)}
|
||||
""",
|
||||
independent=independent,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-in-addition-to-fighting"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"In addition to fighting for your online rights, we also keep corporate powers in check, while working with allies all around the globe to nurture healthy Internet practices. So when you choose Firefox, we’re choosing you, too.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-independent-firefox-is-a-browser"),
|
||||
value=REPLACE(
|
||||
independent,
|
||||
"Firefox is a browser with a conscience. As part of the technology non-profit Mozilla, we fight for your online rights, keep corporate powers in check and help educate developing countries on healthy Internet practices. So when you choose Firefox, we’re choosing you, too.",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,118 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
memory = "firefox/features/memory.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/memory.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/memory.ftl",
|
||||
"firefox/features/memory.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-firefox-browser-use-less"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
"Firefox Browser: Use less memory, get more speed",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-is-your-computer-slow-your"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
"Is your computer slow? Your browser might be using too much memory. Switch to Firefox today for more speed.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-less-memory-usage-than-chrome"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
"Less memory usage than Chrome",
|
||||
{
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-if-your-web-browser-uses"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
"If your web browser uses too much memory, switch to Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-memory-speed-up-your-computer = {COPY(memory, "Speed up your computer",)}
|
||||
""",
|
||||
memory=memory,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-every-computer-program-you"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
"Every computer program you run takes up some memory. When too much is used, your system can slooooowww down. Firefox aims for a balance — using enough memory to let you browse smoothly and leaving plenty of memory to keep your computer responsive.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-memory-stop-running-out-of-memory = {COPY(memory, "Stop running out of memory",)}
|
||||
""",
|
||||
memory=memory,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-chrome-uses-up-to-177x-more"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
'<a href="%(url)s">Chrome uses up to 1.77x more memory than Firefox</a>. If your computer is already low on memory, this can cause a significant slowdown. Using Firefox’s latest version with multi-process can result in more available memory to run your favorite programs.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-memory-browse-faster-privately = {COPY(memory, "Browse faster, privately",)}
|
||||
""",
|
||||
memory=memory,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-memory-explore-the-web-faster-with"),
|
||||
value=REPLACE(
|
||||
memory,
|
||||
'Explore the web faster with <a href="%(url)s">Firefox Private Browsing</a>. Only Firefox’s private mode includes tracking protection which blocks ads with trackers from loading on pages. Decluttering sites means web pages can load faster.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,115 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
password_manager = "firefox/features/password-manager.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/password-manager.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/password-manager.ftl",
|
||||
"firefox/features/password-manager.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-firefox-browser"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
"Firefox Browser: Fast, Easy Password Manager",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-firefox-password"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
"Firefox Password Manager saves all your passwords in one place so you can automatically login to sites, or retrieve saved passwords.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
password-manager-password-manager = {COPY(password_manager, "Password Manager achievement unlocked",)}
|
||||
""",
|
||||
password_manager=password_manager,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-give-up-the-memory"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
"Give up the memory game with Firefox Password Manager.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
password-manager-password-hero = {COPY(password_manager, "Password hero",)}
|
||||
""",
|
||||
password_manager=password_manager,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-forget-the-reset"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
'Forget the reset. Firefox Password Manager keeps all your passwords so you can log in automatically, or find saved passwords easily. For super security, give your computer a <a href="%(url)s">master password</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
password-manager-password-ninja = {COPY(password_manager, "Password ninja",)}
|
||||
""",
|
||||
password_manager=password_manager,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-no-more-try-again"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
"No more “try again” while you’re trying to get somewhere. Log in to your Firefox Account on your phone, and your passwords come with you. Your login details will simply appear, just like that.",
|
||||
{
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
password-manager-password-master = {COPY(password_manager, "Password master",)}
|
||||
""",
|
||||
password_manager=password_manager,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("password-manager-earn-your-second"),
|
||||
value=REPLACE(
|
||||
password_manager,
|
||||
'Earn your second security black belt with Firefox’s vast array of password manager <a href="%(addons)s">add-ons</a>. Choose an existing favorite or find a next-level one through expert community ratings and reviews.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(addons)s": VARIABLE_REFERENCE("addons"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,109 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
private_browsing = "firefox/features/private-browsing.lang"
|
||||
shared = "firefox/shared.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/features/private-browsing.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/features/private-browsing.ftl",
|
||||
"firefox/features/private-browsing.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
features-private-browsing-private-browser = {COPY(private_browsing, "Private Browser with extra tracking protection",)}
|
||||
""",
|
||||
private_browsing=private_browsing,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-firefox-protects"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"Firefox protects your online privacy and blocks trackers that follow you around the web.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-firefox-more-protection"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"Firefox: More protection. Less worry.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-were-obsessed-with"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"We’re obsessed with protecting your privacy. That’s why we’ve made Firefox Private Browsing more powerful than the others.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-private-browsing-browse-without = {COPY(private_browsing, "Browse without a trace",)}
|
||||
""",
|
||||
private_browsing=private_browsing,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-sharing-is-caring"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"Sharing is caring, but that should be your call. Firefox Private Browsing automatically erases your online info like passwords, cookies and history from your computer. So that when you close out, you leave no trace.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-private-browsing-catch-those-hidden = {COPY(private_browsing, "Catch those hidden trackers",)}
|
||||
""",
|
||||
private_browsing=private_browsing,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-some-websites-and"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"Some websites and ads attach hidden trackers that collect your browsing info long after you’ve left. Only Firefox Private Browsing has tracking protection to block them automatically.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
features-private-browsing-shake-off-tracking = {COPY(private_browsing, "Shake off tracking weight",)}
|
||||
""",
|
||||
private_browsing=private_browsing,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("features-private-browsing-not-only-do-trackers"),
|
||||
value=REPLACE(
|
||||
private_browsing,
|
||||
"Not only do trackers collect info, they can weigh down your browsing speeds. Only Firefox Private Browsing blocks ads with hidden trackers, so you can drop the baggage and browse freely.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,80 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
firstrun = "firefox/firstrun/firstrun.lang"
|
||||
quantum = "firefox/new/quantum.lang"
|
||||
|
||||
|
||||
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,
|
||||
),
|
||||
)
|
|
@ -1,54 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
main = "main.lang"
|
||||
|
||||
|
||||
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,
|
||||
),
|
||||
)
|
|
@ -1,171 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
home_master = "firefox/home-master.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/home/index-master.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/home.ftl",
|
||||
"firefox/home.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-firefox-protect-your"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Firefox - Protect your life online with privacy-first products",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-firefox-is-more-than"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Firefox is more than a browser. Learn more about Firefox products that handle your data with respect and are built for privacy anywhere you go online.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-the-browser-is-just = {COPY(home_master, "The browser is just the beginning",)}
|
||||
firefox-home-meet-our-family-of = {COPY(home_master, "Meet our family of products",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-get-trackers-off"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Get 2,000+ trackers off your trail — including Facebook",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-know-when-hackers-strike = {COPY(home_master, "Know when hackers strike — and stay a step ahead",)}
|
||||
firefox-home-start-getting-breach = {COPY(home_master, "Start getting breach reports",)}
|
||||
firefox-home-keep-your-passwords = {COPY(home_master, "Keep your passwords safe on every device",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-learn-more-about-lockwise"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Learn more about Lockwise",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-get-the-respect-you = {COPY(home_master, "Get the <strong>respect</strong> you deserve",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-every-single-firefox"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Every single Firefox product honors our Personal Data Promise: <strong>Take less. Keep it safe. No secrets.</strong>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-share-large-files-without = {COPY(home_master, "Share large files without prying eyes",)}
|
||||
firefox-home-start-sending-files = {COPY(home_master, "Start sending files safely",)}
|
||||
firefox-home-trade-clickbait-for = {COPY(home_master, "Trade clickbait for quality content",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-learn-more-about-pocket"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Learn more about Pocket",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-one-login-all-your = {COPY(home_master, "One login. All your devices. A family of products that respect your <strong>privacy</strong>.",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-learn-more-about-joining"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Learn more about joining Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-get-the-browser-extension = {COPY(home_master, "Get the browser extension",)}
|
||||
""",
|
||||
home_master=home_master,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-home-get-the-facebook-container"),
|
||||
value=REPLACE(
|
||||
home_master,
|
||||
"Get the Facebook Container extension",
|
||||
{
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-home-download-the-browser = {COPY(home_master, "Download the browser",)}
|
||||
firefox-home-download-the-app = {COPY(home_master, "Download the app",)}
|
||||
firefox-home-desktop = {COPY(home_master, "Desktop",)}
|
||||
firefox-home-browsers = {COPY(home_master, "Browsers",)}
|
||||
firefox-home-android = { -brand-name-android }
|
||||
firefox-home-ios = { -brand-name-ios }
|
||||
firefox-home-monitor = { -brand-name-monitor }
|
||||
firefox-home-lockwise = { -brand-name-lockwise }
|
||||
firefox-home-send = { -brand-name-send }
|
||||
firefox-home-mozilla = { -brand-name-mozilla }
|
||||
firefox-home-firefox-browser = { -brand-name-firefox-browser }
|
||||
firefox-home-firefox-monitor = { -brand-name-firefox-monitor }
|
||||
firefox-home-firefox-lockwise = { -brand-name-firefox-lockwise }
|
||||
firefox-home-firefox-send = { -brand-name-firefox-send }
|
||||
firefox-home-pocket = { -brand-name-pocket }
|
||||
""",
|
||||
home_master=home_master,
|
||||
),
|
||||
)
|
|
@ -1,260 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
download_button = "firefox/includes/download-button.lang"
|
||||
download_button = "download_button.lang"
|
||||
main = "main.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/includes/download-button.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"download_button.ftl",
|
||||
"download_button.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
download-button-download-now = {COPY(download_button, "Download now",)}
|
||||
download-button-free-download = {COPY(download_button, "Free Download",)}
|
||||
download-button-firefox-beta = { -brand-name-firefox-beta }
|
||||
download-button-firefox-aurora = { -brand-name-firefox-aurora }
|
||||
download-button-firefox-developer-edition = <span>{ -brand-name-firefox }</span> { -brand-name-developer-edition }
|
||||
download-button-firefox-nightly = { -brand-name-firefox-nightly }
|
||||
download-button-supported-devices = {COPY(download_button, "Supported Devices",)}
|
||||
download-button-whats-new = {COPY(download_button, "What’s New",)}
|
||||
download-button-systems-languages = {COPY(download_button, "Systems & Languages",)}
|
||||
download-button-recommended = {COPY(download_button, "Recommended",)}
|
||||
""",
|
||||
download_button=download_button,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-mozilla-no-longer-provides"),
|
||||
value=REPLACE(
|
||||
download_button,
|
||||
'<a href="%(url)s">Mozilla no longer provides security updates for Firefox on Windows XP or Vista</a>, but you can still download the final Windows 32-bit version below.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"XP": TERM_REFERENCE("brand-name-xp"),
|
||||
"Vista": TERM_REFERENCE("brand-name-vista"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-please-follow-these"),
|
||||
value=REPLACE(
|
||||
download_button,
|
||||
'Please follow <a href="%(url)s">these instructions</a> to install Firefox.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-your-system-does-not"),
|
||||
value=REPLACE(
|
||||
download_button,
|
||||
'Your system doesn\'t meet the <a href="%(url)s">requirements</a> to run Firefox.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"download_button.ftl",
|
||||
"download_button.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-other-platforms"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Firefox for Other Platforms & Languages",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-update-your-firefox"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Update your Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-get-firefox-android"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Get Firefox for Android",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-get-firefox-ios"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Get Firefox for iOS",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-google-play"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Get it on Google Play",
|
||||
{
|
||||
"Google Play": TERM_REFERENCE("brand-name-google-play"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-free-google-play"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Get it free on Google Play",
|
||||
{
|
||||
"Google Play": TERM_REFERENCE("brand-name-google-play"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-app-store"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Get it free from the App Store",
|
||||
{
|
||||
"App Store": TERM_REFERENCE("brand-name-app-store"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-download-app-store"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Download on the App Store",
|
||||
{
|
||||
"App Store": TERM_REFERENCE("brand-name-app-store"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-download-firefox"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Download Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-your-system-may"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Your system may not meet the requirements for Firefox, but you can try one of these versions:",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-beta-android"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"<span>Firefox Beta</span> for Android",
|
||||
{
|
||||
"Firefox Beta": TERM_REFERENCE("brand-name-firefox-beta"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-aurora-android"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"<span>Firefox Aurora</span> for Android",
|
||||
{
|
||||
"Firefox Aurora": TERM_REFERENCE("brand-name-firefox-aurora"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-nightly-android"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"<span>Firefox Nightly</span> for Android",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-android"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"<span>Firefox</span> for Android",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-ios"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"<span>Firefox</span> for iOS",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("download-button-firefox-privacy"),
|
||||
value=REPLACE(
|
||||
"download_button.lang",
|
||||
"Firefox Privacy",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"download_button.ftl",
|
||||
"download_button.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
download-button-download = {COPY(main, "Download",)}
|
||||
""",
|
||||
main=main,
|
||||
),
|
||||
)
|
|
@ -1,110 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
lockwise = "firefox/products/lockwise.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/lockwise/lockwise.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/products/lockwise.ftl",
|
||||
"firefox/products/lockwise.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-firefox-lockwise-password"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Firefox Lockwise — password manager — take your passwords everywhere",
|
||||
{
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-firefox-lockwise-lets-you"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Firefox Lockwise lets you securely access the passwords you’ve saved in Firefox from anywhere — even outside of the browser. Features 256-bit encryption and Face/Touch ID.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
lockwise-firefox-lockwise = { -brand-name-firefox-lockwise }
|
||||
lockwise-take-your-passwords-everywhere = {COPY(lockwise, "Take your passwords everywhere",)}
|
||||
""",
|
||||
lockwise=lockwise,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-securely-access-the-passwords"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Securely access the passwords you’ve saved in Firefox from anywhere — even outside of the browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-try-lockwise-now"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Try Lockwise now",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-install-for-firefox"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Install for Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-open-in-firefox"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Open in Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("lockwise-only-in-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
lockwise,
|
||||
"Only in the Firefox Browser",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
lockwise-256-bit-encryption-protects = {COPY(lockwise, "256-bit encryption protects you while syncing",)}
|
||||
lockwise-get-to-your-passwords-securely = {COPY(lockwise, "Get to your passwords securely with Face or Touch ID",)}
|
||||
lockwise-your-privacy-comes-first = {COPY(lockwise, "Your privacy comes first.",)}
|
||||
lockwise-we-keep-your-data-safe = {COPY(lockwise, "We keep your data safe, never sold.",)}
|
||||
lockwise-support = {COPY(lockwise, "Support",)}
|
||||
lockwise-your-privacy = {COPY(lockwise, "Your Privacy",)}
|
||||
lockwise-github = { -brand-name-github }
|
||||
""",
|
||||
lockwise=lockwise,
|
||||
),
|
||||
)
|
|
@ -1,207 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/mobile/index.lang"
|
||||
mobile_2019 = "firefox/mobile-2019.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/mobile/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/mobile.ftl",
|
||||
"firefox/mobile.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-download-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Download the Firefox Browser on your Mobile for iOS and Android",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-firefox-browser-for-mobile"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Firefox Browser for Mobile blocks over 2000 trackers by default, giving you the privacy you deserve and the speed you need in a private mobile browser.",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-firefox = { -brand-name-firefox }
|
||||
firefox-mobile-firefox-browser = { -brand-name-firefox-browser }
|
||||
firefox-mobile-get-the-mobile-browser-built = {COPY(mobile_2019, "Get the mobile browser built for you, not advertisers",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-check-out-firefox-again-its"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Check out Firefox again. It’s fast, private and on your side. For iOS and Android.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-get-automatic-privacy-on-mobile = {COPY(mobile_2019, "Get automatic privacy on mobile",)}
|
||||
firefox-mobile-super-fast-private-by-default = {COPY(mobile_2019, "Super fast. Private by default. Blocks 2000+ online trackers.",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-get-firefox-mobile"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Get Firefox Mobile",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-block-online-trackers-and = {COPY(mobile_2019, "Block online trackers and invasive ads",)}
|
||||
firefox-mobile-privacy-protection-by-default = {COPY(mobile_2019, "Privacy protection by default",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-leave-no-trace-with-private"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
'Leave no trace with <a href="%s">Private Browsing mode</a>. When you close out, your history and cookies are deleted.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-stop-companies-from-following = {COPY(mobile_2019, "Stop companies from following you",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-stay-off-their-radar-with"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
'Stay off their radar with <a href="%s">Firefox Tracking Protection</a>',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-discover-products-that-keep = {COPY(mobile_2019, "Discover products that keep you safe",)}
|
||||
firefox-mobile-sync-your-history-passwords = {COPY(mobile_2019, "Sync your history, passwords, and bookmarks. Send tabs across all of your devices.",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-android-only"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Android only",
|
||||
{
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-make-android-your-own"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Make Android your own",
|
||||
{
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-customize-your-firefox-mobile"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
'Customize your Firefox mobile browser with <a href="%s">extensions</a> to block ads, manage passwords, stop Facebook from tracking you and more.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-find-it-fast-with-a-smart = {COPY(mobile_2019, "Find it fast with a smart search bar",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-firefox-anticipates-your-needs"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Firefox anticipates your needs with smart search suggestions and quick access to the sites you visit most.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-the-privacy-you-deserve-the = {COPY(mobile_2019, "The privacy you deserve. The speed you need.",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-mobile-get-firefox-for-mobile"),
|
||||
value=REPLACE(
|
||||
mobile_2019,
|
||||
"Get Firefox for mobile",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-mobile-send-a-download-link-to-your = {COPY(mobile_2019, "Send a download link to your phone.",)}
|
||||
firefox-mobile-scan-the-qr-code-to-get-started = {COPY(mobile_2019, "Scan the QR code to get started",)}
|
||||
""",
|
||||
mobile_2019=mobile_2019,
|
||||
),
|
||||
)
|
|
@ -1,275 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
trailhead = "firefox/new/trailhead.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/new/trailhead/base.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/download.ftl",
|
||||
"firefox/new/download.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-mozilla-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download Mozilla Firefox, a free Web browser. Firefox is created by a global non-profit dedicated to putting individuals in control online. Get Firefox for Windows, macOS, Linux, Android and iOS today!",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-the-fastest-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download the fastest Firefox ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-faster-page-loading-less-memory"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Faster page loading, less memory usage and packed with features, the new Firefox is here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-automatic-privacy-is-here"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Automatic privacy is here. Download Firefox to block over 2000 trackers.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-get-the-latest-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Get the latest Firefox browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-firefox-shows-you-how-many"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Firefox shows you how many data-collecting trackers are blocked with <strong>Enhanced Tracking Protection</strong>.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-firefox-lockwise-makes-secure"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"<strong>Firefox Lockwise</strong> makes the passwords you save in Firefox secure and available on all your devices.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-firefox-monitor-alerts"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"<strong>Firefox Monitor</strong> alerts you if we know your information is a part of another company’s data breach.",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-join-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Join Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-firefox-lockwise-makes"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"<strong>Firefox Lockwise</strong> makes the passwords you save in Firefox available on all your devices.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-firefox-for-windows"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download Firefox <br>for Windows",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-firefox-for-macos"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download Firefox <br>for macOS",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-download-firefox-for-linux"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Download Firefox <br>for Linux",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-youve-already-got-the-browser"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"You’ve already got the browser. Now get even more from Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-watch-for-hackers-with"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Watch for hackers with Firefox Monitor, protect passwords with Firefox Lockwise, and more.",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-get-more-from-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/new/trailhead.lang",
|
||||
"Get More From Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/download.ftl",
|
||||
"firefox/new/download.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
firefox-new-free-web-browser = {COPY(trailhead, "Free Web Browser",)}
|
||||
firefox-new-and-start-getting-the-respect = {COPY(trailhead, "And start getting the respect you deserve with our family of privacy-first products.",)}
|
||||
firefox-new-advanced-install-options = {COPY(trailhead, "Advanced install options & other platforms",)}
|
||||
firefox-new-download-in-another-language = {COPY(trailhead, "Download in another language",)}
|
||||
firefox-new-fix-a-problem = {COPY(trailhead, "Fix a problem",)}
|
||||
firefox-new-need-help = {COPY(trailhead, "Need help?",)}
|
||||
firefox-new-see-whats-being-blocked = {COPY(trailhead, "See what’s being blocked",)}
|
||||
firefox-new-make-your-passwords-portable = {COPY(trailhead, "Make your passwords portable",)}
|
||||
firefox-new-watch-for-data-breaches = {COPY(trailhead, "Watch for data breaches",)}
|
||||
firefox-new-connect-to-a-whole-family = {COPY(trailhead, "Connect to a whole family of respectful products, plus all the knowledge you need to protect yourself online.",)}
|
||||
firefox-new-passwords-made-portable = {COPY(trailhead, "Passwords made portable",)}
|
||||
firefox-new-protect-your-privacy = {COPY(trailhead, "Protect your privacy",)}
|
||||
firefox-new-private-browsing-clears = {COPY(trailhead, "<strong>Private Browsing</strong> clears your history to keep it secret from anyone who uses your computer.",)}
|
||||
firefox-new-advanced-install-options-heading = {COPY(trailhead, "Advanced Install Options & Other Platforms",)}
|
||||
firefox-new-just-download-the-browser = {COPY(trailhead, "Just Download The Browser",)}
|
||||
""",
|
||||
trailhead=trailhead,
|
||||
),
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/download.ftl",
|
||||
"firefox/new/download.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-youre-using-an-insecure-outdated"),
|
||||
value=REPLACE(
|
||||
trailhead,
|
||||
'You’re using an insecure, outdated operating system <a href="%(url)s">no longer supported by Firefox</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(url)s": VARIABLE_REFERENCE("url"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-your-firefox-new-should-begin"),
|
||||
value=REPLACE(
|
||||
trailhead,
|
||||
'Your download should begin automatically. Didn’t work? <a id="%(id)s" href="%(fallback_url)s">Try downloading again</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(id)s": VARIABLE_REFERENCE("id"),
|
||||
"%(fallback_url)s": VARIABLE_REFERENCE("fallback_url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-new-firefox-is-more-than-a-browser"),
|
||||
value=REPLACE(
|
||||
trailhead,
|
||||
"Firefox is more than a browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-new-its-privacy-and-peace-of = {COPY(trailhead, "It’s <strong>privacy and peace of mind</strong> on mobile, too.",)}
|
||||
firefox-new-its-a-family-of-products = {COPY(trailhead, "It’s a <strong>family of products</strong> that treat your personal data with respect.",)}
|
||||
firefox-new-its-everything-you-need-to = {COPY(trailhead, "It’s everything you need to know about <strong>staying safe online</strong>.",)}
|
||||
firefox-new-its-a-community-that-believes = {COPY(trailhead, "It’s <strong>a community</strong> that believes tech can do better.",)}
|
||||
""",
|
||||
trailhead=trailhead,
|
||||
),
|
||||
)
|
|
@ -1,462 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
base_download = "firefox/new/protocol/base_download.lang"
|
||||
quantum = "firefox/new/quantum.lang"
|
||||
main = "main.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/new/protocol/base_download.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/platform.ftl",
|
||||
"firefox/new/platform.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
new-platform-free-web-browser = {COPY(quantum, "Free Web Browser",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-firefox"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-the-fastest"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download the fastest Firefox ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-faster-page-loading"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Faster page loading, less memory usage and packed with features, the new Firefox is here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-the-new-firefox"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"The new <strong>Firefox</strong>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-2x-faster = {COPY(quantum, "2x Faster",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-the-best-firefox-ever"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"The best Firefox ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-lightweight = {COPY(quantum, "Lightweight",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-uses-30-less-memory"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Uses 30% less memory than Chrome",
|
||||
{
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-powerfully-private = {COPY(quantum, "Powerfully private",)}
|
||||
new-platform-truly-private-browsing = {COPY(quantum, "Truly Private Browsing with Tracking Protection",)}
|
||||
new-platform-advanced-install-options = {COPY(quantum, "Advanced install options & other platforms",)}
|
||||
new-platform-download-in-another = {COPY(quantum, "Download in another language",)}
|
||||
new-platform-fix-a-problem = {COPY(quantum, "Fix a problem",)}
|
||||
new-platform-need-help = {COPY(main, "Need help?",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
main=main,
|
||||
),
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/platform.ftl",
|
||||
"firefox/new/platform.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-firefox-title"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox, a free Web browser. Firefox is created by a global non-profit dedicated to putting individuals in control online. Get Firefox for Windows, macOS, Linux, Android and iOS today!",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"macOS": TERM_REFERENCE("brand-name-mac"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/platform.ftl",
|
||||
"firefox/new/platform.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-linux"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Linux",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-desc-linux"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Linux, a free Web browser. Firefox is created by a global non-profit dedicated to putting individuals in control online. Get Firefox for Linux today!",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-the-fastest-linux"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download the fastest Firefox for Linux ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-faster-page-loading-linux"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Faster page loading, less memory usage and packed with features, the new Firefox for Linux is here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-firefox-for-linux"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Firefox for Linux",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-own-your-online-life = {COPY(quantum, "Own your online life.",)}
|
||||
new-platform-privacy-more-than = {COPY(quantum, "Privacy - more than a policy",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-your-life-your-business"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Your life, your business. Firefox blocks third-party tracking cookies on Linux.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-speed-meet-security"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Speed, meet security. Firefox is two times faster with 30% less memory than Chrome.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-open-source = {COPY(quantum, "Open source",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-look-under-the-hood"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Look under the hood. Like Linux, Firefox features are open source.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/platform.ftl",
|
||||
"firefox/new/platform.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-firefox-mac"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Mac",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-firefox-desc-mac"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Mac, a free Web browser. Firefox is created by a global non-profit dedicated to putting individuals in control online. Get Firefox for Mac today!",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-the-fastest-mac"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download the fastest Firefox for Mac ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-faster-page-loading-mac"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Faster page loading, less memory usage and packed with features, the new Firefox for Mac is here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-firefox-respects-your"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Firefox respects <span>your privacy on Mac.</span>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-privacy-comes-first = {COPY(quantum, "Privacy comes first",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-firefox-doesnt-spy"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Firefox doesn’t spy on searches. We stop third-party tracking cookies and give you full control.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-get-speed-and-security"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Get speed and security. Firefox is fast on Mac because we don’t track your moves.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Mac": TERM_REFERENCE("brand-name-mac-short"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-block-trackers = {COPY(quantum, "Block trackers",)}
|
||||
new-platform-be-the-master-of-your = {COPY(quantum, "Be the master of your domain with strict content blocking. Cut off all cookies and trackers.",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
),
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/new/platform.ftl",
|
||||
"firefox/new/platform.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-windows"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Windows",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-mozilla-desc-windows"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download Mozilla Firefox for Windows, a free Web browser. Firefox is created by a global non-profit dedicated to putting individuals in control online. Get Firefox for Windows today!",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-download-the-fastest-windows"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Download the fastest Firefox for Windows ever",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-faster-page-loading-windows"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Faster page loading, less memory usage and packed with features, the new Firefox for Windows is here.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-firefox-fights"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Firefox fights for you <span>on Windows.</span>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-firefox-moves-fast"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Firefox moves fast and treats your data with care - no ad tracking and no slowdown.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-common-sense-privacy = {COPY(quantum, "Common sense privacy",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-live-your-life"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Live your life, Firefox isn’t watching. Choose what to share and when to share it.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
new-platform-seamless-setup = {COPY(quantum, "Seamless setup",)}
|
||||
""",
|
||||
quantum=quantum,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("new-platform-easy-migration"),
|
||||
value=REPLACE(
|
||||
quantum,
|
||||
"Easy migration of preferences and bookmarks when you download Firefox for Windows.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,95 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
nightly_firstrun = "firefox/nightly_firstrun.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/nightly_firstrun.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/nightly/firstrun.ftl",
|
||||
"firefox/nightly/firstrun.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-firstrun-firefox-nightly"),
|
||||
value=REPLACE(
|
||||
nightly_firstrun,
|
||||
"Firefox Nightly First Run Page",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-firstrun-thank-you-for-using"),
|
||||
value=REPLACE(
|
||||
nightly_firstrun,
|
||||
"Thank you for using Firefox Nightly",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-firstrun-choose-an-area"),
|
||||
value=REPLACE(
|
||||
nightly_firstrun,
|
||||
"Choose an area to get involved below and help make Firefox better for users everywhere",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
nightly-firstrun-test = {COPY(nightly_firstrun, "Test",)}
|
||||
nightly-firstrun-find-and-file-bugs = {COPY(nightly_firstrun, "Find and file bugs and generally make sure things work as they should.",)}
|
||||
nightly-firstrun-start-testing = {COPY(nightly_firstrun, "Start testing",)}
|
||||
nightly-firstrun-code = {COPY(nightly_firstrun, "Code",)}
|
||||
""",
|
||||
nightly_firstrun=nightly_firstrun,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-firstrun-file-bugs-and-work"),
|
||||
value=REPLACE(
|
||||
nightly_firstrun,
|
||||
"File bugs and work on the building blocks of the Firefox browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
nightly-firstrun-start-coding = {COPY(nightly_firstrun, "Start coding",)}
|
||||
nightly-firstrun-localize = {COPY(nightly_firstrun, "Localize",)}
|
||||
""",
|
||||
nightly_firstrun=nightly_firstrun,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-firstrun-make-firefox-available"),
|
||||
value=REPLACE(
|
||||
nightly_firstrun,
|
||||
"Make Firefox available (and better) in more languages around the world.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
nightly-firstrun-contribute-link = {COPY(nightly_firstrun, "https://wiki.mozilla.org/L10n:Contribute",)}
|
||||
nightly-firstrun-start-localizing = {COPY(nightly_firstrun, "Start localizing",)}
|
||||
""",
|
||||
nightly_firstrun=nightly_firstrun,
|
||||
),
|
||||
)
|
|
@ -1,129 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
nightly_whatsnew = "firefox/nightly_whatsnew.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/nightly_whatsnew.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/nightly/whatsnew.ftl",
|
||||
"firefox/nightly/whatsnew.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-youve-just-been"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
"You’ve just been upgraded to Firefox Nightly %(version)s!",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(version)s": VARIABLE_REFERENCE("version"),
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-your-firefox-nightly"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
"Your Firefox Nightly has been updated.",
|
||||
{
|
||||
"Firefox Nightly": TERM_REFERENCE("brand-name-firefox-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
nightly-whatsnew-firefox-nightly = { -brand-name-firefox-nightly }
|
||||
""",
|
||||
nightly_whatsnew=nightly_whatsnew,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-every-4-to-5-weeks"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
"Every 4 to 5 weeks, a new major version of Firefox is released and as a result, the Nightly version increases as well.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-every-6-to-8-weeks"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
"Every 6 to 8 weeks, a new major version of Firefox is released and as a result, the Nightly version increases as well.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-this-is-a-good"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
"This is a good time to thank you for helping us make Firefox better and to give you some pointers to documentation, communication channels and news sites related to Nightly that may be of interest to you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-if-you-want-to"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
'If you want to know what’s happening around Nightly and its community, reading our <a href="%(blog)s">blog</a> and following us on <a href="%(twitter)s">Twitter</a> are good starting points!',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(blog)s": VARIABLE_REFERENCE("blog"),
|
||||
"%(twitter)s": VARIABLE_REFERENCE("twitter"),
|
||||
"Twitter": TERM_REFERENCE("brand-name-twitter"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-want-to-know-which"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
'Want to know which platform features you could test on Nightly and can’t see yet on other Firefox channels? Then have a look at the <a href="%(mdn)s">Experimental Features</a> page on <abbr title="Mozilla Developer Network">MDN</abbr>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(mdn)s": VARIABLE_REFERENCE("mdn"),
|
||||
"Mozilla Developer Network": TERM_REFERENCE("brand-name-mozilla-developer-network"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
"MDN": TERM_REFERENCE("brand-name-mdn"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("nightly-whatsnew-do-you-experience"),
|
||||
value=REPLACE(
|
||||
nightly_whatsnew,
|
||||
'Do you experience crashes? Unexpected behavior? Web compatibility regressions? We’d love to get them filed in <a href="%(bugzilla)s">Bugzilla</a> to make sure they don’t make it to the final release (extra karma if you add the <em>nightly-community</em> keyword to your bug reports)!',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(bugzilla)s": VARIABLE_REFERENCE("bugzilla"),
|
||||
"Bugzilla": TERM_REFERENCE("brand-name-bugzilla"),
|
||||
"nightly": TERM_REFERENCE("brand-name-nightly"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
nightly-whatsnew-go-community = {COPY(nightly_whatsnew, "Go community!",)}
|
||||
""",
|
||||
nightly_whatsnew=nightly_whatsnew,
|
||||
),
|
||||
)
|
|
@ -1,412 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
privacy_hub = "firefox/privacy-hub.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/privacy/base.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/privacy-hub.ftl",
|
||||
"firefox/privacy-hub.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-privacy-promise"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox Privacy Promise",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-takes-less-data-keeps"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox takes less data, keeps it safe, and with no secrets.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-products-are-designed"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox products are designed to protect your <strong>privacy</strong>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-privacy = {COPY(privacy_hub, "Privacy",)}
|
||||
firefox-privacy-our-promise = {COPY(privacy_hub, "Our Promise",)}
|
||||
firefox-privacy-our-products = {COPY(privacy_hub, "Our Products",)}
|
||||
firefox-privacy-hub-you-should-be-able-to-decide = {COPY(privacy_hub, "You should be able to decide who sees your personal info. Not just among your friends, but with every advertiser and company on the internet — including us.",)}
|
||||
firefox-privacy-hub-thats-why-everything-we-make = {COPY(privacy_hub, "That’s why everything we make and do honors our Personal Data Promise",)}
|
||||
firefox-privacy-hub-take-less = {COPY(privacy_hub, "Take Less",)}
|
||||
firefox-privacy-hub-we-make-a-point-of-knowing = {COPY(privacy_hub, "We make a point of knowing less about you",)}
|
||||
firefox-privacy-hub-all-tech-companies-collect = {COPY(privacy_hub, "All tech companies collect data to improve their products. But it doesn’t need to include so much of your personal info. The only data we want is the data that serves you in the end. We ask ourselves: do we actually need this? What do we need it for? And when can we delete it?",)}
|
||||
firefox-privacy-hub-keep-it-safe = {COPY(privacy_hub, "Keep it safe",)}
|
||||
firefox-privacy-hub-we-do-the-hard-work-to-protect = {COPY(privacy_hub, "We do the hard work to protect your personal info",)}
|
||||
firefox-privacy-hub-data-security-is-complicated = {COPY(privacy_hub, "Data security is complicated — or at least it should be. Which is why we take the extra steps to classify the data we have, maintain rules for how we store and protect each type, and never stop iterating on our processes. We prioritize your privacy. We invest in it. We’re committed to it. We even teach other companies how to do it.",)}
|
||||
firefox-privacy-hub-no-secrets = {COPY(privacy_hub, "No secrets",)}
|
||||
firefox-privacy-hub-youll-always-know-where-you = {COPY(privacy_hub, "You’ll always know where you stand with us",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-theres-no-hidden-agenda-here"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
'There’s no hidden agenda here. Our business doesn’t depend on secretly abusing your trust. Our <a href="%(privacy)s">Privacy Notice</a> is actually readable. Anyone in the world can attend our <a href="%(meetings)s">weekly company meetings</a>. If you want to dig into every datapoint we collect, our code is open. And so are we.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
"%(meetings)s": VARIABLE_REFERENCE("meetings"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-why-trust-firefox"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Why trust Firefox?",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-because-we-put-people-first"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
'Because we put people first. In fact, we’re backed by a <a href="%(foundation)s">non-profit</a>. From day one, it’s been our mission to protect the internet and everyone on it',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(foundation)s": VARIABLE_REFERENCE("foundation"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-learn-more-about-our-mission = {COPY(privacy_hub, "Learn more about our mission",)}
|
||||
firefox-privacy-hub-your-privacy-by-the-product = {COPY(privacy_hub, "Your privacy, by the product",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-products-work-differently"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox products work differently — because they’re designed to protect your privacy first.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-learn-about-our-products = {COPY(privacy_hub, "Learn about our products",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-privacy-by-the"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox privacy, by the product",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-protects-your-privacy"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox protects your privacy in every product.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-firefox-protects-your-privacy-strong"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Firefox <strong>protects</strong> your privacy in every product",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-firefox-browser = { -brand-name-firefox-browser }
|
||||
firefox-privacy-hub-2000-trackers-blocked-automatically = {COPY(privacy_hub, "2,000+ trackers blocked — automatically",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-tracking-has-become-an"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Tracking has become an epidemic online: companies follow every move, click and purchase, collecting data to predict and influence what you’ll do next. We think that’s a gross invasion of your privacy. That’s why Firefox mobile and desktop browsers have Enhanced Tracking Protection on by default.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-if-you-want-to-see-what"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"If you want to see what Firefox is blocking for you, visit this page on your Firefox desktop browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-see-what-firefox-has-blocked"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"See what Firefox has blocked for you",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-get-enhanced-tracking-protection = {COPY(privacy_hub, "Get Enhanced Tracking Protection",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-download-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Download the Firefox browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-update-your-firefox-browser"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Update your Firefox browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-invisible-to-the-top-trackers = {COPY(privacy_hub, "Invisible to the top trackers",)}
|
||||
firefox-privacy-hub-meet-four-of-the-most-common = {COPY(privacy_hub, "Meet four of the most common categories of trackers — who won’t meet you.",)}
|
||||
firefox-privacy-hub-always-in-your-control = {COPY(privacy_hub, "Always in your control",)}
|
||||
firefox-privacy-hub-want-to-customize-what = {COPY(privacy_hub, "Want to customize what gets blocked? Your settings are only one click away.",)}
|
||||
firefox-privacy-hub-protection-beyond-tracking = {COPY(privacy_hub, "Protection beyond tracking",)}
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-if-you-have-a-firefox-account"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"If you have a Firefox account, you can also see how we’re helping you protect your personal info and passwords.",
|
||||
{
|
||||
"Firefox account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-more-than-s-trackers-blocked"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"More than %s trackers blocked each day for Firefox users worldwide",
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("trackers"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-firefox-monitor = { -brand-name-firefox-monitor }
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-when-you-enter-your-email"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"When you enter your email address in Firefox Monitor, we forget it immediately after we’ve checked for a match in known data breaches — unless you authorize us to continue monitoring new breaches for your personal information.",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-check-for-breaches = {COPY(privacy_hub, "Check for breaches",)}
|
||||
firefox-privacy-hub-firefox-lockwise = { -brand-name-firefox-lockwise }
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-the-passwords-and-credentials"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"The passwords and credentials you save in Firefox Lockwise are encrypted on all your devices, so not even we can see them.",
|
||||
{
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-learn-more-about-lockwise"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Learn more about Lockwise",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-firefox-send = { -brand-name-firefox-send }
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-we-cant-see-the-names-or"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"We can’t see the names or content of the large files you share through Firefox Send because they’re encrypted end-to-end — you choose who sees what you send, and you can even set an expiration date and password.",
|
||||
{
|
||||
"Firefox Send": TERM_REFERENCE("brand-name-firefox-send"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-privacy-hub-send-a-file = {COPY(privacy_hub, "Send a file",)}
|
||||
firefox-privacy-hub-pocket = { -brand-name-pocket }
|
||||
""",
|
||||
privacy_hub=privacy_hub,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-pocket-recommends-high"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Pocket recommends high-quality, human-curated articles without collecting your browsing history or sharing your personal information with advertisers.",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-get-pocket"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Get Pocket",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-your-firefox-account"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Your Firefox account",
|
||||
{
|
||||
"Firefox account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-all-the-information-synced"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"All the information synced through your Firefox account — from browser history to passwords — is encrypted. And your account password is the only key.",
|
||||
{
|
||||
"Firefox account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-take-your-privacy-and-bookmarks"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
"Take your privacy and bookmarks everywhere with a Firefox account.",
|
||||
{
|
||||
"Firefox account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
"Firefox Account": TERM_REFERENCE("brand-name-firefox-account"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-already-have-an-account"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
'Already have an account? <a %(sign_in)s class="%(class_name)s">Sign In</a> or <a href="%(learn_more)s">learn more</a> about joining Firefox.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(sign_in)s": VARIABLE_REFERENCE("sign_in"),
|
||||
"%(class_name)s": VARIABLE_REFERENCE("class_name"),
|
||||
"%(learn_more)s": VARIABLE_REFERENCE("learn_more"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-privacy-hub-read-the-privacy-notice-for"),
|
||||
value=REPLACE(
|
||||
privacy_hub,
|
||||
'Read the <a href="%s">Privacy Notice</a> for our products',
|
||||
{
|
||||
"%%": "%",
|
||||
"%s": VARIABLE_REFERENCE("url"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,175 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
products = "firefox/products.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/products/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/products.ftl",
|
||||
"firefox/products.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-firefox-is-more-than-a-browser"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Firefox is more than a browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-products-its-a-whole-family-of-products = {COPY(products, "It’s a whole family of products designed to keep you safer and smarter online.",)}
|
||||
""",
|
||||
products=products,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-firefox-is-more-than-a-browser-emphasis"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Firefox is <strong>more</strong> than a browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-products-firefox-monitor = { -brand-name-firefox-monitor }
|
||||
firefox-products-see-if-your-personal-information = {COPY(products, "See if your personal information has been compromised in a corporate data breach, and sign up for future alerts.",)}
|
||||
firefox-products-check-for-breaches = {COPY(products, "Check for breaches",)}
|
||||
firefox-products-sign-up-for-breach-alerts = {COPY(products, "Sign up for breach alerts",)}
|
||||
""",
|
||||
products=products,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-firefox-browsers"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Firefox browsers",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-get-the-browsers-that-block"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Get the browsers that block 2000+ data trackers automatically. Enhanced Tracking Protection comes standard in every Firefox browser.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-products-desktop = {COPY(products, "Desktop",)}
|
||||
firefox-products-android = { -brand-name-android }
|
||||
firefox-products-ios = { -brand-name-ios }
|
||||
firefox-products-see-all-browsers = {COPY(products, "See all browsers",)}
|
||||
firefox-products-firefox-lockwise = { -brand-name-firefox-lockwise }
|
||||
firefox-products-keep-your-passwords-safe-and = {COPY(products, "Keep your passwords safe, and access them across all your synced devices.",)}
|
||||
""",
|
||||
products=products,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-download-lockwise"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Download Lockwise",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-open-in-firefox"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Open in Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-learn-more-about-lockwise"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Learn more about Lockwise",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
firefox-products-firefox-send = { -brand-name-firefox-send }
|
||||
firefox-products-send-your-large-files-and = {COPY(products, "Send your large files and sensitive documents safely, up to 2.5G.",)}
|
||||
firefox-products-send-a-file = {COPY(products, "Send a file",)}
|
||||
firefox-products-pocket = { -brand-name-pocket }
|
||||
firefox-products-discover-the-best-content = {COPY(products, "Discover the best content on the web — and consume it wherever and whenever you want.",)}
|
||||
""",
|
||||
products=products,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-get-pocket"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Get Pocket",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-learn-more-about-pocket"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Learn more about Pocket",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-join-firefox-and-get-the-most"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Join Firefox and get the most out of every product — across every device.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("firefox-products-already-have-an-account-sign"),
|
||||
value=REPLACE(
|
||||
products,
|
||||
"Already have an account? <a %(fxa_attr)s>Sign In</a> or <a %(accounts_attr)s>learn more</a> about joining Firefox.",
|
||||
{
|
||||
"%%": "%",
|
||||
"%(fxa_attr)s": VARIABLE_REFERENCE("fxa_attr"),
|
||||
"%(accounts_attr)s": VARIABLE_REFERENCE("accounts_attr"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,133 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
thank_you = "firefox/retention/thank-you.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/retention/thank-you.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/retention/thank-you.ftl",
|
||||
"firefox/retention/thank-you.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
thank-you-thank-you = {COPY(thank_you, "Thank You",)}
|
||||
thank-you-thank-you-page = {COPY(thank_you, "Thank you page.",)}
|
||||
thank-you-its-all-thanks-to-you = {COPY(thank_you, "It’s all thanks to you",)}
|
||||
""",
|
||||
thank_you=thank_you,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-choosing-firefox-helps"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Choosing Firefox helps Mozilla make the Internet a better place. Here’s what you can do next:",
|
||||
{
|
||||
"Mozilla": TERM_REFERENCE("brand-name-mozilla"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-make-firefox-your-default"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Make Firefox your default browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
thank-you-1-min-action = {COPY(thank_you, "1 min action",)}
|
||||
thank-you-set-as-your-default = {COPY(thank_you, "Set as your default",)}
|
||||
""",
|
||||
thank_you=thank_you,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-get-firefox-on-your-phone"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Get Firefox on your phone",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
thank-you-2-min-install = {COPY(thank_you, "2 min install",)}
|
||||
""",
|
||||
thank_you=thank_you,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-download-firefox"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Download Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-tell-your-friends-about"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Tell your friends about Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
thank-you-1-min-share = {COPY(thank_you, "1 min share",)}
|
||||
""",
|
||||
thank_you=thank_you,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-join-me-in-the-fight-for"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Join me in the fight for an open web by choosing Firefox!",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
thank-you-send-a-tweet = {COPY(thank_you, "Send a tweet",)}
|
||||
thank-you-make-the-internet-a-safer = {COPY(thank_you, "Make the Internet a safer place",)}
|
||||
thank-you-4-min-read = {COPY(thank_you, "4 min read",)}
|
||||
thank-you-stay-in-touch-for-more = {COPY(thank_you, "Stay in touch for more cool stuff",)}
|
||||
""",
|
||||
thank_you=thank_you,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("thank-you-get-the-latest-greatest"),
|
||||
value=REPLACE(
|
||||
thank_you,
|
||||
"Get the latest & greatest from Firefox delivered straight to your inbox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,54 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
send_to = "firefox/sendto.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/base/templates/macros.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"send_to_device.ftl",
|
||||
"send_to_device.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("send-to-device-send-firefox"),
|
||||
value=REPLACE(
|
||||
"firefox/sendto.lang",
|
||||
"Send Firefox to your smartphone or tablet",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"send_to_device.ftl",
|
||||
"send_to_device.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
send-to-device-your-download-link = {COPY(send_to, "Your download link was sent.",)}
|
||||
send-to-device-sorry-we-cant-send = {COPY(send_to, "Sorry, we can’t send SMS messages to this phone number.",)}
|
||||
send-to-device-sorry-this-number = {COPY(send_to, "Sorry. This number isn’t valid. Please enter a U.S. phone number.",)}
|
||||
send-to-device-please-enter-an-email = {COPY(send_to, "Please enter an email address.",)}
|
||||
send-to-device-an-error-occured = {COPY(send_to, "An error occurred in our system. Please try again later.",)}
|
||||
send-to-device-enter-your-email = {COPY(send_to, "Enter your email",)}
|
||||
send-to-device-enter-your-email-or-phone = {COPY(send_to, "Enter your email or phone number",)}
|
||||
send-to-device-enter-your-email-or-phone-10-digit = {COPY(send_to, "Enter your email or 10-digit phone number",)}
|
||||
send-to-device-send = {COPY(send_to, "Send",)}
|
||||
send-to-device-sms-service-available-in-select = {COPY(send_to, "SMS service available in select countries only. SMS & data rates may apply.",)}
|
||||
send-to-device-sms-service-available-to-us = {COPY(send_to, "SMS service available to U.S. phone numbers only. SMS & data rates may apply.",)}
|
||||
send-to-device-intended-recipient-email-sms = {COPY(send_to, "The intended recipient of the email or SMS must have consented.",)}
|
||||
send-to-device-intended-recipient-email = {COPY(send_to, "The intended recipient of the email must have consented.",)}
|
||||
send-to-device-check-your-device-email-sms = {COPY(send_to, "Check your device for the email or text message!",)}
|
||||
send-to-device-check-your-device-email = {COPY(send_to, "Check your device for the email!",)}
|
||||
send-to-device-send-to-another= {COPY(send_to, "Send to another device",)}
|
||||
""",
|
||||
send_to=send_to,
|
||||
),
|
||||
)
|
|
@ -1,146 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
whatsnew_73 = "firefox/whatsnew_73.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/set-as-default/landing-page.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/set-as-default/landing.ftl",
|
||||
"firefox/set-as-default/landing.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-make-firefox-your-default"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Make Firefox your default browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-landing-make-sure-youre-protected = {COPY(whatsnew_73, "Make sure you’re protected, every time you get online",)}
|
||||
""",
|
||||
whatsnew_73=whatsnew_73,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-thanks-for-using-the"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Thanks for using the latest Firefox browser. When you choose Firefox, you support a better web for you and everyone else. Now take the next step to protect yourself.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-landing-choose-automatic-privacy = {COPY(whatsnew_73, "Choose automatic privacy",)}
|
||||
""",
|
||||
whatsnew_73=whatsnew_73,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-companies-keep-finding"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Companies keep finding new ways to poach your personal data. Firefox is the browser with a mission of finding new ways to protect you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-landing-choose-freedom-on-every = {COPY(whatsnew_73, "Choose freedom on every device",)}
|
||||
""",
|
||||
whatsnew_73=whatsnew_73,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-firefox-is-fast-and"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Firefox is fast and safe on Windows, iOS, Android, Linux…and across them all. You deserve choices in browsers and devices, instead of decisions made for you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-landing-choose-corporate-independence = {COPY(whatsnew_73, "Choose corporate independence",)}
|
||||
""",
|
||||
whatsnew_73=whatsnew_73,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-firefox-is-the-only"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Firefox is the only major independent browser. Chrome, Edge and Brave are all built on Google code, which means giving Google even more control of the internet.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Brave": TERM_REFERENCE("brand-name-brave"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-the-internet-keeps"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"The internet keeps finding new ways to poach your personal data. Firefox is the only browser with a mission of finding new ways to protect you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-firefox-is-fast-no-interest"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Firefox is fast and safe on Windows, iOS, Android, Linux...and across them all. We have no interest in locking you in or resetting your preferences.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-landing-firefox-is-the-only-major"),
|
||||
value=REPLACE(
|
||||
whatsnew_73,
|
||||
"Firefox is the only major independent browser. Chrome, Edge and Brave are all built with code from Google, the world’s largest ad network.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
"Brave": TERM_REFERENCE("brand-name-brave"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,147 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
set_default_thanks = "firefox/set-default-thanks.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/set-as-default/thanks.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/set-as-default/thanks.ftl",
|
||||
"firefox/set-as-default/thanks.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-set-as-default-thanks-for-choosing-firefox"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"Thanks for choosing Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-success-your-default-browser"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"Success! Your default browser is set to Firefox.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-looks-like-youre-using-a"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"Looks like you’re using a different browser right now. Make sure you have Firefox downloaded on your device.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-youre-almost-done-just-change"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"You’re almost done. Just change your default browser to Firefox in the settings panel on your screen.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-thanks-having-trouble-setting-your = {COPY(set_default_thanks, "Having trouble setting your default browser?",)}
|
||||
""",
|
||||
set_default_thanks=set_default_thanks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-heres-everything-you-need-android"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
'Here’s everything you need to know about setting your default browser on <a href="%(android)s">Android devices</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(android)s": VARIABLE_REFERENCE("android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-heres-everything-you-need-ios"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
'Here’s everything you need to know about setting your default browser on <a href="%(ios)s">iOS devices</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(ios)s": VARIABLE_REFERENCE("ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-thanks-youre-all-set = {COPY(set_default_thanks, "You’re all set.",)}
|
||||
""",
|
||||
set_default_thanks=set_default_thanks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-get-firefox-for-mobile"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"Get Firefox for mobile",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-thanks-travel-the-internet-with = {COPY(set_default_thanks, "Travel the internet with protection on all your devices.",)}
|
||||
set-as-default-thanks-download-the-app = {COPY(set_default_thanks, "Download the app",)}
|
||||
""",
|
||||
set_default_thanks=set_default_thanks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-join-firefox"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
"Join Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
set-as-default-thanks-sign-up-for-a-free-account = {COPY(set_default_thanks, "Sign up for a free account and sync all your passwords, browsing history, and preferences across your devices.",)}
|
||||
set-as-default-thanks-get-an-account = {COPY(set_default_thanks, "Get an Account",)}
|
||||
set-as-default-thanks-having-trouble = {COPY(set_default_thanks, "Having trouble?",)}
|
||||
""",
|
||||
set_default_thanks=set_default_thanks,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("set-as-default-thanks-heres-everything-you-need-android-desktop"),
|
||||
value=REPLACE(
|
||||
set_default_thanks,
|
||||
'Here’s everything you need to know about setting your default browser on <a href="%(android)s">Android devices</a> or <a href="%(desktop)s">desktop computers</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(android)s": VARIABLE_REFERENCE("android"),
|
||||
"%(desktop)s": VARIABLE_REFERENCE("desktop"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
|
@ -1,107 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
switch = "firefox/switch.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/switch.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/switch.ftl",
|
||||
"firefox/switch.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-switch-from-chrome"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"Switch from Chrome to Firefox in just a few minutes",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-switching-to-firefox-is-fast"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"Switching to Firefox is fast, easy and risk-free, because Firefox imports your bookmarks, autofills, passwords and preferences from Chrome.",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-switching-to-firefox-page-description"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"Switching to Firefox is fast, easy and risk-free. Firefox imports your bookmarks, autofills, passwords and preferences from Chrome.",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-select-what-to-take"),
|
||||
value=REPLACE("firefox/switch.lang", "Select what to take from Chrome.", {"Chrome": TERM_REFERENCE("brand-name-chrome")}),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-let-firefox-do-the-rest"),
|
||||
value=REPLACE("firefox/switch.lang", "Let Firefox do the rest.", {"Firefox": TERM_REFERENCE("brand-name-firefox")}),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-use-firefox-and-still-chrome"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"You can use Firefox and still have Chrome. Chrome won’t change on your machine one bit.",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-share-with-your-friends"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang", "Share with your friends how to switch to Firefox", {"Firefox": TERM_REFERENCE("brand-name-firefox")}
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-firefox-makes-switching-fast-tweet"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"🔥 Firefox makes switching from Chrome really fast. Try it out!",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-switch-to-firefox"),
|
||||
value=REPLACE("firefox/switch.lang", "Switch to Firefox", {"Firefox": TERM_REFERENCE("brand-name-firefox")}),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-firefox-makes-switching-fast-email"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang",
|
||||
"Firefox makes switching from Chrome really fast. I like it a lot, and you should try it.",
|
||||
{"Firefox": TERM_REFERENCE("brand-name-firefox"), "Chrome": TERM_REFERENCE("brand-name-chrome")},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("switch-still-not-convinced"),
|
||||
value=REPLACE(
|
||||
"firefox/switch.lang", "Still not convinced that switching to Firefox is easy?", {"Firefox": TERM_REFERENCE("brand-name-firefox")}
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/switch.ftl",
|
||||
"firefox/switch.ftl",
|
||||
transforms_from(
|
||||
"""
|
||||
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-share-to-facebook = {COPY(switch, "Share to Facebook",)}
|
||||
switch-send-a-tweet = {COPY(switch, "Send a tweet",)}
|
||||
switch-hey = {COPY(switch, "Hey,",)}
|
||||
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=switch,
|
||||
),
|
||||
)
|
|
@ -1,114 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page1 = "firefox/welcome/page1.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page1.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page1.ftl",
|
||||
"firefox/welcome/page1.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-more-than-a-browser-firefox"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
"More than a browser - Firefox Monitor is your lookout for hackers",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-take-the-next-step-to-protect"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
"Take the next step to protect your privacy online with the Firefox family of products.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-stay-ahead-of-hackers-check"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
"Stay ahead of hackers. Check for data breaches with Firefox Monitor.",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page1-youre-on-track-to-stay-protected = {COPY(page1, "You’re on track to stay protected",)}
|
||||
welcome-page1-youve-got-the-web-browser = {COPY(page1, "You’ve got the web browser that protects your privacy — now it’s time to get a lookout for hackers.",)}
|
||||
welcome-page1-check-your-breach-report = {COPY(page1, "Check Your Breach Report",)}
|
||||
welcome-page1-firefox-monitor = { -brand-name-firefox-monitor }
|
||||
""",
|
||||
page1=page1,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-firefox-monitor-shows-you"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
"Firefox Monitor shows you if your information has been leaked in a known data breach, and alerts you in case it happens in the future.",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page1-stay-ahead-of-hackers = {COPY(page1, "Stay ahead of hackers",)}
|
||||
""",
|
||||
page1=page1,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-find-ways-to-protect-your"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
'Find ways to protect your info with <a href="%(security_tips)s">Monitor Security Tips</a>.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(security_tips)s": VARIABLE_REFERENCE("security_tips"),
|
||||
"Monitor": TERM_REFERENCE("brand-name-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page1-stay-in-the-know = {COPY(page1, "Stay in the know",)}
|
||||
""",
|
||||
page1=page1,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page1-were-you-one-of-many"),
|
||||
value=REPLACE(
|
||||
page1,
|
||||
'Were you one of 100,985,047 invited to the <a href="%(evite_breach)s">Evite data breach “party”</a>?',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(evite_breach)s": VARIABLE_REFERENCE("evite_breach"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page1-why-am-i-seeing-this = {COPY(page1, "Why am I seeing this?",)}
|
||||
""",
|
||||
page1=page1,
|
||||
),
|
||||
)
|
|
@ -1,117 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page2 = "firefox/welcome/page2.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page2.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page2.ftl",
|
||||
"firefox/welcome/page2.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-pocket-save-news-videos-stories"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Pocket - Save news, videos, stories and more",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page2-your-time-online-is-worth = {COPY(page2, "Your time online is worth protecting",)}
|
||||
""",
|
||||
page2=page2,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-discover-and-save-stories"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Discover and save stories in Pocket — and come back to them when you’re free.",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-activate-pocket"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Activate Pocket",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page2-pocket = { -brand-name-pocket }
|
||||
""",
|
||||
page2=page2,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-pocket-is-built-right-into"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Pocket is built right into Firefox, so you can easily save stories as you find them, then read them later on any device.",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page2-save-content-from-everywhere = {COPY(page2, "Save content from everywhere",)}
|
||||
""",
|
||||
page2=page2,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-grab-articles-videos-and-links"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Grab articles, videos, and links from any website by clicking the Pocket icon in your browser toolbar.",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page2-discover-new-stories = {COPY(page2, "Discover new stories",)}
|
||||
""",
|
||||
page2=page2,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page2-pocket-shows-recommended-stories"),
|
||||
value=REPLACE(
|
||||
page2,
|
||||
"Pocket shows recommended stories every time you open a new tab. Save the ones that interest you.",
|
||||
{
|
||||
"Pocket": TERM_REFERENCE("brand-name-pocket"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page2-why-am-i-seeing-this = {COPY(page2, "Why am I seeing this?",)}
|
||||
""",
|
||||
page2=page2,
|
||||
),
|
||||
)
|
|
@ -1,79 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page3 = "firefox/welcome/page3.lang"
|
||||
|
||||
|
||||
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,
|
||||
),
|
||||
)
|
|
@ -1,127 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page4 = "firefox/welcome/page4.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page4.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page4.ftl",
|
||||
"firefox/welcome/page4.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-download-the-firefox-browser"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"Download the Firefox Browser on your Mobile for iOS and Android",
|
||||
{
|
||||
"Firefox Browser": TERM_REFERENCE("brand-name-firefox-browser"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-wallet-keys-phone-firefox"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"Wallet. Keys. Phone. <strong>Firefox.</strong>",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page4-take-privacy-with-you-on-every = {COPY(page4, "Take privacy with you on every device — and leave the data trackers behind.",)}
|
||||
""",
|
||||
page4=page4,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-get-the-firefox-app"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"Get the Firefox App",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-get-firefox-on-your-phone"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"Get Firefox on your Phone",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page4-send-the-download-link-right = {COPY(page4, "Send the download link right to your phone or email.",)}
|
||||
""",
|
||||
page4=page4,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-download-firefox-for-your"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"Download Firefox for your smartphone and tablet.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-firefox-private-safe-browser"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
"“Firefox: Private, Safe Browser” on iOS or Android.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page4-get-data-trackers-off-your = {COPY(page4, "Get data trackers off your trail",)}
|
||||
""",
|
||||
page4=page4,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page4-enhanced-tracking-protection"),
|
||||
value=REPLACE(
|
||||
page4,
|
||||
'Enhanced Tracking Protection <a href="%(privacy)s">blocks 2000+ trackers</a> from chasing you around the web.',
|
||||
{
|
||||
"%%": "%",
|
||||
"%(privacy)s": VARIABLE_REFERENCE("privacy"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page4-leave-no-trace = {COPY(page4, "Leave no trace",)}
|
||||
welcome-page4-automatically-clear-your-history = {COPY(page4, "Automatically clear your history and cookies with Private Browsing mode.",)}
|
||||
welcome-page4-take-it-all-with-you = {COPY(page4, "Take it all with you",)}
|
||||
welcome-page4-dont-walk-out-the-door-without = {COPY(page4, "Don’t walk out the door without your bookmarks, tabs, notes, and passwords.",)}
|
||||
welcome-page4-why-am-i-seeing-this = {COPY(page4, "Why am I seeing this?",)}
|
||||
""",
|
||||
page4=page4,
|
||||
),
|
||||
)
|
|
@ -1,131 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page5 = "firefox/welcome/page5.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page5.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page5.ftl",
|
||||
"firefox/welcome/page5.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-firefox-lockwise-password"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Firefox Lockwise — password manager — take your passwords everywhere",
|
||||
{
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page5-theres-an-easier-way-to-deal = {COPY(page5, "There’s an easier way to deal with your passwords",)}
|
||||
""",
|
||||
page5=page5,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-let-firefox-save-them-for"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Let Firefox save them for you. Then use Firefox Lockwise to safely access your passwords across all your apps, on all of your devices.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-get-the-lockwise-app"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Get the Lockwise App",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-get-firefox-lockwise-on-your"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Get Firefox Lockwise on your Phone",
|
||||
{
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page5-send-the-download-link-right = {COPY(page5, "Send the download link right to your phone or email.",)}
|
||||
""",
|
||||
page5=page5,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-download-firefox-lockwise"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Download Firefox Lockwise for your smartphone and tablet.",
|
||||
{
|
||||
"Firefox Lockwise": TERM_REFERENCE("brand-name-firefox-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page5-scan-this-qr-code = {COPY(page5, "Scan this QR code",)}
|
||||
welcome-page5-firefox-lockwise = { -brand-term-firefox-lockwise }
|
||||
welcome-page5-sync-up-safely = {COPY(page5, "Sync up safely",)}
|
||||
welcome-page5-with-256-bit-encryption-your = {COPY(page5, "With 256-bit encryption, your passwords always travel to your devices securely.",)}
|
||||
welcome-page5-no-more-making-up-new-passwords = {COPY(page5, "No more making up new passwords",)}
|
||||
""",
|
||||
page5=page5,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-lockwise-will-recommend-new"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Lockwise will recommend new, strong passwords whenever you set up a new login.",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page5-help-during-a-breach = {COPY(page5, "Help during a breach",)}
|
||||
""",
|
||||
page5=page5,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page5-lockwise-will-let-you-know"),
|
||||
value=REPLACE(
|
||||
page5,
|
||||
"Lockwise will let you know if your saved logins have been part of a corporate data breach, so you can change them asap.",
|
||||
{
|
||||
"Lockwise": TERM_REFERENCE("brand-name-lockwise"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page5-why-am-i-seeing-this = {COPY(page5, "Why am I seeing this?",)}
|
||||
""",
|
||||
page5=page5,
|
||||
),
|
||||
)
|
|
@ -1,152 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page6 = "firefox/welcome/page6.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page6.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page6.ftl",
|
||||
"firefox/welcome/page6.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-make-firefox-your-default"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Make Firefox your default browser",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-make-sure-youre-protected = {COPY(page6, "Make sure you’re protected, every time you get online",)}
|
||||
""",
|
||||
page6=page6,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-when-you-choose-firefox-you"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"When you choose Firefox, you support a better web for you and everyone else. Now take the next step to protect yourself.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-get-the-firefox-app"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Get the Firefox App",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-get-firefox-on-your-phone"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Get Firefox on your Phone",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-scan-the-qr-code-to-get-started = {COPY(page6, "Scan the QR code to get started",)}
|
||||
""",
|
||||
page6=page6,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-qr-code-to-scan-for-firefox"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"QR code to scan for Firefox",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-choose-automatic-privacy = {COPY(page6, "Choose automatic privacy",)}
|
||||
""",
|
||||
page6=page6,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-companies-keep-finding-new"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Companies keep finding new ways to poach your personal data. Firefox is the browser with a mission of finding new ways to protect you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-choose-freedom-on-every-device = {COPY(page6, "Choose freedom on every device",)}
|
||||
""",
|
||||
page6=page6,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-firefox-is-fast-and-safe-on"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Firefox is fast and safe on Windows, iOS, Android, Linux… and across them all. You deserve choices in browsers and devices, instead of decisions made for you.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"Windows": TERM_REFERENCE("brand-name-windows"),
|
||||
"Linux": TERM_REFERENCE("brand-name-linux"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-choose-corporate-independence = {COPY(page6, "Choose corporate independence",)}
|
||||
""",
|
||||
page6=page6,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("welcome-page6-firefox-is-the-only-major"),
|
||||
value=REPLACE(
|
||||
page6,
|
||||
"Firefox is the only major independent browser. Chrome, Edge and Brave are all built on Google code, which means giving Google even more control of the internet.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Google": TERM_REFERENCE("brand-name-google"),
|
||||
"Chrome": TERM_REFERENCE("brand-name-chrome"),
|
||||
"Brave": TERM_REFERENCE("brand-name-brave"),
|
||||
"Edge": TERM_REFERENCE("brand-name-edge"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
welcome-page6-why-am-i-seeing-this = {COPY(page6, "Why am I seeing this?",)}
|
||||
""",
|
||||
page6=page6,
|
||||
),
|
||||
)
|
|
@ -1,136 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
page7 = "firefox/welcome/page7.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/welcome/page7.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/welcome/page7.ftl",
|
||||
"firefox/welcome/page7.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-make-it-harder-for-facebook"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Make it harder for Facebook to track you",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-its-okay-to-like-facebook"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"It’s okay to like Facebook",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-if-you-still-kinda-like-facebook"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"If you still kinda like Facebook but don’t trust them, then try the Facebook Container extension by Firefox and make it harder for them to track you around the web.",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-get-facebook-container"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Get Facebook Container",
|
||||
{
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
page7-do-it-for-the-gram = {COPY(page7, "Do it for the ’Gram",)}
|
||||
""",
|
||||
page7=page7,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-facebook-container-also-works"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Facebook Container also works on other Facebook owned sites like Instagram, Facebook Messenger and Workplace.",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
"Facebook Messenger": TERM_REFERENCE("brand-name-facebook-messenger"),
|
||||
"Instagram": TERM_REFERENCE("brand-name-instagram"),
|
||||
"Workplace": TERM_REFERENCE("brand-name-workplace"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
page7-make-them-unfollow-you = {COPY(page7, "Make them unfollow you",)}
|
||||
page7-that-sneaky-little-button = {COPY(page7, "That sneaky little button",)}
|
||||
""",
|
||||
page7=page7,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-those-innocent-looking-f-buttons"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Those innocent-looking F buttons from Facebook track your web activity, even if you don’t have an account. Facebook Container blocks them.",
|
||||
{
|
||||
"Facebook": TERM_REFERENCE("brand-name-facebook"),
|
||||
"Facebook Container": TERM_REFERENCE("brand-name-facebook-container"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
page7-stay-ahead-of-hackers = {COPY(page7, "Stay ahead of hackers",)}
|
||||
""",
|
||||
page7=page7,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-firefox-monitor-lets-you-find"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Firefox Monitor lets you find out what hackers might already know about you and helps you stay a step ahead of them. (And it’s free.)",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("page7-get-firefox-monitor"),
|
||||
value=REPLACE(
|
||||
page7,
|
||||
"Get Firefox Monitor",
|
||||
{
|
||||
"Firefox Monitor": TERM_REFERENCE("brand-name-firefox-monitor"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
page7-why-am-i-seeing-this = {COPY(page7, "Why am I seeing this?",)}
|
||||
""",
|
||||
page7=page7,
|
||||
),
|
||||
)
|
|
@ -1,65 +0,0 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import fluent.syntax.ast as FTL
|
||||
from fluent.migrate import COPY, REPLACE
|
||||
from fluent.migrate.helpers import TERM_REFERENCE, VARIABLE_REFERENCE, transforms_from
|
||||
|
||||
index = "firefox/whatsnew/index.lang"
|
||||
whatsnew = "firefox/whatsnew.lang"
|
||||
|
||||
|
||||
def migrate(ctx):
|
||||
"""Migrate bedrock/firefox/templates/firefox/whatsnew/index.html, part {index}."""
|
||||
|
||||
ctx.add_transforms(
|
||||
"firefox/whatsnew/whatsnew-s2d.ftl",
|
||||
"firefox/whatsnew/whatsnew-s2d.ftl",
|
||||
[
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("whatsnew-s2d-download-firefox-for-android"),
|
||||
value=REPLACE(
|
||||
whatsnew,
|
||||
"Download Firefox for Android and iOS",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
"Android": TERM_REFERENCE("brand-name-android"),
|
||||
"iOS": TERM_REFERENCE("brand-name-ios"),
|
||||
},
|
||||
),
|
||||
),
|
||||
]
|
||||
+ transforms_from(
|
||||
"""
|
||||
whatsnew-s2d-want-privacy-on-every-device = {COPY(whatsnew, "Want privacy on every device?",)}
|
||||
""",
|
||||
whatsnew=whatsnew,
|
||||
)
|
||||
+ [
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("whatsnew-s2d-you-got-it-get-firefox-for"),
|
||||
value=REPLACE(
|
||||
whatsnew,
|
||||
"You got it. Get Firefox for mobile.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("whatsnew-s2d-send-firefox-to-your-phone"),
|
||||
value=REPLACE(
|
||||
whatsnew, "Send Firefox to your phone<br> and unleash your Internet.", {"Firefox": TERM_REFERENCE("brand-name-firefox")}
|
||||
),
|
||||
),
|
||||
FTL.Message(
|
||||
id=FTL.Identifier("whatsnew-s2d-download-firefox-for-your"),
|
||||
value=REPLACE(
|
||||
whatsnew,
|
||||
"Download Firefox for your smartphone and tablet.",
|
||||
{
|
||||
"Firefox": TERM_REFERENCE("brand-name-firefox"),
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче