Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • gk/tor-browser
  • peterstory/tor-browser
  • sanketh/tor-browser
  • acat/tor-browser
  • sysrqb/tor-browser
  • boklm/tor-browser
  • dan/tor-browser
  • fabrizio/tor-browser
  • victorvw/tor-browser
  • aguestuser/tor-browser
  • WofWca/tor-browser
  • p13dz/tor-browser
  • mwolfe/tor-browser
  • tpo/applications/tor-browser
  • brade/tor-browser
  • pierov/tor-browser
  • ma1/tor-browser
  • JeremyRand/tor-browser
  • henry/tor-browser
  • msimonelli/tor-browser
  • cypherpunks1/tor-browser
  • blackZwork/tor-browser
  • starlingroot/tor-browser
  • cohosh/tor-browser
  • t-m-w/tor-browser
  • trinity-1686a/tor-browser
  • HHN/tor-browser
  • emmapeel/tor-browser
  • Achintya_Sharma/tor-browser
  • guest475646844/tor-browser
  • Mima/tor-browser
  • morgan/tor-browser
  • clairehurst/tor-browser
  • NoisyCoil/tor-browser
  • gus/tor-browser
  • Francewhoa/tor-browser
  • novialriptide/tor-browser
  • jwilde/tor-browser
  • brizental/tor-browser
  • ourhopeforfreedom/tor-browser
  • onyinyang/tor-browser
  • Noino/tor-browser
  • murmelurmel/tor-browser
43 results
Show changes
Commits on Source (3)
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
<link rel="localization" href="security/certificates/certManager.ftl"/> <link rel="localization" href="security/certificates/certManager.ftl"/>
<link rel="localization" href="security/certificates/deviceManager.ftl"/> <link rel="localization" href="security/certificates/deviceManager.ftl"/>
<link rel="localization" href="toolkit/updates/history.ftl"/> <link rel="localization" href="toolkit/updates/history.ftl"/>
<link rel="localization" href="browser/base-browser.ftl"/>
<link rel="shortcut icon" href="chrome://global/skin/icons/settings.svg"/> <link rel="shortcut icon" href="chrome://global/skin/icons/settings.svg"/>
......
...@@ -8,65 +8,6 @@ ChromeUtils.defineModuleGetter( ...@@ -8,65 +8,6 @@ ChromeUtils.defineModuleGetter(
"resource://gre/modules/SecurityLevel.jsm" "resource://gre/modules/SecurityLevel.jsm"
); );
XPCOMUtils.defineLazyGetter(this, "SecurityLevelStrings", () => {
let strings = {
// Generic terms
security_level: "Security Level",
security_level_standard: "Standard",
security_level_safer: "Safer",
security_level_safest: "Safest",
security_level_tooltip_standard: "Security Level: Standard",
security_level_tooltip_safer: "Security Level: Safer",
security_level_tooltip_safest: "Security Level: Safest",
// Shown only for custom level
security_level_custom: "Custom",
security_level_restore: "Restore Defaults",
security_level_learn_more: "Learn more",
// Panel
security_level_open_settings: "Settings…",
security_level_standard_summary:
"All browser and website features are enabled.",
security_level_safer_summary:
"Disables website features that are often dangerous, causing some sites to lose functionality.",
security_level_safest_summary:
"Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.",
security_level_custom_heading: "Custom security level configured",
security_level_custom_summary:
"Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels.",
// Security level section in about:preferences#privacy
security_level_overview:
"Disable certain web features that can be used to attack your security and anonymity.",
security_level_list_safer: "At the safer setting:",
security_level_list_safest: "At the safest setting:",
// Strings for descriptions
security_level_js_https_only: "JavaScript is disabled on non-HTTPS sites.",
security_level_js_disabled:
"JavaScript is disabled by default on all sites.",
security_level_limit_typography:
"Some fonts and math symbols are disabled.",
security_level_limit_typography_svg:
"Some fonts, icons, math symbols, and images are disabled.",
security_level_limit_media:
"Audio and video (HTML5 media), and WebGL are click-to-play.",
};
let bundle = null;
try {
bundle = Services.strings.createBundle(
"chrome://browser/locale/securityLevel.properties"
);
} catch (e) {
console.warn("Could not load the Security Level strings");
}
if (bundle) {
for (const key of Object.keys(strings)) {
try {
strings[key] = bundle.GetStringFromName(key);
} catch (e) {}
}
}
return strings;
});
/* /*
Security Level Button Code Security Level Button Code
...@@ -100,12 +41,30 @@ var SecurityLevelButton = { ...@@ -100,12 +41,30 @@ var SecurityLevelButton = {
if (!level) { if (!level) {
return; return;
} }
const customStr = SecurityLevelPrefs.securityCustom ? "_custom" : ""; const custom = SecurityLevelPrefs.securityCustom;
this._button.setAttribute("level", `${level}${customStr}`); this._button.setAttribute("level", custom ? `${level}_custom` : level);
this._button.setAttribute(
"tooltiptext", let l10nIdLevel;
SecurityLevelStrings[`security_level_tooltip_${level}`] switch (level) {
); case "standard":
l10nIdLevel = "security-level-toolbar-button-standard";
break;
case "safer":
l10nIdLevel = "security-level-toolbar-button-safer";
break;
case "safest":
l10nIdLevel = "security-level-toolbar-button-safest";
break;
default:
throw Error(`Unhandled level: ${level}`);
}
if (custom) {
// Don't distinguish between the different levels when in the custom
// state. We just want to emphasise that it is custom rather than any
// specific level.
l10nIdLevel = "security-level-toolbar-button-custom";
}
document.l10n.setAttributes(this._button, l10nIdLevel);
}, },
/** /**
...@@ -159,7 +118,6 @@ var SecurityLevelButton = { ...@@ -159,7 +118,6 @@ var SecurityLevelButton = {
window.gNavToolbox.palette.querySelector("#security-level-button"); window.gNavToolbox.palette.querySelector("#security-level-button");
// Set a label to be be used as the accessible name, and to be shown in the // Set a label to be be used as the accessible name, and to be shown in the
// overflow menu and during customization. // overflow menu and during customization.
this._button.setAttribute("label", SecurityLevelStrings.security_level);
this._button.addEventListener("command", () => this.openPopup()); this._button.addEventListener("command", () => this.openPopup());
// set the initial class based off of the current pref // set the initial class based off of the current pref
this._configUIFromPrefs(); this._configUIFromPrefs();
...@@ -213,21 +171,12 @@ var SecurityLevelPanel = { ...@@ -213,21 +171,12 @@ var SecurityLevelPanel = {
settingsButton: document.getElementById("securityLevel-settings"), settingsButton: document.getElementById("securityLevel-settings"),
}; };
document.getElementById("securityLevel-header").textContent =
SecurityLevelStrings.security_level;
this._elements.customName.textContent =
SecurityLevelStrings.security_level_custom;
const learnMoreEl = document.getElementById("securityLevel-learnMore"); const learnMoreEl = document.getElementById("securityLevel-learnMore");
learnMoreEl.textContent = SecurityLevelStrings.security_level_learn_more;
learnMoreEl.addEventListener("click", event => { learnMoreEl.addEventListener("click", event => {
window.openTrustedLinkIn(learnMoreEl.href, "tab"); window.openTrustedLinkIn(learnMoreEl.href, "tab");
this.hide(); this.hide();
event.preventDefault(); event.preventDefault();
}); });
this._elements.restoreDefaultsButton.textContent =
SecurityLevelStrings.security_level_restore;
this._elements.settingsButton.textContent =
SecurityLevelStrings.security_level_open_settings;
this._elements.restoreDefaultsButton.addEventListener("command", () => { this._elements.restoreDefaultsButton.addEventListener("command", () => {
this.restoreDefaults(); this.restoreDefaults();
...@@ -268,11 +217,30 @@ var SecurityLevelPanel = { ...@@ -268,11 +217,30 @@ var SecurityLevelPanel = {
// Descriptions change based on security level // Descriptions change based on security level
this._elements.background.setAttribute("level", level); this._elements.background.setAttribute("level", level);
this._elements.levelName.textContent = let l10nIdLevel;
SecurityLevelStrings[`security_level_${level}`]; let l10nIdSummary;
this._elements.summary.textContent = custom switch (level) {
? SecurityLevelStrings.security_level_custom_summary case "standard":
: SecurityLevelStrings[`security_level_${level}_summary`]; l10nIdLevel = "security-level-panel-level-standard";
l10nIdSummary = "security-level-summary-standard";
break;
case "safer":
l10nIdLevel = "security-level-panel-level-safer";
l10nIdSummary = "security-level-summary-safer";
break;
case "safest":
l10nIdLevel = "security-level-panel-level-safest";
l10nIdSummary = "security-level-summary-safest";
break;
default:
throw Error(`Unhandled level: ${level}`);
}
if (custom) {
l10nIdSummary = "security-level-summary-custom";
}
document.l10n.setAttributes(this._elements.levelName, l10nIdLevel);
document.l10n.setAttributes(this._elements.summary, l10nIdSummary);
}, },
/** /**
...@@ -358,25 +326,13 @@ var SecurityLevelPreferences = { ...@@ -358,25 +326,13 @@ var SecurityLevelPreferences = {
this._customNotification = document.getElementById( this._customNotification = document.getElementById(
"securityLevel-customNotification" "securityLevel-customNotification"
); );
this._radiogroup = document.getElementById("securityLevel-radiogroup");
document.querySelector("#securityLevel-groupbox h2").textContent =
SecurityLevelStrings.security_level;
document.getElementById("securityLevel-overview").textContent =
SecurityLevelStrings.security_level_overview;
document document
.getElementById("securityLevel-learnMore") .getElementById("securityLevel-restoreDefaults")
.setAttribute("value", SecurityLevelStrings.security_level_learn_more); .addEventListener("command", () => {
SecurityLevelPrefs.securityCustom = false;
document.getElementById("securityLevel-customHeading").textContent = });
SecurityLevelStrings.security_level_custom_heading;
document.getElementById("securityLevel-customDescription").textContent = this._radiogroup = document.getElementById("securityLevel-radiogroup");
SecurityLevelStrings.security_level_custom_summary;
const restoreDefaultsButton = document.getElementById(
"securityLevel-restoreDefaults"
);
restoreDefaultsButton.textContent =
SecurityLevelStrings.security_level_restore;
this._radioOptions = Array.from( this._radioOptions = Array.from(
this._radiogroup.querySelectorAll(".securityLevel-radio-option"), this._radiogroup.querySelectorAll(".securityLevel-radio-option"),
...@@ -384,46 +340,7 @@ var SecurityLevelPreferences = { ...@@ -384,46 +340,7 @@ var SecurityLevelPreferences = {
return { container, radio: container.querySelector("radio") }; return { container, radio: container.querySelector("radio") };
} }
); );
const descListItemsMap = {
safer: [
SecurityLevelStrings.security_level_js_https_only,
SecurityLevelStrings.security_level_limit_typography,
SecurityLevelStrings.security_level_limit_media,
],
safest: [
SecurityLevelStrings.security_level_js_disabled,
SecurityLevelStrings.security_level_limit_typography_svg,
SecurityLevelStrings.security_level_limit_media,
],
};
for (const { container, radio } of this._radioOptions) {
const level = radio.value;
radio.setAttribute(
"label",
SecurityLevelStrings[`security_level_${level}`]
);
container.querySelector(".summary").textContent =
SecurityLevelStrings[`security_level_${level}_summary`];
const descListItems = descListItemsMap[level];
if (!descListItems) {
continue;
}
const descrList = container.querySelector(
".securityLevel-descriptionList"
);
// TODO: Add the elements in securityLevelPreferences.inc.xhtml again
// when we switch to Fluent
for (const text of descListItems) {
let elem = document.createXULElement("description");
elem.textContent = text;
elem.className = "indent";
descrList.append(elem);
}
}
restoreDefaultsButton.addEventListener("command", () => {
SecurityLevelPrefs.securityCustom = false;
});
this._radiogroup.addEventListener("select", () => { this._radiogroup.addEventListener("select", () => {
SecurityLevelPrefs.securityLevel = this._radiogroup.value; SecurityLevelPrefs.securityLevel = this._radiogroup.value;
}); });
......
...@@ -7,20 +7,35 @@ ...@@ -7,20 +7,35 @@
level="top" level="top"
class="cui-widget-panel panel-no-padding"> class="cui-widget-panel panel-no-padding">
<box class="panel-header"> <box class="panel-header">
<html:h1 id="securityLevel-header"></html:h1> <html:h1
id="securityLevel-header"
data-l10n-id="security-level-panel-heading"
></html:h1>
</box> </box>
<toolbarseparator id="securityLevel-separator"></toolbarseparator> <toolbarseparator id="securityLevel-separator"></toolbarseparator>
<vbox id="securityLevel-background" class="panel-subview-body"> <vbox id="securityLevel-background" class="panel-subview-body">
<html:p id="securityLevel-subheading"> <html:p id="securityLevel-subheading">
<html:span id="securityLevel-level"></html:span> <html:span id="securityLevel-level"></html:span>
<html:span id="securityLevel-custom"></html:span> <html:span
id="securityLevel-custom"
data-l10n-id="security-level-panel-custom-badge"
></html:span>
</html:p> </html:p>
<html:p id="securityLevel-summary"></html:p> <html:p id="securityLevel-summary"></html:p>
<html:a id="securityLevel-learnMore" href="about:manual#security-settings"> <html:a
</html:a> id="securityLevel-learnMore"
data-l10n-id="security-level-panel-learn-more-link"
href="about:manual#security-settings"
></html:a>
</vbox> </vbox>
<hbox class="panel-footer"> <hbox class="panel-footer">
<button id="securityLevel-settings"/> <button
<button id="securityLevel-restoreDefaults"/> id="securityLevel-settings"
data-l10n-id="security-level-panel-open-settings-button"
/>
<button
id="securityLevel-restoreDefaults"
data-l10n-id="security-level-restore-defaults-button"
/>
</hbox> </hbox>
</panel> </panel>
...@@ -2,37 +2,64 @@ ...@@ -2,37 +2,64 @@
data-category="panePrivacy" data-category="panePrivacy"
data-subcategory="securitylevel" data-subcategory="securitylevel"
hidden="true"> hidden="true">
<label><html:h2></html:h2></label> <label>
<html:h2 data-l10n-id="security-level-preferences-heading"></html:h2>
</label>
<vbox flex="1"> <vbox flex="1">
<description flex="1"> <description flex="1">
<html:span id="securityLevel-overview" class="tail-with-learn-more"> <html:span
</html:span> id="securityLevel-overview"
<label id="securityLevel-learnMore" class="tail-with-learn-more"
class="learnMore text-link" data-l10n-id="security-level-preferences-overview"
is="text-link" ></html:span>
href="about:manual#security-settings" <label
useoriginprincipal="true"/> id="securityLevel-learnMore"
class="learnMore text-link"
is="text-link"
data-l10n-id="security-level-preferences-learn-more-link"
href="about:manual#security-settings"
useoriginprincipal="true"
/>
</description> </description>
<hbox id="securityLevel-customNotification" <hbox
class="info-box-container" id="securityLevel-customNotification"
flex="1"> class="info-box-container"
flex="1"
>
<hbox class="info-icon-container"> <hbox class="info-icon-container">
<image class="info-icon securityLevel-custom-warning-icon"/> <image class="info-icon securityLevel-custom-warning-icon"/>
</hbox> </hbox>
<vbox flex="1"> <vbox flex="1">
<label id="securityLevel-customHeading"/> <label
<description id="securityLevel-customDescription" flex="1"/> id="securityLevel-customHeading"
data-l10n-id="security-level-preferences-custom-heading"
/>
<description
id="securityLevel-customDescription"
data-l10n-id="security-level-summary-custom"
flex="1"
/>
</vbox> </vbox>
<hbox align="center"> <hbox align="center">
<button id="securityLevel-restoreDefaults"/> <button
id="securityLevel-restoreDefaults"
data-l10n-id="security-level-restore-defaults-button"
/>
</hbox> </hbox>
</hbox> </hbox>
<radiogroup id="securityLevel-radiogroup"> <radiogroup id="securityLevel-radiogroup">
<vbox class="securityLevel-radio-option"> <vbox class="securityLevel-radio-option">
<radio value="standard" <radio
aria-describedby="securityLevelSummary-standard"/> value="standard"
data-l10n-id="security-level-preferences-level-standard"
aria-describedby="securityLevelSummary-standard"
/>
<vbox id="securityLevelSummary-standard"> <vbox id="securityLevelSummary-standard">
<description class="summary indent" flex="1"/> <description
class="summary indent"
flex="1"
data-l10n-id="security-level-summary-standard"
/>
</vbox> </vbox>
</vbox> </vbox>
<vbox class="securityLevel-radio-option"> <vbox class="securityLevel-radio-option">
...@@ -41,19 +68,59 @@ ...@@ -41,19 +68,59 @@
- securityLevel-descriptionList is shown or hidden, its text content - securityLevel-descriptionList is shown or hidden, its text content
- is included or excluded from the accessible description, - is included or excluded from the accessible description,
- respectively. --> - respectively. -->
<radio value="safer" <radio
aria-describedby="securityLevelSummary-safer"/> value="safer"
data-l10n-id="security-level-preferences-level-safer"
aria-describedby="securityLevelSummary-safer"
/>
<vbox id="securityLevelSummary-safer"> <vbox id="securityLevelSummary-safer">
<description class="summary indent" flex="1"/> <description
<vbox class="securityLevel-descriptionList indent"/> class="summary indent"
flex="1"
data-l10n-id="security-level-summary-safer"
/>
<vbox class="securityLevel-descriptionList indent">
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-https-only-javascript"
/>
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-limit-font-and-symbols"
/>
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-limit-media"
/>
</vbox>
</vbox> </vbox>
</vbox> </vbox>
<vbox class="securityLevel-radio-option"> <vbox class="securityLevel-radio-option">
<radio value="safest" <radio
aria-describedby="securityLevelSummary-safest"/> value="safest"
data-l10n-id="security-level-preferences-level-safest"
aria-describedby="securityLevelSummary-safest"
/>
<vbox id="securityLevelSummary-safest"> <vbox id="securityLevelSummary-safest">
<description class="summary indent" flex="1"/> <description
<vbox class="securityLevel-descriptionList indent"/> class="summary indent"
flex="1"
data-l10n-id="security-level-summary-safest"
/>
<vbox class="securityLevel-descriptionList indent">
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-disabled-javascript"
/>
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-limit-font-and-symbols-and-images"
/>
<description
class="indent"
data-l10n-id="security-level-preferences-bullet-limit-media"
/>
</vbox>
</vbox> </vbox>
</vbox> </vbox>
</radiogroup> </radiogroup>
......
...@@ -70,6 +70,7 @@ new-identity-dialog-confirm = ...@@ -70,6 +70,7 @@ new-identity-dialog-confirm =
new-identity-blocked-home-notification = { -brand-short-name } blocked your homepage ({ $url }) from loading because it might recognize your previous session. new-identity-blocked-home-notification = { -brand-short-name } blocked your homepage ({ $url }) from loading because it might recognize your previous session.
# Button to continue loading the home page, despite the warning message. # Button to continue loading the home page, despite the warning message.
new-identity-blocked-home-ignore-button = Load it anyway new-identity-blocked-home-ignore-button = Load it anyway
## Preferences - Letterboxing. ## Preferences - Letterboxing.
# The word "Letterboxing" is the proper noun for the Tor Browser feature, and is therefore capitalised. # The word "Letterboxing" is the proper noun for the Tor Browser feature, and is therefore capitalised.
...@@ -94,3 +95,74 @@ letterboxing-disabled-description = Letterboxing is currently disabled. ...@@ -94,3 +95,74 @@ letterboxing-disabled-description = Letterboxing is currently disabled.
# "Letterboxing" should be treated as a feature/product name, and likely not changed in other languages. # "Letterboxing" should be treated as a feature/product name, and likely not changed in other languages.
letterboxing-enable-button = letterboxing-enable-button =
.label = Enable Letterboxing .label = Enable Letterboxing
## Security level toolbar button.
## Uses sentence case in English (US).
## ".label" is the accessible name, and shown in the overflow menu and when customizing the toolbar.
security-level-toolbar-button-standard =
.label = Security level
.tooltiptext = Security level: Standard
security-level-toolbar-button-safer =
.label = Security level
.tooltiptext = Security level: Safer
security-level-toolbar-button-safest =
.label = Security level
.tooltiptext = Security level: Safest
# Used when the user is in some custom configuration that does not match a security level.
security-level-toolbar-button-custom =
.label = Security level
.tooltiptext = Security level: Custom
## Security level popup panel.
# Uses sentence case in English (US).
security-level-panel-heading = Security level
security-level-panel-level-standard = Standard
security-level-panel-level-safer = Safer
security-level-panel-level-safest = Safest
security-level-panel-learn-more-link = Learn more
# Button to open security level settings.
security-level-panel-open-settings-button = Settings…
## Security level settings.
security-level-preferences-heading = Security Level
security-level-preferences-overview = Disable certain web features that can be used to attack your security and anonymity.
security-level-preferences-learn-more-link = Learn more
security-level-preferences-level-standard =
.label = Standard
security-level-preferences-level-safer =
.label = Safer
security-level-preferences-level-safest =
.label = Safest
## Security level summaries shown in security panel and settings.
security-level-summary-standard = All browser and website features are enabled.
security-level-summary-safer = Disables website features that are often dangerous, causing some sites to lose functionality.
security-level-summary-safest = Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.
## Security level feature bullet points.
## Shown in the settings under the security level when it is selected.
security-level-preferences-bullet-https-only-javascript = JavaScript is disabled on non-HTTPS sites.
security-level-preferences-bullet-limit-font-and-symbols = Some fonts and math symbols are disabled.
security-level-preferences-bullet-limit-media = Audio and video (HTML5 media), and WebGL are click-to-play.
security-level-preferences-bullet-disabled-javascript = JavaScript is disabled by default on all sites.
security-level-preferences-bullet-limit-font-and-symbols-and-images = Some fonts, icons, math symbols, and images are disabled.
## Custom security level.
## Some custom preferences configuration has placed the user outside one of the standard three levels.
# Shown in the security level panel as an orange badge next to the expected level.
security-level-panel-custom-badge = Custom
# Shown in the security level settings in a warning box.
security-level-preferences-custom-heading = Custom security level configured
# Description of custom state and recommended action.
# Shown in the security level panel and settings.
security-level-summary-custom = Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels.
# Button to undo custom changes to the security level and place the user in one of the standard security levels.
# Shown in the security level panel and settings.
security-level-restore-defaults-button = Restore defaults
...@@ -32,5 +32,4 @@ ...@@ -32,5 +32,4 @@
locale/browser/safebrowsing/safebrowsing.properties (%chrome/browser/safebrowsing/safebrowsing.properties) locale/browser/safebrowsing/safebrowsing.properties (%chrome/browser/safebrowsing/safebrowsing.properties)
locale/browser/feeds/subscribe.properties (%chrome/browser/feeds/subscribe.properties) locale/browser/feeds/subscribe.properties (%chrome/browser/feeds/subscribe.properties)
locale/browser/syncSetup.properties (%chrome/browser/syncSetup.properties) locale/browser/syncSetup.properties (%chrome/browser/syncSetup.properties)
locale/browser/securityLevel.properties (%chrome/browser/securityLevel.properties)
% locale browser-region @AB_CD@ %locale/browser-region/ % locale browser-region @AB_CD@ %locale/browser-region/
import fluent.syntax.ast as FTL
from fluent.migrate.helpers import TERM_REFERENCE, transforms_from
from fluent.migrate.transforms import REPLACE
def migrate(ctx):
legacy_path = "newIdentity.properties"
ctx.add_transforms(
"base-browser.ftl",
"base-browser.ftl",
transforms_from(
"""
menu-new-identity =
.label = { COPY(path, "new_identity") }
.accesskey = { COPY(path, "new_identity_menu_accesskey") }
appmenuitem-new-identity =
.label = { COPY(path, "new_identity_sentence_case") }
toolbar-new-identity =
.label = { COPY(path, "new_identity_sentence_case") }
.tooltiptext = { toolbar-new-identity.label }
new-identity-dialog-title = { COPY(path, "new_identity_prompt_title") }
new-identity-dialog-never-ask-checkbox =
.label = { COPY(path, "new_identity_ask_again") }
new-identity-blocked-home-ignore-button = { COPY(path, "new_identity_home_load_button") }
""",
path=legacy_path,
)
+ [
# Replace "%S" with "{ -brand-short-name }" in confirm button.
FTL.Message(
id=FTL.Identifier("new-identity-dialog-confirm"),
value=None,
attributes=[
FTL.Attribute(
id=FTL.Identifier("label"),
value=REPLACE(
legacy_path,
"new_identity_restart",
{"%1$S": TERM_REFERENCE("brand-short-name")},
),
),
],
),
],
)