diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml index 2633ccd..d2156e6 100644 --- a/browser/base/content/main-popupset.inc.xhtml +++ b/browser/base/content/main-popupset.inc.xhtml @@ -654,6 +654,8 @@ checked="false" autocheck="false" oncommand="TranslationsPanel.onNeverTranslateSite()"/> + - diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js index 08c91c4..ef459f9 100644 --- a/browser/components/preferences/main.js +++ b/browser/components/preferences/main.js @@ -141,6 +141,10 @@ Preferences.addAll([ { id: "dom.ipc.processCount.web", type: "int" }, { id: "layers.acceleration.disabled", type: "bool", inverted: true }, + /* Fullpage Translations */ + { id: "browser.translations.enable", type: "bool" }, + { id: "browser.translations.automaticallyPopup", type: "bool" }, + // Files and Applications { id: "pref.downloads.disable_button.edit_actions", type: "bool" }, @@ -323,6 +327,22 @@ var gMainPane = { gMainPane.initTranslations(); + let inPrompt = false; + Preferences.get("browser.translations.enable").on("change", () => { + if(!Preferences.get("browser.translations.enable").value) + if(!inPrompt) { + inPrompt = true; + confirmRestartPrompt(false, 1, true, false).then(buttonIndex => { + inPrompt = false; + if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) { + Services.startup.quit( + Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart + ); + } + }); + } + }); + if ( Services.prefs.getBoolPref( "media.videocontrols.picture-in-picture.enabled" @@ -783,6 +803,10 @@ var gMainPane = { document.getElementById("checkSpelling"), () => this.writeCheckSpelling() ); + Preferences.addSyncFromPrefListener( + document.getElementById("translations-manage-enable"), + () => this.readEnableTranslations() + ); Preferences.addSyncFromPrefListener( document.getElementById("alwaysAsk"), () => this.readUseDownloadDir() @@ -1010,24 +1034,33 @@ var gMainPane = { document.getElementById("zoomBox").hidden = false; }, + readEnableTranslations(skipInit = false) { + const translationsEnabled = Preferences.get("browser.translations.enable").value; + document.getElementById("innerTranslationsGroup").hidden = !translationsEnabled; + if (!this._translationsInitialized && !skipInit) + this.initTranslations(); + }, + + _translationsInitialized: false, + /** * Initialize the translations view. */ async initTranslations() { + this.readEnableTranslations(true); + if (!Services.prefs.getBoolPref("browser.translations.enable")) { return; } + this._translationsInitialized = true; + /** * Which phase a language download is in. * * @typedef {"downloaded" | "loading" | "uninstalled"} DownloadPhase */ - // Immediately show the group so that the async load of the component does - // not cause the layout to jump. The group will be empty initially. - document.getElementById("translationsGroup").hidden = false; - class TranslationsState { /** * The fully initialized state. diff --git a/browser/components/translations/content/translationsPanel.js b/browser/components/translations/content/translationsPanel.js index b9916dc..1ff8d64 100644 --- a/browser/components/translations/content/translationsPanel.js +++ b/browser/components/translations/content/translationsPanel.js @@ -1318,6 +1318,12 @@ var TranslationsPanel = new (class { ); } + openDisableTranslations() { + const window = + gBrowser.selectedBrowser.browsingContext.top.embedderElement.ownerGlobal; + window.openTrustedLinkIn("about:preferences#general-translations-enable", "tab"); + } + /** * Redirect the user to about:preferences */ diff --git a/browser/locales/en-US/browser/translations.ftl b/browser/locales/en-US/browser/translations.ftl index 8483a45..14478f4 100644 --- a/browser/locales/en-US/browser/translations.ftl +++ b/browser/locales/en-US/browser/translations.ftl @@ -58,6 +58,9 @@ translations-panel-settings-never-translate-unknown-language = translations-panel-settings-never-translate-site = .label = Never translate this site +translations-panel-disable-translations = + .label = Disable translations completely + ## The translation panel appears from the url bar, and this view is the default ## translation view. @@ -123,6 +126,10 @@ translations-manage-header = Translations translations-manage-settings-button = .label = Settings… .accesskey = t +translations-manage-enable = + .label = Enable fullpage translations +translations-manage-autopopup = + .label = Prompt to translate pages that aren’t in the browser’s configured language translations-manage-intro = Set your language and site translation preferences and manage languages installed for offline translation. translations-manage-install-description = Install languages for offline translation translations-manage-language-install-button =