merge mozilla-central to mozilla-inbound. r=merge a=merge CLOSED TREE

This commit is contained in:
Sebastian Hengst 2017-08-29 20:36:12 +02:00
commit 558aede67b
980 changed files with 305933 additions and 3721 deletions

View File

@ -13,7 +13,7 @@ support-files =
[browser_shutdown_parent_own_reference.js]
skip-if = !e10s || (os == 'win' && os_version == '5.1') # e10s specific test for a11y start/shutdown between parent and content.
[browser_shutdown_proxy_acc_reference.js]
skip-if = !e10s || (os == 'win') || stylo # e10s specific test for a11y start/shutdown between parent and content. bug 1390409 for stylo
skip-if = !e10s || (os == 'win') # e10s specific test for a11y start/shutdown between parent and content.
[browser_shutdown_proxy_doc_acc_reference.js]
skip-if = !e10s || (os == 'win') # e10s specific test for a11y start/shutdown between parent and content.
[browser_shutdown_multi_proxy_acc_reference_doc.js]

View File

@ -26,9 +26,7 @@ skip-if = e10s && os == 'win' && debug # Bug 1338034, leaks
# Events tests
[browser_events_caretmove.js]
[browser_events_hide.js]
skip-if = stylo # bug 1390409
[browser_events_show.js]
skip-if = stylo # bug 1390409
[browser_events_statechange.js]
[browser_events_textchange.js]
@ -50,6 +48,5 @@ skip-if = e10s && os == 'win' # Bug 1288839
[browser_treeupdate_table.js]
[browser_treeupdate_textleaf.js]
[browser_treeupdate_visibility.js]
skip-if = stylo # bug 1390409
[browser_treeupdate_whitespace.js]
skip-if = true # Failing due to incorrect index of test container children on document load.

View File

@ -8,7 +8,6 @@ support-files =
[test_aria_alert.html]
[test_aria_menu.html]
skip-if = stylo # bug 1390409
[test_aria_objattr.html]
[test_aria_owns.html]
[test_aria_statechange.html]
@ -21,7 +20,7 @@ skip-if = stylo # bug 1390409
[test_contextmenu.html]
[test_descrchange.html]
[test_docload.html]
skip-if = stylo # bug 1390409
skip-if = stylo && os == 'win' && debug # bug 1394317
[test_docload_aria.html]
[test_dragndrop.html]
[test_flush.html]
@ -45,7 +44,6 @@ skip-if = os == 'win' || os == 'linux'
[test_label.xul]
[test_menu.xul]
[test_mutation.html]
skip-if = stylo # bug 1390409
[test_mutation.xhtml]
[test_namechange.xul]
[test_namechange.html]

View File

@ -39,5 +39,4 @@ skip-if = buildapp == "mulet"
[test_table.html]
[test_textleaf.html]
[test_visibility.html]
skip-if = stylo # bug 1390409
[test_whitespace.html]

View File

@ -1721,7 +1721,12 @@ pref("browser.sessionstore.restore_tabs_lazily", true);
// Enable safebrowsing v4 tables (suffixed by "-proto") update.
pref("urlclassifier.malwareTable", "goog-malware-proto,goog-unwanted-proto,test-malware-simple,test-unwanted-simple,test-harmful-simple");
#ifdef MOZILLA_OFFICIAL
pref("urlclassifier.phishTable", "goog-phish-proto,test-phish-simple");
#else
pref("urlclassifier.phishTable", "googpub-phish-proto,test-phish-simple");
#endif
pref("urlclassifier.downloadAllowTable", "goog-downloadwhite-proto");
pref("urlclassifier.downloadBlockTable", "goog-badbinurl-proto");

View File

@ -674,6 +674,57 @@ var BrowserPageActions = {
},
};
var BrowserPageActionFeedback = {
/**
* The feedback page action panel DOM node (DOM node)
*/
get panelNode() {
delete this.panelNode;
return this.panelNode = document.getElementById("pageActionFeedback");
},
get feedbackAnimationBox() {
delete this.feedbackAnimationBox;
return this.feedbackAnimationBox = document.getElementById("pageActionFeedbackAnimatableBox");
},
get feedbackLabel() {
delete this.feedbackLabel;
return this.feedbackLabel = document.getElementById("pageActionFeedbackMessage");
},
show(action, event) {
this.feedbackLabel.textContent = this.panelNode.getAttribute(action + "Feedback");
this.panelNode.hidden = false;
let anchor = BrowserPageActions.mainButtonNode;
if (event.target.classList.contains("urlbar-icon")) {
let id = BrowserPageActions._urlbarButtonNodeIDForActionID(action);
let node = document.getElementById(id);
if (node) {
anchor = node;
}
}
this.panelNode.openPopup(anchor, {
position: "bottomcenter topright",
triggerEvent: event,
});
this.panelNode.addEventListener("popupshown", () => {
this.feedbackAnimationBox.setAttribute("animate", "true");
}, {once: true});
this.panelNode.addEventListener("popuphidden", () => {
this.feedbackAnimationBox.removeAttribute("animate");
}, {once: true});
// The timeout value used here allows the panel to stay open for
// 1 second after the text transition (duration=120ms) has finished.
setTimeout(() => {
this.panelNode.hidePopup();
}, Services.prefs.getIntPref("browser.pageActions.feedbackTimeoutMS", 1120));
},
};
// built-in actions below //////////////////////////////////////////////////////
@ -708,6 +759,7 @@ BrowserPageActions.copyURL = {
Cc["@mozilla.org/widget/clipboardhelper;1"]
.getService(Ci.nsIClipboardHelper)
.copyString(gURLBar.makeURIReadable(gBrowser.selectedBrowser.currentURI).displaySpec);
BrowserPageActionFeedback.show("copyURL", event);
},
};
@ -766,6 +818,9 @@ BrowserPageActions.sendToDevice = {
item.classList.add("subviewbutton-iconic");
}
item.setAttribute("tooltiptext", name);
item.addEventListener("command", event => {
BrowserPageActionFeedback.show("sendToDevice", event);
});
return item;
});

View File

@ -340,9 +340,6 @@ var StarUI = {
.replace("#1", bookmarksCount);
this._element("editBookmarkPanelRemoveButton").label = label;
// unset the unstarred state, if set
this._element("editBookmarkPanelStarIcon").removeAttribute("unstarred");
this.beginBatch();
if (aAnchorElement) {

View File

@ -448,6 +448,21 @@
</panelview>
</photonpanelmultiview>
</panel>
<panel id="pageActionFeedback"
role="alert"
type="arrow"
hidden="true"
flip="slide"
position="bottomcenter topright"
tabspecific="true"
noautofocus="true"
copyURLFeedback="&copyURLFeedback.label;"
sendToDeviceFeedback="&sendToDeviceFeedback.label;">
<hbox id="pageActionFeedbackAnimatableBox">
<image id="pageActionFeedbackAnimatableImage"/>
</hbox>
<label id="pageActionFeedbackMessage"/>
</panel>
<menupopup id="pageActionPanelContextMenu"
onpopupshowing="BrowserPageActions.onContextMenuShowing(event, this);">

View File

@ -48,6 +48,10 @@ this.SiteDataManager = {
let onUsageResult = request => {
let items = request.result;
for (let item of items) {
if (!item.persisted && item.usage <= 0) {
// An non-persistent-storage site with 0 byte quota usage is redundant for us so skip it.
continue;
}
let principal =
Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
let uri = principal.URI;
@ -95,6 +99,11 @@ this.SiteDataManager = {
_updateAppCache() {
let groups = this._appCache.getGroups();
for (let group of groups) {
let cache = this._appCache.getActiveCache(group);
if (cache.usage <= 0) {
// A site with 0 byte appcache usage is redundant for us so skip it.
continue;
}
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(group);
let uri = principal.URI;
let site = this._sites.get(uri.host);
@ -109,7 +118,6 @@ this.SiteDataManager = {
} else if (!site.principals.some(p => p.origin == principal.origin)) {
site.principals.push(principal);
}
let cache = this._appCache.getActiveCache(group);
site.appCacheList.push(cache);
}
},

View File

@ -67,6 +67,7 @@ skip-if = e10s
[browser_security-2.js]
[browser_siteData.js]
[browser_siteData2.js]
[browser_siteData3.js]
[browser_site_login_exceptions.js]
[browser_permissions_dialog.js]
[browser_cookies_dialog.js]

View File

@ -1,8 +1,6 @@
"use strict";
const { SiteDataManager } = Cu.import("resource:///modules/SiteDataManager.jsm", {});
const REMOVE_DIALOG_URL = "chrome://browser/content/preferences/siteDataRemoveSelected.xul";
const { DownloadUtils } = Cu.import("resource://gre/modules/DownloadUtils.jsm", {});
function promiseSettingsDialogClose() {
return new Promise(resolve => {
@ -316,67 +314,6 @@ add_task(async function() {
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Test grouping and listing sites across scheme, port and origin attributes by host
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
const quotaUsage = 1024;
mockSiteDataManager.register(SiteDataManager);
mockSiteDataManager.fakeSites = [
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com^userContextId=1"),
persisted: true
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: false
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com:123"),
persisted: false
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://account.xyz.com"),
persisted: false
},
];
let updatedPromise = promiseSiteDataManagerSitesUpdated();
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
await updatedPromise;
await openSiteDataSettingsDialog();
let win = gBrowser.selectedBrowser.contentWindow;
let dialogFrame = win.gSubDialog._topDialog._frame;
let frameDoc = dialogFrame.contentDocument;
let siteItems = frameDoc.getElementsByTagName("richlistitem");
is(siteItems.length, 1, "Should group sites across scheme, port and origin attributes");
let expected = "account.xyz.com";
let host = siteItems[0].getAttribute("host");
is(host, expected, "Should group and list sites by host");
let prefStrBundle = frameDoc.getElementById("bundlePreferences");
expected = prefStrBundle.getFormattedString("siteUsage",
DownloadUtils.convertByteUnits(quotaUsage * mockSiteDataManager.fakeSites.length));
let usage = siteItems[0].getAttribute("usage");
is(usage, expected, "Should sum up usages across scheme, port and origin attributes");
expected = prefStrBundle.getString("persistent");
let status = siteItems[0].getAttribute("status");
is(status, expected, "Should mark persisted status across scheme, port and origin attributes");
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Test dynamically clearing all site data
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});

View File

@ -0,0 +1,107 @@
"use strict";
const { SiteDataManager } = Cu.import("resource:///modules/SiteDataManager.jsm", {});
const { DownloadUtils } = Cu.import("resource://gre/modules/DownloadUtils.jsm", {});
// Test not displaying sites which store 0 byte and don't have persistent storage.
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
mockSiteDataManager.register(SiteDataManager);
mockSiteDataManager.fakeSites = [
{
usage: 0,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: true
},
{
usage: 0,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
persisted: false
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
persisted: false
},
];
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
let updatePromise = promiseSiteDataManagerSitesUpdated();
let doc = gBrowser.selectedBrowser.contentDocument;
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
await updatePromise;
await openSiteDataSettingsDialog();
assertSitesListed(doc, fakeHosts.filter(host => host != "shopping.xyz.com"));
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Test grouping and listing sites across scheme, port and origin attributes by host
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
const quotaUsage = 1024;
mockSiteDataManager.register(SiteDataManager);
mockSiteDataManager.fakeSites = [
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com^userContextId=1"),
persisted: true
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: false
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com:123"),
persisted: false
},
{
usage: quotaUsage,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://account.xyz.com"),
persisted: false
},
];
let updatedPromise = promiseSiteDataManagerSitesUpdated();
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
await updatedPromise;
await openSiteDataSettingsDialog();
let win = gBrowser.selectedBrowser.contentWindow;
let dialogFrame = win.gSubDialog._topDialog._frame;
let frameDoc = dialogFrame.contentDocument;
let siteItems = frameDoc.getElementsByTagName("richlistitem");
is(siteItems.length, 1, "Should group sites across scheme, port and origin attributes");
let expected = "account.xyz.com";
let host = siteItems[0].getAttribute("host");
is(host, expected, "Should group and list sites by host");
let prefStrBundle = frameDoc.getElementById("bundlePreferences");
expected = prefStrBundle.getFormattedString("siteUsage",
DownloadUtils.convertByteUnits(quotaUsage * mockSiteDataManager.fakeSites.length));
let usage = siteItems[0].getAttribute("usage");
is(usage, expected, "Should sum up usages across scheme, port and origin attributes");
expected = prefStrBundle.getString("persistent");
let status = siteItems[0].getAttribute("status");
is(status, expected, "Should mark persisted status across scheme, port and origin attributes");
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -48,6 +48,7 @@ skip-if = e10s
[browser_security.js]
[browser_siteData.js]
[browser_siteData2.js]
[browser_siteData3.js]
[browser_site_login_exceptions.js]
[browser_cookies_dialog.js]
[browser_subdialogs.js]

View File

@ -428,61 +428,3 @@ add_task(async function() {
return mockSiteDataManager.fakeSites.find(site => site.principal.URI.host == host);
}
});
// Test search on the host column
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
mockSiteDataManager.register();
mockSiteDataManager.fakeSites = [
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
persisted: false
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
persisted: false
},
];
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
let updatePromise = promiseSitesUpdated();
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
await updatePromise;
await openSettingsDialog();
let win = gBrowser.selectedBrowser.contentWindow;
let doc = gBrowser.selectedBrowser.contentDocument;
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
let searchBox = frameDoc.getElementById("searchBox");
searchBox.value = "xyz";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts.filter(host => host.includes("xyz")));
searchBox.value = "bar";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts.filter(host => host.includes("bar")));
searchBox.value = "";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts);
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -0,0 +1,102 @@
"use strict";
// Test search on the host column
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
mockSiteDataManager.register();
mockSiteDataManager.fakeSites = [
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
persisted: false
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
persisted: false
},
];
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
let updatePromise = promiseSitesUpdated();
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
await updatePromise;
await openSettingsDialog();
let win = gBrowser.selectedBrowser.contentWindow;
let doc = gBrowser.selectedBrowser.contentDocument;
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
let searchBox = frameDoc.getElementById("searchBox");
searchBox.value = "xyz";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts.filter(host => host.includes("xyz")));
searchBox.value = "bar";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts.filter(host => host.includes("bar")));
searchBox.value = "";
searchBox.doCommand();
assertSitesListed(doc, fakeHosts);
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Test not displaying sites which store 0 byte and don't have persistent storage.
add_task(async function() {
await SpecialPowers.pushPrefEnv({set: [["browser.storageManager.enabled", true]]});
mockSiteDataManager.register();
mockSiteDataManager.fakeSites = [
{
usage: 0,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://account.xyz.com"),
persisted: true
},
{
usage: 0,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("https://shopping.xyz.com"),
persisted: false
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://cinema.bar.com"),
persisted: true
},
{
usage: 1024,
principal: Services.scriptSecurityManager
.createCodebasePrincipalFromOrigin("http://email.bar.com"),
persisted: false
},
];
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
let updatePromise = promiseSitesUpdated();
let doc = gBrowser.selectedBrowser.contentDocument;
await openPreferencesViaOpenPreferencesAPI("advanced", "networkTab", { leaveOpen: true });
await updatePromise;
await openSettingsDialog();
assertSitesListed(doc, fakeHosts.filter(host => host != "shopping.xyz.com"));
mockSiteDataManager.unregister();
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -13,9 +13,13 @@ const OUTER_VALUE = "outer-value-" + RAND;
function getEstimateChars() {
let snap;
if (gMultiProcessBrowser) {
snap = Services.telemetry.histogramSnapshots.content.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
snap = Services.telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
false /* subsession */,
false /* clear */).content.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
} else {
snap = Services.telemetry.histogramSnapshots.parent.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
snap = Services.telemetry.snapshotHistograms(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN,
false,
false).parent.FX_SESSION_RESTORE_DOM_STORAGE_SIZE_ESTIMATE_CHARS;
}
if (!snap) {
return 0;

View File

@ -1,5 +1,8 @@
. "$topsrcdir/browser/config/mozconfigs/linux32/common-opt"
# Enabled to get some telemetry
mk_add_options "export JAR_COMPRESSION=brotli"
ac_add_options --enable-profiling
ac_add_options --enable-verify-mar

View File

@ -1,5 +1,8 @@
. "$topsrcdir/browser/config/mozconfigs/linux64/common-opt"
# Enabled to get some telemetry
mk_add_options "export JAR_COMPRESSION=brotli"
ac_add_options --enable-profiling
ac_add_options --enable-verify-mar

View File

@ -1,5 +1,8 @@
. "$topsrcdir/browser/config/mozconfigs/macosx64/common-opt"
# Enabled to get some telemetry
mk_add_options "export JAR_COMPRESSION=brotli"
ac_add_options --disable-install-strip
ac_add_options --enable-verify-mar
ac_add_options --enable-profiling

View File

@ -12,6 +12,7 @@ for platform in all_platforms:
'ac_add_options --enable-update-channel=nightly',
'ac_add_options --with-branding=browser/branding/nightly',
'ac_add_options --enable-profiling',
'mk_add_options "export JAR_COMPRESSION=brotli"',
'mk_add_options CLIENT_PY_ARGS="--hg-options=\'--verbose --time\' --hgtool=../tools/buildfarm/utils/hgtool.py --skip-chatzilla --skip-comm --skip-inspector --tinderbox-print"'
]

View File

@ -1,6 +1,9 @@
. "$topsrcdir/build/mozconfig.win-common"
. "$topsrcdir/browser/config/mozconfigs/win32/common-opt"
# Enabled to get some telemetry
mk_add_options "export JAR_COMPRESSION=brotli"
ac_add_options --enable-profiling
ac_add_options --enable-verify-mar

View File

@ -2,6 +2,9 @@
. "$topsrcdir/browser/config/mozconfigs/win64/common-win64"
. "$topsrcdir/browser/config/mozconfigs/win64/common-opt"
# Enabled to get some telemetry
mk_add_options "export JAR_COMPRESSION=brotli"
ac_add_options --enable-profiling
ac_add_options --enable-verify-mar

View File

@ -37,12 +37,16 @@ option:nth-child(even) {
font-size: 0.85em;
width: 100%;
height: 16.6em;
margin: 0;
border-top: none;
border-radius: 0 0 2px 2px;
}
#addresses > option,
#credit-cards > option {
display: flex;
align-items: center;
height: 1.3em;
padding-inline-start: 0.7em;
}

View File

@ -78,8 +78,8 @@
top: 15px;
offset-inline-end: 15px;
cursor: pointer;
width: 20px;
height: 20px;
width: 16px;
height: 16px;
border: none;
background: none;
padding: 0;
@ -336,14 +336,12 @@
-moz-outline-radius: 2px;
}
.onboarding-tour-action-button:hover:not([disabled]) ,
#onboarding-notification-action-btn:hover {
.onboarding-tour-action-button:hover:not([disabled]) {
background: #0060df;
cursor: pointer;
}
.onboarding-tour-action-button:active:not([disabled]),
#onboarding-notification-action-btn:active {
.onboarding-tour-action-button:active:not([disabled]) {
background: #003EAA;
}
@ -352,7 +350,8 @@
}
/* Tour Icons */
#onboarding-tour-singlesearch {
#onboarding-tour-singlesearch,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-singlesearch] #onboarding-notification-tour-title::before {
background-image: url("img/icons_singlesearch.svg");
}
@ -361,7 +360,8 @@
background-image: url("img/icons_singlesearch-colored.svg");
}
#onboarding-tour-private-browsing {
#onboarding-tour-private-browsing,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-private-browsing] #onboarding-notification-tour-title::before {
background-image: url("img/icons_private.svg");
}
@ -370,7 +370,8 @@
background-image: url("img/icons_private-colored.svg");
}
#onboarding-tour-addons {
#onboarding-tour-addons,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-addons] #onboarding-notification-tour-title::before {
background-image: url("img/icons_addons.svg");
}
@ -379,7 +380,8 @@
background-image: url("img/icons_addons-colored.svg");
}
#onboarding-tour-customize {
#onboarding-tour-customize,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-customize] #onboarding-notification-tour-title::before {
background-image: url("img/icons_customize.svg");
}
@ -388,7 +390,8 @@
background-image: url("img/icons_customize-colored.svg");
}
#onboarding-tour-default-browser {
#onboarding-tour-default-browser ,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-default-browser] #onboarding-notification-tour-title::before {
background-image: url("img/icons_default.svg");
}
@ -397,7 +400,8 @@
background-image: url("img/icons_default-colored.svg");
}
#onboarding-tour-sync {
#onboarding-tour-sync,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-sync] #onboarding-notification-tour-title::before {
background-image: url("img/icons_sync.svg");
}
@ -406,7 +410,8 @@
background-image: url("img/icons_sync-colored.svg");
}
#onboarding-tour-library {
#onboarding-tour-library,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-library] #onboarding-notification-tour-title::before {
background-image: url("img/icons_library.svg");
}
@ -415,7 +420,8 @@
background-image: url("img/icons_library-colored.svg");
}
#onboarding-tour-performance {
#onboarding-tour-performance,
#onboarding-notification-bar[data-target-tour-id=onboarding-tour-performance] #onboarding-notification-tour-title::before {
background-image: url("img/icons_performance.svg");
}
@ -432,7 +438,7 @@
left: 0;
bottom: 0;
width: 100%;
height: 122px;
height: 100px;
min-width: 640px;
background: var(--onboarding-notification-bar-background-color);
border-top: 2px solid #e9e9e9;
@ -448,7 +454,7 @@
#onboarding-notification-close-btn {
position: absolute;
offset-block-start: 50%;
offset-inline-end: 34px;
offset-inline-end: 24px;
transform: translateY(-50%);
}
@ -464,7 +470,7 @@
#onboarding-notification-body {
width: 500px;
margin: 0 15px;
margin: 0 18px;
color: #0c0c0d;
display: inline-block;
max-height: 100%;
@ -474,12 +480,27 @@
}
#onboarding-notification-body * {
font-size: 13px
font-size: 12px;
font-weight: 200;
margin-top: 5px;
}
#onboarding-notification-tour-title {
margin: 0;
font-weight: bold;
color: #0f1126;
font-size: 14px;
}
#onboarding-notification-tour-title::before {
content: "";
background-repeat: no-repeat;
background-size: 14px;
height: 16px;
width: 16px;
float: inline-start;
margin-top: 2px;
margin-inline-end: 2px;
}
#onboarding-notification-tour-icon {
@ -491,18 +512,23 @@
}
#onboarding-notification-action-btn {
background: #0a84ff;
/* With 1px transparent border, could see a border in the high-constrast mode */
border: 1px solid transparent;
border-radius: 0;
background: #fbfbfb;
/* With 1px border, could see a border in the high-constrast mode */
border: 1px solid #c1c1c1;
border-radius: 2px;
padding: 10px 20px;
font-size: 14px;
color: #fff;
font-weight: 600;
line-height: 16px;
color: #202340;
min-width: 130px;
}
@media all and (max-width: 720px) {
#onboarding-notification-body {
width: 340px;
}
#onboarding-notification-action-btn:hover {
background-color: #ebebeb;
cursor: pointer;
}
#onboarding-notification-action-btn:active {
background-color: #dadada;
}

View File

@ -1078,27 +1078,26 @@ class Onboarding {
}
// Load onboarding module only when we enable it.
if (Services.prefs.getBoolPref("browser.onboarding.enabled", false) &&
!Services.prefs.getBoolPref("browser.onboarding.hidden", false)) {
if (Services.prefs.getBoolPref("browser.onboarding.enabled", false)) {
addEventListener("load", function onLoad(evt) {
if (!content || evt.target != content.document) {
return;
}
removeEventListener("load", onLoad);
let window = evt.target.defaultView;
let location = window.location.href;
if (location == ABOUT_NEWTAB_URL || location == ABOUT_HOME_URL) {
// We just want to run tests as quick as possible
// so in the automation test, we don't do `requestIdleCallback`.
if (Cu.isInAutomation) {
new Onboarding(window);
return;
if (!Services.prefs.getBoolPref("browser.onboarding.hidden", false)) {
let window = evt.target.defaultView;
let location = window.location.href;
if (location == ABOUT_NEWTAB_URL || location == ABOUT_HOME_URL) {
// We just want to run tests as quick as possible
// so in the automation test, we don't do `requestIdleCallback`.
if (Cu.isInAutomation) {
new Onboarding(window);
return;
}
window.requestIdleCallback(() => {
new Onboarding(window);
});
}
window.requestIdleCallback(() => {
new Onboarding(window);
});
}
}, true);
}

View File

@ -35,9 +35,11 @@ add_task(async function test_hide_onboarding_tours() {
tabs.push(tab);
}
let doc = content.document;
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-hidden-checkbox", {}, gBrowser.selectedBrowser);
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-close-btn", {}, gBrowser.selectedBrowser);
await Promise.all(expectedPrefUpdates);
ok(!doc.getElementById("onboarding-overlay-button"));
for (let i = tabs.length - 1; i >= 0; --i) {
let tab = tabs[i];
@ -45,3 +47,38 @@ add_task(async function test_hide_onboarding_tours() {
await BrowserTestUtils.removeTab(tab);
}
});
add_task(async function test_refresh_onboarding_tours_after_hide() {
resetOnboardingDefaultState();
let tourIds = TOUR_IDs;
let expectedPrefUpdates = [
promisePrefUpdated("browser.onboarding.hidden", true),
promisePrefUpdated("browser.onboarding.notification.finished", true)
];
tourIds.forEach((id, idx) => expectedPrefUpdates.push(promisePrefUpdated(`browser.onboarding.tour.${id}.completed`, true)));
let tabs = [];
for (let url of URLs) {
let tab = await openTab(url);
await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-button", {}, tab.linkedBrowser);
await promiseOnboardingOverlayOpened(tab.linkedBrowser);
tabs.push(tab);
}
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-tour-hidden-checkbox", {}, gBrowser.selectedBrowser);
await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-close-btn", {}, gBrowser.selectedBrowser);
await Promise.all(expectedPrefUpdates);
ok(!content.document.getElementById("onboarding-overlay-button"), "should not show fox icon");
for (let i = tabs.length - 1; i >= 0; --i) {
let tab = tabs[i];
await reloadTab(tab);
await waitUntilWindowIdle(tab.linkedBrowser);
ok(!content.document.getElementById("onboarding-overlay-button"), "should not show fox icon after refresh");
await assertOnboardingDestroyed(tab.linkedBrowser);
await BrowserTestUtils.removeTab(tab);
}
});

View File

@ -11,12 +11,18 @@ const { interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager",
"resource://gre/modules/AddonManager.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
"resource://gre/modules/AppConstants.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Console",
"resource://gre/modules/Console.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
"resource:///modules/CustomizableUI.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "LegacyExtensionsUtils",
"resource://gre/modules/LegacyExtensionsUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PageActions",
"resource:///modules/PageActions.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
let addonResourceURI;
let appStartupDone;
@ -59,7 +65,63 @@ const appStartupObserver = {
}
}
const LibraryButton = {
ITEM_ID: "appMenu-library-screenshots",
init(webExtension) {
this._initialized = true;
let permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
if (permissionPages.length > 1) {
Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
}
this.PAGE_TO_OPEN = permissionPages.length == 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
this.PAGE_TO_OPEN += "shots";
this.ICON_URL = webExtension.extension.getURL("icons/icon-16-v2.svg");
this.ICON_URL_2X = webExtension.extension.getURL("icons/icon-32-v2.svg");
this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
CustomizableUI.addListener(this);
for (let win of CustomizableUI.windows) {
this.onWindowOpened(win);
}
},
uninit() {
if (!this._initialized) {
return;
}
for (let win of CustomizableUI.windows) {
let item = win.document.getElementById(this.ITEM_ID);
if (item) {
item.remove();
}
}
CustomizableUI.removeListener(this);
this._initialized = false;
},
onWindowOpened(win) {
let libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
// If the library view doesn't exist (on non-photon builds, for instance),
// this will be null, and we bail out early.
if (!libraryViewInsertionPoint) {
return;
}
let parent = libraryViewInsertionPoint.parentNode;
let {nextSibling} = libraryViewInsertionPoint;
let item = win.document.createElement("toolbarbutton");
item.className = "subviewbutton subviewbutton-iconic";
item.addEventListener("command", () => win.openUILinkIn(this.PAGE_TO_OPEN, "tab"));
item.id = this.ITEM_ID;
let iconURL = win.devicePixelRatio >= 1.1 ? this.ICON_URL_2X : this.ICON_URL;
item.setAttribute("image", iconURL);
item.setAttribute("label", this.LABEL);
parent.insertBefore(item, nextSibling);
},
};
const APP_STARTUP = 1;
const APP_SHUTDOWN = 2;
let startupReason;
function startup(data, reason) { // eslint-disable-line no-unused-vars
@ -118,7 +180,8 @@ function handleStartup() {
function start(webExtension) {
return webExtension.startup(startupReason).then((api) => {
api.browser.runtime.onMessage.addListener(handleMessage);
return Promise.resolve(null);
LibraryButton.init(webExtension);
initPhotonPageAction(api, webExtension);
}).catch((err) => {
// The startup() promise will be rejected if the webExtension was
// already started (a harmless error), or if initializing the
@ -131,6 +194,13 @@ function start(webExtension) {
}
function stop(webExtension, reason) {
if (reason != APP_SHUTDOWN) {
LibraryButton.uninit();
if (photonPageAction) {
photonPageAction.remove();
photonPageAction = null;
}
}
return Promise.resolve(webExtension.shutdown(reason));
}
@ -156,3 +226,84 @@ function handleMessage(msg, sender, sendReply) {
return true;
}
}
let photonPageAction;
// If the current Firefox version supports Photon (57 and later), this sets up
// a Photon page action and removes the UI for the WebExtension browser action.
// Does nothing otherwise. Ideally, in the future, WebExtension page actions
// and Photon page actions would be one in the same, but they aren't right now.
function initPhotonPageAction(api, webExtension) {
// The MOZ_PHOTON_THEME ifdef got removed, but we need to support 55 and 56 as well,
// so check if the property exists *and* is false before bailing.
if (typeof AppConstants.MOZ_PHOTON_THEME != "undefined" && !AppConstants.MOZ_PHOTON_THEME) {
// Photon not supported. Use the WebExtension's browser action.
return;
}
let id = "screenshots";
let port = null;
let baseIconPath = addonResourceURI.spec + "webextension/";
let {tabManager} = webExtension.extension;
// Make the page action.
photonPageAction = PageActions.actionForID(id) || PageActions.addAction(new PageActions.Action({
id,
title: "Take a Screenshot",
iconURL: baseIconPath + "icons/icon-32-v2.svg",
_insertBeforeActionID: null,
onCommand(event, buttonNode) {
if (port) {
let browserWin = buttonNode.ownerGlobal;
let tab = tabManager.getWrapper(browserWin.gBrowser.selectedTab);
port.postMessage({
type: "click",
tab: {id: tab.id, url: tab.url}
});
}
},
}));
// Remove the navbar button of the WebExtension's browser action.
let cuiWidgetID = "screenshots_mozilla_org-browser-action";
CustomizableUI.addListener({
onWidgetAfterCreation(wid, aArea) {
if (wid == cuiWidgetID) {
CustomizableUI.destroyWidget(cuiWidgetID);
CustomizableUI.removeListener(this);
}
},
});
// Establish a port to the WebExtension side.
api.browser.runtime.onConnect.addListener((listenerPort) => {
if (listenerPort.name != "photonPageActionPort") {
return;
}
port = listenerPort;
port.onMessage.addListener((message) => {
switch (message.type) {
case "setProperties":
if (message.title) {
photonPageAction.title = message.title;
}
if (message.iconPath) {
photonPageAction.iconURL = baseIconPath + message.iconPath;
}
break;
default:
console.error("Unrecognized message:", message);
break;
}
});
// It's necessary to tell the WebExtension not to use its browser action,
// due to the CUI widget's removal. Otherwise Firefox's WebExtension
// machinery throws exceptions.
port.postMessage({
type: "setUsePhotonPageAction",
value: true
});
});
}

View File

@ -12,9 +12,9 @@
</Description>
</em:targetApplication>
<em:type>2</em:type>
<em:version>10.12.0</em:version>
<em:version>16.1.0</em:version>
<em:bootstrap>true</em:bootstrap>
<em:homepageURL>https://pageshot.net/</em:homepageURL>
<em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
</Description>
</RDF>

View File

@ -36,6 +36,10 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales
'webextension/_locales/ar/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ast"] += [
'webextension/_locales/ast/messages.json'
]
FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["az"] += [
'webextension/_locales/az/messages.json'
]
@ -363,6 +367,7 @@ FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["icons"]
'webextension/icons/icon-starred-32-v2.svg',
'webextension/icons/icon-welcome-face-without-eyes.svg',
'webextension/icons/menu-fullpage.svg',
'webextension/icons/menu-myshot-white.svg',
'webextension/icons/menu-myshot.svg',
'webextension/icons/menu-visible.svg',
'webextension/icons/onboarding-1.png',

View File

@ -13,9 +13,13 @@ add_task(async function() {
await promiseScreenshotsReset();
});
let onPhoton = (typeof AppConstants.MOZ_PHOTON_THEME == "undefined") ||
AppConstants.MOZ_PHOTON_THEME;
let id = onPhoton ? "pageAction-panel-screenshots" : "screenshots_mozilla_org-browser-action";
await BrowserTestUtils.waitForCondition(
() => document.getElementById("screenshots_mozilla_org-browser-action"),
() => document.getElementById(id),
"Screenshots button should be present", 100, 100);
checkElements(true, ["screenshots_mozilla_org-browser-action"]);
checkElements(true, [id]);
});

View File

@ -1,3 +1,5 @@
/* globals PageActions */
// Currently Screenshots is disabled in tests. We want these tests to work under
// either case that Screenshots is disabled or enabled on startup of the browser,
// and that at the end we're reset to the correct state.
@ -13,16 +15,27 @@ function promiseScreenshotsEnabled() {
}
info("Screenshots is not enabled");
return new Promise((resolve, reject) => {
let listener = {
onWidgetAfterCreation(widgetid) {
if (widgetid == "screenshots_mozilla_org-browser-action") {
info("screenshots_mozilla_org-browser-action button created");
CustomizableUI.removeListener(listener);
resolve(false);
if (AppConstants.hasOwnProperty("MOZ_PHOTON_THEME") && !AppConstants.MOZ_PHOTON_THEME) {
let listener = {
onWidgetAfterCreation(widgetid) {
if (widgetid == "screenshots_mozilla_org-browser-action") {
info("screenshots_mozilla_org-browser-action button created");
CustomizableUI.removeListener(listener);
resolve(false);
}
}
}
CustomizableUI.addListener(listener);
} else {
let interval = setInterval(() => {
let action = PageActions.actionForID("screenshots");
if (action) {
info("screenshots page action created");
clearInterval(interval);
resolve(false);
}
}, 100);
}
CustomizableUI.addListener(listener);
info("Set Screenshots disabled pref to false.");
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", false);
});
@ -34,16 +47,27 @@ function promiseScreenshotsDisabled() {
return Promise.resolve(true);
}
return new Promise((resolve, reject) => {
let listener = {
onWidgetDestroyed(widgetid) {
if (widgetid == "screenshots_mozilla_org-browser-action") {
CustomizableUI.removeListener(listener);
info("screenshots_mozilla_org-browser-action destroyed");
resolve(false);
if (AppConstants.hasOwnProperty("MOZ_PHOTON_THEME") && !AppConstants.MOZ_PHOTON_THEME) {
let listener = {
onWidgetDestroyed(widgetid) {
if (widgetid == "screenshots_mozilla_org-browser-action") {
CustomizableUI.removeListener(listener);
info("screenshots_mozilla_org-browser-action destroyed");
resolve(false);
}
}
}
CustomizableUI.addListener(listener);
} else {
let interval = setInterval(() => {
let action = PageActions.actionForID("screenshots");
if (!action) {
info("screenshots page action removed");
clearInterval(interval);
resolve(false);
}
}, 100);
}
CustomizableUI.addListener(listener);
info("Set Screenshots disabled pref to true.");
Services.prefs.setBoolPref("extensions.screenshots.system-disabled", true);
});

View File

@ -106,8 +106,8 @@
"tourDone": {
"message": "Otum"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Tic ki Firefox Screenshots nyuto, ni i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ me tic me Cloud pa Firefox.",
"termsAndPrivacyNotice2": {
"message": "Tic ki Firefox Screenshots nyuto ni, i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ wa.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "تمّ"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "استخدامك لخدمات «لقطات شاشة فَيَرفُكس» يعني موافقتك على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "استخدامك للقطات شاشة فَيَرفُكس يُعد موافقة على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "تنويه الخصوصية"
},
"libraryLabel": {
"message": "لقطات الشاشة"
}
}

View File

@ -0,0 +1,32 @@
{
"addonAuthorsList": {
"message": "Mozilla <screenshots-feedback@mozilla.com>"
},
"saveScreenshotSelectedArea": {
"message": "Guardar"
},
"saveScreenshotVisibleArea": {
"message": "Guardar lo visible"
},
"saveScreenshotFullPage": {
"message": "Guardar la páxina completa"
},
"cancelScreenshot": {
"message": "Encaboxar"
},
"downloadScreenshot": {
"message": "Baxar"
},
"notificationLinkCopiedTitle": {
"message": "Copióse l'enllaz"
},
"unshootablePageErrorTitle": {
"message": "Nun pue capturase esta páxina."
},
"unshootablePageErrorDetails": {
"message": "Esta páxina web nun ye estándar, asina que nun pues capturala."
},
"tourDone": {
"message": "Fecho"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Tamamlandı"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Məxfilik Bildirişi"
},
"libraryLabel": {
"message": "Ekran Görüntüləri"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Гатова"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з нашымі $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Паведамленнем аб прыватнасці"
},
"libraryLabel": {
"message": "Скрыншоты"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ на облачните услуги на Firefox.",
"termsAndPrivacyNotice2": {
"message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Политиката на поверителност"
},
"libraryLabel": {
"message": "Снимки"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "সম্পন্ন"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots ব্যবহারে, আপনি Firefox Cloud Services এর $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots ব্যবহারের জন্য, আপনি আমাদের $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "গোপনীয়তা নীতি"
},
"libraryLabel": {
"message": "স্ক্রীনশট"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Fet"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "avís de privadesa"
},
"libraryLabel": {
"message": "Captures de pantalla"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Xb'an"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Rutzijol Ichinanem"
},
"libraryLabel": {
"message": "Chapoj taq wachib'äl"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotovo"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Používáním služby Firefox Screenshots souhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Používáním služby Firefox Screenshots souhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zásadami ochrany osobních údajů"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Gorffen"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i'n $TERMSANDPRIVACYNOTICETERMSLINK$ a'n $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Hysbysiad Preifatrwydd"
},
"libraryLabel": {
"message": "Rhannu ar Pinterest"
}
}

View File

@ -33,7 +33,7 @@
"message": "Link kopieret"
},
"notificationLinkCopiedDetails": {
"message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind.",
"message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind. ",
"placeholders": {
"meta_key": {
"content": "$1"
@ -50,16 +50,16 @@
"message": "Vi kan ikke oprette forbindelse til dine skærmbilleder."
},
"connectionErrorDetails": {
"message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots."
"message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots. "
},
"loginErrorDetails": {
"message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere."
"message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere. "
},
"unshootablePageErrorTitle": {
"message": "Vi kan ikke tage et skærmbillede af denne side."
"message": "Vi kan ikke tage et skærmbillede af denne side. "
},
"unshootablePageErrorDetails": {
"message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den."
"message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
},
"selfScreenshotErrorTitle": {
"message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
@ -80,7 +80,7 @@
"message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
},
"tourBodyOne": {
"message": "Tag, gem og del skærmbilleder uden at forlade Firefox."
"message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
},
"tourHeaderTwo": {
"message": "Gem lige hvad du vil."
@ -112,8 +112,8 @@
"tourDone": {
"message": "Færdig"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Ved at anvende Firefox Screenshots godkender du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Ved at anvende Firefox Screenshots godkender du vores $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "privatlivspolitik"
},
"libraryLabel": {
"message": "Skærmbilleder"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Fertig"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Durch die Verwendung von Firefox Screenshots stimmen Sie den $TERMSANDPRIVACYNOTICETERMSLINK$ und dem $TERMSANDPRIVACYNOTICEPRIVACYLINK$ von Firefox Cloud Services zu.",
"termsAndPrivacyNotice2": {
"message": "Durch die Verwendung von Firefox Screenshots stimmen Sie unseren $TERMSANDPRIVACYNOTICETERMSLINK$ und $TERMSANDPRIVACYNOTICEPRIVACYLINK$ zu.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Datenschutzhinweis"
},
"libraryLabel": {
"message": "Bildschirmfotos"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Gótowo"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do našych $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Powěźeńka priwatnosći"
},
"libraryLabel": {
"message": "Fota wobrazowki"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Τέλος"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$ των Υπηρεσιών Cloud του Firefox.",
"termsAndPrivacyNotice2": {
"message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Σημείωση απορρήτου"
},
"libraryLabel": {
"message": "Στιγμιότυπα"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Done"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacy Notice"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Farita"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Se vi uzas Firefox Screenshots, vi akceptas nian $TERMSANDPRIVACYNOTICETERMSLINK$ kaj $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "rimarkon pri privateco"
},
"libraryLabel": {
"message": "Ekrankopioj"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Listo"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de los servicios en la nube de Firefox.",
"termsAndPrivacyNotice2": {
"message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Nota de privacidad"
},
"libraryLabel": {
"message": "Capturas"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Hecho"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Al usar Firefox Screenshots, aceptas nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
},
"libraryLabel": {
"message": "Capturas de pantalla"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Hecho"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Al usar Firefox Screenshots, aceptas los $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Terminado"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Al usar Firefox Screenshots, estás de acuerdo con los servicios de Firefox Cloud $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidad"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Valmis"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots kasutamisel nõustud Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots'i kasutades nõustud meie $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "انجام شد"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "با استفاده از سرویس تصاویرِ صفحه فایرفاکس، شما با شرایط سرویس‌های ابری فایرفاکس $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
"termsAndPrivacyNotice2": {
"message": "با استفاده از سرویس تصاویر صفحه فایرفاکس، شما با $TERMSANDPRIVACYNOTICETERMSLINK$ ما و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "نکات حریم‌خصوصی"
},
"libraryLabel": {
"message": "تصاویر صفحه"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Valmis"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Käyttämällä Firefox Screenshots ominaisuutta hyväksyt Firefoxin pilvipalveluiden $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Käyttämällä Firefox Screenshots -ominaisuutta hyväksyt meidän $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "tietosuojakäytännön"
},
"libraryLabel": {
"message": "Kuvakaappaukset"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Terminé"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "En utilisant Firefox Screenshots, vous acceptez les $TERMSANDPRIVACYNOTICETERMSLINK$ et la $TERMSANDPRIVACYNOTICEPRIVACYLINK$ des services en ligne de Firefox.",
"termsAndPrivacyNotice2": {
"message": "En utilisant Firefox Screenshots, vous acceptez nos $TERMSANDPRIVACYNOTICETERMSLINK$ et notre $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "politique de confidentialité"
},
"libraryLabel": {
"message": "Captures décran"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Dien"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Troch Firefox Screenshots te brûken, geane jo akkoard mei de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ fan Firefox-cloudtsjinsten.",
"termsAndPrivacyNotice2": {
"message": "Troch Firefox Screenshots te brûken, gean jo akkoard mei ús $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacyferklearring"
},
"libraryLabel": {
"message": "Skermôfbyldingen"
}
}

View File

@ -107,7 +107,15 @@
"message": "Críochnaithe"
},
"termsAndPrivacyNotice2": {
"message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na {termsAndPrivacyNoticeTermsLink} agus leis an {termsAndPrivacyNoticePrivacyLink}."
"message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na $TERMSANDPRIVACYNOTICETERMSLINK$ agus leis an $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Téarmaí"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "થઈ ગયું"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox સ્ક્રીનશોટ્સ વાપરીને, તમે Firefox Cloud સેવાઓ સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Firefox સ્ક્રિનશોટનો ઉપયોગ કરીને, તમે અમારી સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "ખાનગી સૂચના"
},
"libraryLabel": {
"message": "સ્ક્રીનશૉટ્સ"
}
}

View File

@ -107,15 +107,7 @@
"message": "סיום"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox $TERMSANDPRIVACYNOTICETERMSLINK$ ו$TERMSANDPRIVACYNOTICEPRIVACYLINK$ מוסכמים עליך.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
"message": "מעצם השימוש ב־Firefox Screenshots הכללים של שירותי הענן של Firefox {termsAndPrivacyNoticeTermsLink} ו{termsAndPrivacyNoticePrivacyLink} מוסכמים עליך."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "תנאים"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "पूर्ण"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox स्क्रीनशॉट का उपयोग करके, आप Firefox क्लाउड सेवाओं $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ के लिए सहमत हैं.",
"termsAndPrivacyNotice2": {
"message": "Firefox स्क्रीनशॉट्स का उपयोग करके, आप हमारी $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ से सहमत हैं.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "गोपनीयता सूचना"
},
"libraryLabel": {
"message": "स्क्रीनशॉट"
}
}

View File

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "Vaš odabir je premalen"
},
"privateWindowErrorTitle": {
"message": "Snimke ekrana su onemogućene u načinu privatnog pretraživanja"
},
"privateWindowErrorDetails": {
"message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
},
"genericErrorTitle": {
"message": "Uf! Firefox Screenshots se zbrkao."
},
@ -106,10 +112,24 @@
"tourDone": {
"message": "Gotovo"
},
"termsAndPrivacyNotice2": {
"message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Uvjeti"
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Pravila o privatnosti"
},
"libraryLabel": {
"message": "Snimke ekrana"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotowo"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Přez wužiwanje Firefox ScreenShots, zwoliće do $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Přez wužiwanje Firefox ScreenShots, zwoliće do našich $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Pokaz priwatnosće"
},
"libraryLabel": {
"message": "Fota wobrazowki"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Kész"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "A Firefox képernyőképek használatával beleegyezik a Firefox felhőszolgáltatások $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "A Firefox képernyőképek használatával, Ön beleegyezik a $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Adatvédelmi nyilatkozatba"
},
"libraryLabel": {
"message": "Képernyőképek"
}
}

View File

@ -106,8 +106,8 @@
"tourDone": {
"message": "Պատրաստ է"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Օգտագործելով Firefox Screenshots-ը՝ դուք ընդունում եք Firefox Cloud ծառայությունների $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots-ը օգտագործելով՝ դուք ընդունեւմ եք $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Selesai"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kami.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Kebijakan Privasi"
},
"libraryLabel": {
"message": "Tangkapan Layar"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Fine"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l$TERMSANDPRIVACYNOTICEPRIVACYLINK$ di Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l$TERMSANDPRIVACYNOTICEPRIVACYLINK$ del servizio.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "informativa sulla privacy"
},
"libraryLabel": {
"message": "Screenshot"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "完了"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots を使うことで、あなたは Firefox Cloud Services の $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots を使うことで、あなたは $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "プライバシー通知"
},
"libraryLabel": {
"message": "スクリーンショット"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "მზადაა"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots-ის გამოყენებით, თქვენ ეთანხმებით $TERMSANDPRIVACYNOTICETERMSLINK$ და $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "პირადი მონაცემების შესახებ განცხადებას"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Immed"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "S useqdec n Firefox Screenshots, ad tqebleḍ tiwuriwin n usigna Firefox $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "S useqdec Firefox Screenshots, ad tqebleḍ $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Tasertit n tbaḍnit"
},
"libraryLabel": {
"message": "Tuṭṭfiwin n ugdil"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Дайын"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox скриншоттарын қолдану арқылы, сіз Firefox бұлттық қызметтерінің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
"termsAndPrivacyNotice2": {
"message": "Firefox скриншоттарын қолдану арқылы, сіз біздің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "완료"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots을 사용함으로써, Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots을 사용함으로써, $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "개인 정보 취급 방침"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -104,15 +104,7 @@
"message": "Fæto"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ de Firefox Cloud Services.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
"message": "Se ti deuvi Firefox Screenshots, ti e d'acordio con {termsAndPrivacyNoticeTermsLink} e {termsAndPrivacyNoticePrivacyLink} de Firefox Cloud Services."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Termini"

View File

@ -106,8 +106,8 @@
"tourDone": {
"message": "ສຳເລັດ"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "ການນຳໃຊ້ Firefox Screenshots ແມ່ນທ່ານໄດ້ຍອມຮັບເງືອນໄຂການໃຫ້ບໍລິການຂອງ Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "ເພື່ອນຳໃຊ້ Firefox Screenshots ທ່ານໄດ້ຍອມຮັບ $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ຂອງພວກເຮົາ.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Baigta"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Naudodami „Firefox Screenshots“ sutinkate su „Firefox“ tinklo paslaugų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Naudodamiesi „Firefox“ ekrano nuotraukomis, sutinkate su mūsų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "privatumo nuostatais"
},
"libraryLabel": {
"message": "Ekrano nuotraukos"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "Готово"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Со користење на Firefox Screenshots, се согласувате со нашите $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Известување за приватност"
},
"libraryLabel": {
"message": "Слики од екран"
}
}

View File

@ -112,7 +112,7 @@
"tourDone": {
"message": "झाले"
},
"termsAndPrivacyNoticeCloudServices": {
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots वापरून, आपण आमच्या $TERMSANDPRIVACYNOTICETERMSLINK$आणि $TERMSANDPRIVACYNOTICEPRIVACYLINK$ शी सहमत आहात.",
"placeholders": {
"termsandprivacynoticetermslink": {
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "गोपनीयता सूचना"
},
"libraryLabel": {
"message": "स्क्रीनशॉट"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Selesai"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Dengan menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Apabila menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Notis Privasi"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Ferdig"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Ved å bruke Firefox Screenshots, godtar du vår $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "personvernbestemmelser"
},
"libraryLabel": {
"message": "Skjermbilder"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Gereed"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met de $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$ van Firefox-cloudservices.",
"termsAndPrivacyNotice2": {
"message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met onze $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Privacyverklaring"
},
"libraryLabel": {
"message": "Schermafbeeldingen"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Ferdig"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Ved å bruke Firefox Screenshots, godtar du $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$ for Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Ved å bruke Firefox Screenshots, seier du deg samd i $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Personvernmerknad"
},
"libraryLabel": {
"message": "Skjermbilde"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Zamknij"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$ usług Firefox Cloud.",
"termsAndPrivacyNotice2": {
"message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zasady ochrony prywatności"
},
"libraryLabel": {
"message": "Zrzuty ekranu"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Concluído"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Usando o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ dos serviços na nuvem do Firefox.",
"termsAndPrivacyNotice2": {
"message": "Ao usar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Política de privacidade"
},
"libraryLabel": {
"message": "Screenshots"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Feito"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Ao utilizar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$ do Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Ao utilizar o Firefox Screenshots, concorda com os nossos $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Aviso de privacidade"
},
"libraryLabel": {
"message": "Capturas de ecrã"
}
}

View File

@ -67,6 +67,12 @@
"emptySelectionErrorTitle": {
"message": "La zona selecziunada è memia pitschna"
},
"privateWindowErrorTitle": {
"message": "Screenshots è deactivà en il modus privat"
},
"privateWindowErrorDetails": {
"message": "Perstgisa las malempernaivladads. Nus furnin questa funcziun en ina da las proximas versiuns."
},
"genericErrorTitle": {
"message": "Oh dieu! Firefox Screenshots ha il singlut."
},
@ -106,8 +112,8 @@
"tourDone": {
"message": "Finì"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Cun utilisar Firefox Screenshots accepteschas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$ da Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Cun utilisar Firefox Screenshots acceptas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -122,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "la decleraziun da protecziun da datas"
},
"libraryLabel": {
"message": "Maletgs dal visur"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Используя Скриншоты Firefox, вы соглашаетесь с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$ облачных сервисов Firefox.",
"termsAndPrivacyNotice2": {
"message": "Используя Firefox Screenshots, вы соглашаетесь с нашими $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Уведомлением о приватности"
},
"libraryLabel": {
"message": "Скриншоты"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Hotovo"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Používaním služby Firefox Screenshots súhlasíte s $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Cloud Services.",
"termsAndPrivacyNotice2": {
"message": "Používaním služby Firefox Screenshots súhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "zásadami ochrany súkromia"
},
"libraryLabel": {
"message": "Snímky obrazovky"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Končano"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Z uporabo Firefox Screenshots se strinjate s $TERMSANDPRIVACYNOTICETERMSLINK$ Firefoxovih storitev v oblaku in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Z uporabo razširitve Firefox Screenshots se strinjate z našimi $TERMSANDPRIVACYNOTICETERMSLINK$ in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "obvestilom o zasebnosti"
},
"libraryLabel": {
"message": "Posnetki zaslona"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Коришћењем Firefox Screenshots-а, прихватате Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Коришћењем Firefox Screenshots прихватате наше $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Färdig"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$ för Firefox molntjänster.",
"termsAndPrivacyNotice2": {
"message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Sekretesspolicy"
},
"libraryLabel": {
"message": "Skärmbilder"
}
}

View File

@ -74,7 +74,7 @@
"message": "சிரமத்திற்கு வருந்துகிறோம். எதிர்கால வெளியீடுகளில் நாங்கள் இந்த வசதியைச் செய்து தருகிறோம்."
},
"genericErrorTitle": {
"message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது."
"message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
},
"genericErrorDetails": {
"message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
@ -112,8 +112,8 @@
"tourDone": {
"message": "முடிந்தது"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "பயர்பாஃசு திரைப்பிடிப்பைப் பயன்படுத்துவதன் மூலம் எங்களின் முகில் கணிமச் சேவைகளுக்கான பின்வரும் $TERMSANDPRIVACYNOTICETERMSLINK$ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ நிபந்தனைகளை ஏற்றுக் கொள்கிறீர்கள்.",
"termsAndPrivacyNotice2": {
"message": "பயர்பாஃசு திரைப்பிடிப்புகளைப் பயன்படுத்துவதன் மூலம் $TERMSANDPRIVACYNOTICETERMSLINK$ மற்றும் $TERMSANDPRIVACYNOTICEPRIVACYLINK$ சேவை நிபற்தனைகளை ஏற்கிறீர்கள்.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "தனியுரிம கொள்கை"
},
"libraryLabel": {
"message": "திரைபிடிப்புகள்"
}
}

View File

@ -76,5 +76,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "గోప్యతా నోటీసు"
},
"libraryLabel": {
"message": "తెరపట్లు"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "เสร็จสิ้น"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของบริการกลุ่มเมฆ Firefox",
"termsAndPrivacyNotice2": {
"message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของเรา",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "ประกาศความเป็นส่วนตัว"
},
"libraryLabel": {
"message": "ภาพหน้าจอ"
}
}

View File

@ -104,15 +104,7 @@
"message": "Tapos"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services $TERMSANDPRIVACYNOTICETERMSLINK$ at $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
"message": "Sa paggamit ng Firefox Screenshots, tinatanggap mo ang Firefox Cloud Services {termsAndPrivacyNoticeTermsLink} at {termsAndPrivacyNoticePrivacyLink}."
},
"termsAndPrivacyNoticeTermsLink": {
"message": "Mga tuntunin"

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Tamam"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Firefox Screenshots'ı kullandığınızda Firefox Bulut Hizmetleri'nin $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
"termsAndPrivacyNotice2": {
"message": "Firefox Screenshots'ı kullandığınızda $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Gizlilik Bildirimimizi"
},
"libraryLabel": {
"message": "Ekran görüntüleri"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "Готово"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з умовами хмарних послуг Firefox: $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"termsAndPrivacyNotice2": {
"message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з нашими $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Повідомленням про приватність"
},
"libraryLabel": {
"message": "Знімки екрану"
}
}

View File

@ -106,17 +106,6 @@
"tourDone": {
"message": "ہوگیا"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "۔Firefox Screenshots کے استعمال کے ساتھ آپ Firefox Cloud Services کے $TERMSANDPRIVACYNOTICETERMSLINK$ اور $TERMSANDPRIVACYNOTICEPRIVACYLINK$ کے ساتھ متفق ہیں۔",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
},
"termsandprivacynoticeprivacylink": {
"content": "$2"
}
}
},
"termsAndPrivacyNoticeTermsLink": {
"message": "شرائط"
},

View File

@ -46,5 +46,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "Chính sách riêng tư"
},
"libraryLabel": {
"message": "Các ảnh chụp màn hình"
}
}

View File

@ -12,7 +12,7 @@
"message": "我的截图"
},
"screenshotInstructions": {
"message": "在上拖拽或单击即可选择截图区域。按 ESC 键取消。"
"message": "在页上拖拽或单击选择截图区域。按 ESC 键取消截图。"
},
"saveScreenshotSelectedArea": {
"message": "保存"
@ -112,8 +112,8 @@
"tourDone": {
"message": "完成"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "使用 Firefox Screenshots 即代表您同意 Firefox 云服务的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"termsAndPrivacyNotice2": {
"message": "使用 Firefox Screenshots 即代表您同意我们的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "隐私声明"
},
"libraryLabel": {
"message": "屏幕截图"
}
}

View File

@ -112,8 +112,8 @@
"tourDone": {
"message": "完成"
},
"termsAndPrivacyNoticeCloudServices": {
"message": "繼續使用 Firefox Screenshots代表您同意 Firefox 雲端服務的 $TERMSANDPRIVACYNOTICETERMSLINK$ 以及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"termsAndPrivacyNotice2": {
"message": "使用 Firefox Screenshots 時,代表您同意我們的 $TERMSANDPRIVACYNOTICETERMSLINK$ 及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
"placeholders": {
"termsandprivacynoticetermslink": {
"content": "$1"
@ -128,5 +128,8 @@
},
"termsAndPrivacyNoticyPrivacyLink": {
"message": "隱私權保護政策"
},
"libraryLabel": {
"message": "擷圖"
}
}

Some files were not shown because too many files have changed in this diff Show More