Bug 1529755 - Add Hero caps, remove maps and bug fixes to Activity Stream r=k88hudson

Differential Revision: https://phabricator.services.mozilla.com/D20740

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Ed Lee 2019-02-21 22:30:21 +00:00
parent a3eeb28e26
commit fcebe2960f
48 changed files with 547 additions and 488 deletions

View File

@ -47,7 +47,6 @@ for (const type of [
"DISCOVERY_STREAM_LAYOUT_RESET",
"DISCOVERY_STREAM_LAYOUT_UPDATE",
"DISCOVERY_STREAM_OPT_OUT",
"DISCOVERY_STREAM_REC_IMPRESSION",
"DISCOVERY_STREAM_SPOCS_ENDPOINT",
"DISCOVERY_STREAM_SPOCS_UPDATE",
"DISCOVERY_STREAM_SPOC_IMPRESSION",

View File

@ -43,6 +43,7 @@ export class Hero extends React.PureComponent {
// Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.
let cards = otherRecs.map((rec, index) => (
<DSCard
campaignId={rec.campaign_id}
key={`dscard-${index}`}
image_src={rec.image_src}
title={rec.title}

View File

@ -3365,5 +3365,3 @@ a.firstrun-link {
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-linux.css.map */

File diff suppressed because one or more lines are too long

View File

@ -3368,5 +3368,3 @@ a.firstrun-link {
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-mac.css.map */

File diff suppressed because one or more lines are too long

View File

@ -3365,5 +3365,3 @@ a.firstrun-link {
100% {
opacity: 1;
transform: translateY(0); } }
/*# sourceMappingURL=activity-stream-windows.css.map */

File diff suppressed because one or more lines are too long

View File

@ -211,7 +211,7 @@ const globalImportContext = typeof Window === "undefined" ? BACKGROUND_PROCESS :
// }
const actionTypes = {};
for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_IMPRESSION_STATS", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_OPT_OUT", "DISCOVERY_STREAM_REC_IMPRESSION", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_UPDATE", "DISCOVERY_STREAM_SPOC_IMPRESSION", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
for (const type of ["ADDONS_INFO_REQUEST", "ADDONS_INFO_RESPONSE", "ARCHIVE_FROM_POCKET", "AS_ROUTER_INITIALIZED", "AS_ROUTER_PREF_CHANGED", "AS_ROUTER_TELEMETRY_USER_EVENT", "BLOCK_URL", "BOOKMARK_URL", "COPY_DOWNLOAD_LINK", "DELETE_BOOKMARK_BY_ID", "DELETE_FROM_POCKET", "DELETE_HISTORY_URL", "DIALOG_CANCEL", "DIALOG_OPEN", "DISCOVERY_STREAM_CONFIG_CHANGE", "DISCOVERY_STREAM_CONFIG_SETUP", "DISCOVERY_STREAM_CONFIG_SET_VALUE", "DISCOVERY_STREAM_FEEDS_UPDATE", "DISCOVERY_STREAM_IMPRESSION_STATS", "DISCOVERY_STREAM_LAYOUT_RESET", "DISCOVERY_STREAM_LAYOUT_UPDATE", "DISCOVERY_STREAM_OPT_OUT", "DISCOVERY_STREAM_SPOCS_ENDPOINT", "DISCOVERY_STREAM_SPOCS_UPDATE", "DISCOVERY_STREAM_SPOC_IMPRESSION", "DOWNLOAD_CHANGED", "FAKE_FOCUS_SEARCH", "FILL_SEARCH_TERM", "HANDOFF_SEARCH_TO_AWESOMEBAR", "HIDE_SEARCH", "INIT", "MIGRATION_CANCEL", "MIGRATION_COMPLETED", "MIGRATION_START", "NEW_TAB_INIT", "NEW_TAB_INITIAL_STATE", "NEW_TAB_LOAD", "NEW_TAB_REHYDRATED", "NEW_TAB_STATE_REQUEST", "NEW_TAB_UNLOAD", "OPEN_DOWNLOAD_FILE", "OPEN_LINK", "OPEN_NEW_WINDOW", "OPEN_PRIVATE_WINDOW", "OPEN_WEBEXT_SETTINGS", "PAGE_PRERENDERED", "PLACES_BOOKMARK_ADDED", "PLACES_BOOKMARK_REMOVED", "PLACES_HISTORY_CLEARED", "PLACES_LINKS_CHANGED", "PLACES_LINK_BLOCKED", "PLACES_LINK_DELETED", "PLACES_SAVED_TO_POCKET", "POCKET_CTA", "POCKET_LOGGED_IN", "POCKET_WAITING_FOR_SPOC", "PREFS_INITIAL_VALUES", "PREF_CHANGED", "PREVIEW_REQUEST", "PREVIEW_REQUEST_CANCEL", "PREVIEW_RESPONSE", "REMOVE_DOWNLOAD_FILE", "RICH_ICON_MISSING", "SAVE_SESSION_PERF_DATA", "SAVE_TO_POCKET", "SCREENSHOT_UPDATED", "SECTION_DEREGISTER", "SECTION_DISABLE", "SECTION_ENABLE", "SECTION_MOVE", "SECTION_OPTIONS_CHANGED", "SECTION_REGISTER", "SECTION_UPDATE", "SECTION_UPDATE_CARD", "SETTINGS_CLOSE", "SETTINGS_OPEN", "SET_PREF", "SHOW_DOWNLOAD_FILE", "SHOW_FIREFOX_ACCOUNTS", "SHOW_SEARCH", "SKIPPED_SIGNIN", "SNIPPETS_BLOCKLIST_CLEARED", "SNIPPETS_BLOCKLIST_UPDATED", "SNIPPETS_DATA", "SNIPPETS_PREVIEW_MODE", "SNIPPETS_RESET", "SNIPPET_BLOCKED", "SUBMIT_EMAIL", "SYSTEM_TICK", "TELEMETRY_IMPRESSION_STATS", "TELEMETRY_PERFORMANCE_EVENT", "TELEMETRY_UNDESIRED_EVENT", "TELEMETRY_USER_EVENT", "TOP_SITES_CANCEL_EDIT", "TOP_SITES_CLOSE_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_EDIT", "TOP_SITES_INSERT", "TOP_SITES_OPEN_SEARCH_SHORTCUTS_MODAL", "TOP_SITES_PIN", "TOP_SITES_PREFS_UPDATED", "TOP_SITES_UNPIN", "TOP_SITES_UPDATED", "TOTAL_BOOKMARKS_REQUEST", "TOTAL_BOOKMARKS_RESPONSE", "UNINIT", "UPDATE_PINNED_SEARCH_SHORTCUTS", "UPDATE_SEARCH_SHORTCUTS", "UPDATE_SECTION_PREFS", "WEBEXT_CLICK", "WEBEXT_DISMISS"]) {
actionTypes[type] = type;
}
@ -7630,6 +7630,7 @@ class Hero_Hero extends external_React_default.a.PureComponent {
// Note that `{index + 1}` is necessary below for telemetry since we treat heroRec as index 0.
let cards = otherRecs.map((rec, index) => external_React_default.a.createElement(DSCard_DSCard, {
campaignId: rec.campaign_id,
key: `dscard-${index}`,
image_src: rec.image_src,
title: rec.title,
@ -12955,5 +12956,4 @@ TopSiteForm_TopSiteForm.defaultProps = {
};
/***/ })
/******/ ]);
//# sourceMappingURL=activity-stream.bundle.js.map
/******/ ]);

File diff suppressed because one or more lines are too long

View File

@ -81,12 +81,15 @@ mk_add_options MOZ_OBJDIR=./objdir-frontend
into the `browser/components/newtab` directory inside Mozilla Central.
3. Build and run Firefox from the `mozilla-central` directory by running `./mach build && ./mach run`.
## Continuous development
## Continuous development / debugging
Running `npm run startmc` will start a process that watches files in `activity-stream`
and continuously builds/copies changes to `mozilla-central`. You will
still need to rebuild Firefox (`./mach build`) if you change `.jsm` files.
**IMPORTANT NOTE**: This task will add inline source maps to help with debugging, which changes the memory footprint.
Do not use the `startmc` task for profiling or performance testing!
## Unit Tests
Run `npm run testmc` to run the unit tests with karma/mocha. The source code for these

View File

@ -362,6 +362,26 @@ A user event ping includes some basic metadata (tab id, addon version, etc.) as
}
```
#### Pinning a tab
```js
{
"event": "TABPINNED",
"source": "TAB_CONTEXT_MENU",
"value": "{\"total_pinned_tabs\":2}",
// Basic metadata
"action": "activity_stream_user_event",
"client_id": "aabaace5-35f4-7345-a28e-5502147dc93c",
"version": "67.0a1",
"addon_version": "20190218094427",
"locale": "en-US",
"user_prefs": 59,
"page": "n/a",
"session_id": "n/a",
}
```
#### Adding or editing a new TopSite
```js

View File

@ -20,24 +20,12 @@ browser.jar:
res/activity-stream/data/content/assets/ (./data/content/assets/*)
res/activity-stream/data/content/tippytop/ (./data/content/tippytop/*)
res/activity-stream/data/content/activity-stream.bundle.js (./data/content/activity-stream.bundle.js)
#ifndef RELEASE_OR_BETA
res/activity-stream/data/content/activity-stream.bundle.js.map (./data/content/activity-stream.bundle.js.map)
#endif
#ifdef XP_MACOSX
res/activity-stream/css/activity-stream.css (./css/activity-stream-mac.css)
#ifndef RELEASE_OR_BETA
res/activity-stream/css/activity-stream-mac.css.map (./css/activity-stream-mac.css.map)
#endif
#elifdef XP_WIN
res/activity-stream/css/activity-stream.css (./css/activity-stream-windows.css)
#ifndef RELEASE_OR_BETA
res/activity-stream/css/activity-stream-windows.css.map (./css/activity-stream-windows.css.map)
#endif
#else
res/activity-stream/css/activity-stream.css (./css/activity-stream-linux.css)
#ifndef RELEASE_OR_BETA
res/activity-stream/css/activity-stream-linux.css.map (./css/activity-stream-linux.css.map)
#endif
#endif
res/activity-stream/prerendered/static/activity-stream-initial-state.js (./prerendered/static/activity-stream-initial-state.js)
#ifndef RELEASE_OR_BETA

View File

@ -874,6 +874,7 @@ class _ASRouter {
});
this._storage.set("messageBlockList", messageBlockList);
this._storage.set("messageImpressions", messageImpressions);
return {messageBlockList, messageImpressions};
});
}

View File

@ -226,7 +226,7 @@ const PREFS_CONFIG = new Map([
enabled: isEnabled,
show_spocs: geo === "US",
// This is currently an exmple layout used for dev purposes.
layout_endpoint: "https://getpocket.com/v3/newtab/layout?version=1&consumer_key=$apiKey&layout_variant=basic",
layout_endpoint: "https://getpocket.cdn.mozilla.net/v3/newtab/layout?version=1&consumer_key=$apiKey&layout_variant=basic",
});
},
}],

View File

@ -340,9 +340,7 @@ class PageAction {
accessKey: secondaryBtnStrings[0].attributes.accesskey,
callback: () => {
this.dispatchUserAction(secondary[0].action);
this.hide();
this._sendTelemetry({message_id: id, bucket_id: content.bucket_id, event: "DISMISS"});
RecommendationMap.delete(browser);
},
}, {
label: secondaryBtnStrings[1].label,
@ -358,9 +356,7 @@ class PageAction {
accessKey: secondaryBtnStrings[2].attributes.accesskey,
callback: () => {
this.dispatchUserAction(secondary[2].action);
this.hide();
this._sendTelemetry({message_id: id, bucket_id: content.bucket_id, event: "MANAGE"});
RecommendationMap.delete(browser);
},
}];
@ -409,6 +405,11 @@ const CFRPageActions = {
// The browser has a recommendation specified with this host, so show
// the page action
pageAction.show(recommendation);
} else if (recommendation.retain) {
// Keep the recommendation first time the user navigates away just in
// case they will go back to the previous page
pageAction.hide();
recommendation.retain = false;
} else {
// The user has navigated away from the specified host in the given
// browser, so the recommendation is no longer valid and should be removed
@ -451,7 +452,7 @@ const CFRPageActions = {
// If we are forcing via the Admin page, the browser comes in a different format
const win = browser.browser.ownerGlobal;
const {id, content} = recommendation;
RecommendationMap.set(browser.browser, {id, content});
RecommendationMap.set(browser.browser, {id, retain: true, content});
if (!PageActionMap.has(win)) {
PageActionMap.set(win, new PageAction(win, dispatchToASRouter));
}
@ -476,7 +477,7 @@ const CFRPageActions = {
return false;
}
const {id, content} = recommendation;
RecommendationMap.set(browser, {id, host, content});
RecommendationMap.set(browser, {id, host, retain: true, content});
if (!PageActionMap.has(win)) {
PageActionMap.set(win, new PageAction(win, dispatchToASRouter));
}

View File

@ -92,14 +92,14 @@ this.PrefsFeed = class PrefsFeed {
let searchTopSiteExperimentPrefValue = Services.prefs.getBoolPref(
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts");
values["improvesearch.topSiteSearchShortcuts"] = searchTopSiteExperimentPrefValue;
this._prefMap.set("improvesearch.topSiteSearchShortcuts", searchTopSiteExperimentPrefValue);
this._prefMap.set("improvesearch.topSiteSearchShortcuts", {value: searchTopSiteExperimentPrefValue});
// Read the pref for search hand-off from firefox.js and store it
// in our interal list of prefs to watch
let handoffToAwesomebarPrefValue = Services.prefs.getBoolPref(
"browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar");
values["improvesearch.handoffToAwesomebar"] = handoffToAwesomebarPrefValue;
this._prefMap.set("improvesearch.handoffToAwesomebar", handoffToAwesomebarPrefValue);
this._prefMap.set("improvesearch.handoffToAwesomebar", {value: handoffToAwesomebarPrefValue});
// Set the initial state of all prefs in redux
this.store.dispatch(ac.BroadcastToContent({type: at.PREFS_INITIAL_VALUES, data: values}));

View File

@ -26,6 +26,8 @@ ChromeUtils.defineModuleGetter(this, "HomePage",
"resource:///modules/HomePage.jsm");
ChromeUtils.defineModuleGetter(this, "ExtensionSettingsStore",
"resource://gre/modules/ExtensionSettingsStore.jsm");
ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils",
"resource://gre/modules/PrivateBrowsingUtils.jsm");
XPCOMUtils.defineLazyServiceGetters(this, {
gUUIDGenerator: ["@mozilla.org/uuid-generator;1", "nsIUUIDGenerator"],
@ -35,6 +37,9 @@ XPCOMUtils.defineLazyServiceGetters(this, {
const ACTIVITY_STREAM_ID = "activity-stream";
const ACTIVITY_STREAM_ENDPOINT_PREF = "browser.newtabpage.activity-stream.telemetry.ping.endpoint";
const ACTIVITY_STREAM_ROUTER_ID = "activity-stream-router";
const DOMWINDOW_OPENED_TOPIC = "domwindowopened";
const DOMWINDOW_UNLOAD_TOPIC = "unload";
const TAB_PINNED_EVENT = "TabPinned";
// This is a mapping table between the user preferences and its encoding code
const USER_PREFS_ENCODING = {
@ -63,10 +68,73 @@ this.TelemetryFeed = class TelemetryFeed {
this._onEventsTelemetryPrefChange = this._onEventsTelemetryPrefChange.bind(this);
this._prefs.observe(EVENTS_TELEMETRY_PREF, this._onEventsTelemetryPrefChange);
this._classifySite = classifySite;
this._addWindowListeners = this._addWindowListeners.bind(this);
this.handleEvent = this.handleEvent.bind(this);
}
init() {
Services.obs.addObserver(this.browserOpenNewtabStart, "browser-open-newtab-start");
// Add pin tab event listeners on future windows
Services.obs.addObserver(this._addWindowListeners, DOMWINDOW_OPENED_TOPIC);
// Listen for pin tab events on all open windows
for (let win of Services.wm.getEnumerator("navigator:browser")) {
this._addWindowListeners(win);
}
}
handleEvent(event) {
switch (event.type) {
case TAB_PINNED_EVENT:
this.countPinnedTab(event.target);
break;
case DOMWINDOW_UNLOAD_TOPIC:
this._removeWindowListeners(event.target);
break;
}
}
_removeWindowListeners(win) {
win.removeEventListener(DOMWINDOW_UNLOAD_TOPIC, this.handleEvent);
win.removeEventListener(TAB_PINNED_EVENT, this.handleEvent);
}
_addWindowListeners(win) {
win.addEventListener(DOMWINDOW_UNLOAD_TOPIC, this.handleEvent);
win.addEventListener(TAB_PINNED_EVENT, this.handleEvent);
}
countPinnedTab(target, source = "TAB_CONTEXT_MENU") {
const win = target.ownerGlobal;
if (PrivateBrowsingUtils.isWindowPrivate(win)) {
return;
}
const event = Object.assign(
this.createPing(),
{
action: "activity_stream_user_event",
event: TAB_PINNED_EVENT.toUpperCase(),
value: {total_pinned_tabs: this.countTotalPinnedTabs()},
source,
// These fields are required but not relevant for this ping
page: "n/a",
session_id: "n/a",
},
);
this.sendEvent(event);
}
countTotalPinnedTabs() {
let pinnedTabs = 0;
for (let win of Services.wm.getEnumerator("navigator:browser")) {
if (win.closed || PrivateBrowsingUtils.isWindowPrivate(win)) {
continue;
}
for (let tab of win.gBrowser.tabs) {
pinnedTabs += tab.pinned ? 1 : 0;
}
}
return pinnedTabs;
}
getOrCreateImpressionId() {
@ -691,6 +759,8 @@ this.TelemetryFeed = class TelemetryFeed {
try {
Services.obs.removeObserver(this.browserOpenNewtabStart,
"browser-open-newtab-start");
Services.obs.removeObserver(this._addWindowListeners,
DOMWINDOW_OPENED_TOPIC);
} catch (e) {
// Operation can fail when uninit is called before
// init has finished setting up the observer

View File

@ -93,6 +93,8 @@ prefs_home_header=Contenido de la página de inicio de Firefox
prefs_home_description=Elige qué contenido quieres en tu pantalla de inicio de Firefox.
prefs_content_discovery_header=Inicio de Firefox
prefs_content_discovery_description=El Descubrimiento de contenido en el Inicio de Firefox te permite descubrir artículos relevantes de alta calidad provenientes de toda la web.
prefs_content_discovery_button=Desactivar Descubrimiento de contenido
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
@ -177,7 +179,7 @@ error_fallback_default_refresh_suggestion=Recarga la página para volver a inten
section_menu_action_remove_section=Eliminar sección
section_menu_action_collapse_section=Contraer sección
section_menu_action_expand_section=Expandir sección
section_menu_action_manage_section=Gestionar sección
section_menu_action_manage_section=Gestionar secciones
section_menu_action_manage_webext=Gestionar extensión
section_menu_action_add_topsite=Añadir sitio frecuente
section_menu_action_add_search_engine=Añadir motor de búsqueda

View File

@ -91,6 +91,11 @@ section_disclaimer_topstories_buttontext=باشه، گرفتم
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=محتوای صفحه خانگی فایرفاکس
prefs_home_description=انتخاب کنید که چه محتوایی می‌خواهید در صفحه خانگیِ فایرفاکس خود ببینید.
prefs_content_discovery_header=خانهٔ فایرفاکس
prefs_content_discovery_description=سرویس کشف محتوا در فایرفاکس به شما قابلیت پیدا کردن مطالبِ با کیفیت و مرتبط را در سراسر وب می‌دهد.
prefs_content_discovery_button=خاموش کردن سیستم کشف محتوا
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@ -145,6 +150,8 @@ pocket_read_more=موضوع‌های محبوب:
pocket_read_even_more=مشاهده داستان‌های بیشتر
pocket_more_reccommendations=توصیه‌های بیشتر
pocket_how_it_works=این چجوری کار میکنه
pocket_cta_button=دریافت Pocket
pocket_cta_text=مطالبی که دوست دارید را در Pocket ذخیره کنید، و به ذهن خود را با مطالب فوق‌العاده انرژی بدهید.
highlights_empty_state=مرور کردن را شروع کنید و شاهد تعداد زیادی مقاله، فیلم و صفحات خوبی باشید که اخیر مشاهده کرده اید یا نشانگ گذاری کرده اید.
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,

View File

@ -60,7 +60,7 @@ menu_action_open_file=Aperir le file
# link that belongs to this downloaded item"
menu_action_copy_download_link=Copiar le ligamine de discargamento
menu_action_go_to_download_page=Ir al pagina de discargamento
menu_action_remove_download=Remover ex le chronologia
menu_action_remove_download=Remover del chronologia
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
@ -78,7 +78,7 @@ search_web_placeholder=Cercar in le Web
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
# the topstories section title to provide additional information about
# how the stories are selected.
section_disclaimer_topstories=Le historias plus interessante del web, eligite in base a lo que tu lege. Per Pocket, ora parte de Mozilla.
section_disclaimer_topstories=Le historias plus interessante del web, seligite a base de lo que tu lege. De Pocket, ora parte de Mozilla.
section_disclaimer_topstories_linktext=Apprende como illo functiona.
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
# the button used to acknowledge, and hide this disclaimer in the future.
@ -103,11 +103,11 @@ prefs_section_rows_option={num} riga;{num} rigas
prefs_search_header=Recerca del Web
prefs_topsites_description=Le sitos que tu visita plus
prefs_topstories_description2=Grande contento ex tote le Web, personalisate pro te
prefs_topstories_options_sponsored_label=Historias sponsorisate
prefs_topstories_options_sponsored_label=Articulos sponsorisate
prefs_topstories_sponsored_learn_more=Saper plus
prefs_highlights_description=Un election de files que tu ha salvate o visitate
prefs_highlights_description=Un selection de sitos que tu ha salvate o visitate
prefs_highlights_options_visited_label=Paginas visitate
prefs_highlights_options_download_label=Discargamentos plus recente
prefs_highlights_options_download_label=Discargamento plus recente
prefs_highlights_options_pocket_label=Paginas salvate in Pocket
prefs_snippets_description=Actualisationes ab Mozilla e Firefox
settings_pane_button_label=Personalisar tu pagina de nove scheda
@ -123,11 +123,11 @@ settings_pane_snippets_header=Breve novas
# LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
# dialog.
edit_topsites_button_text=Editar
edit_topsites_edit_button=Editar iste sito
edit_topsites_edit_button=Modificar iste sito
# LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
topsites_form_add_header=Nove sito popular
topsites_form_edit_header=Editar le sito popular
topsites_form_edit_header=Modificar le sito popular
topsites_form_title_label=Titulo
topsites_form_title_placeholder=Scriber un titulo
topsites_form_url_label=URL
@ -139,8 +139,8 @@ topsites_form_preview_button=Vista preliminar
topsites_form_add_button=Adder
topsites_form_save_button=Salvar
topsites_form_cancel_button=Cancellar
topsites_form_url_validation=Il es necessari un URL valide
topsites_form_image_validation=Error durante le carga del imagina. Prova un URL differente.
topsites_form_url_validation=Es necessari un URL valide
topsites_form_image_validation=Error durante le cargamento del imagine. Prova un altere URL.
# LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
# trending stories section and precedes a list of links to popular topics.

View File

@ -91,6 +91,11 @@ section_disclaimer_topstories_buttontext=კარგი, გასაგებ
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Firefox საწყისი გვერდი
prefs_home_description=აირჩიეთ, თუ რისი გამოჩენა გსურთ Firefox-ის საწყის გვერდზე.
prefs_content_discovery_header=Firefox მთავარი
prefs_content_discovery_description=შიგთავსის მოძიება Firefox-ის მთავარ გვერდზე, საშუალებას გაძლევთ აღმოაჩინოთ მაღალი ხარისხის, გამოსადეგი სტატიები მთელ ინტერნეტში.
prefs_content_discovery_button=შიგთავსის მოძიების გამორთვა
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@ -144,7 +149,6 @@ pocket_read_more=პოპულარული თემები:
# end of the list of popular topic links.
pocket_read_even_more=მეტი სიახლის ნახვა
pocket_more_reccommendations=მეტი შემოთავაზებები
pocket_learn_more=იხილეთ ვრცლად
pocket_how_it_works=როგორ მუშაობს
pocket_cta_button=გამოიყენეთ Pocket
pocket_cta_text=გადაინახეთ სასურველი შიგთავსი Pocket-ში და მიეცით გონებას საკვები, შთამბეჭდავი საკითხავი მასალის სახით.

View File

@ -1,14 +1,33 @@
newtab_page_title=Nowa karta
header_top_sites=Popularne
header_highlights=Wyróżnione
# LOCALIZATION NOTE(header_recommended_by): This is followed by the name
# of the corresponding content provider.
header_recommended_by=Polecane przez {provider}
# LOCALIZATION NOTE(context_menu_button_sr): This is for screen readers when
# the context menu button is focused/active. Title is the label or hostname of
# the site.
context_menu_button_sr=Otwórz menu kontekstowe „{title}”
# LOCALIZATION NOTE(section_context_menu_button_sr): This is for screen readers when
# the section edit context menu button is focused/active.
section_context_menu_button_sr=Otwórz menu kontekstowe sekcji
# LOCALIZATION NOTE (type_label_*): These labels are associated to pages to give
# context on how the element is related to the user, e.g. type indicates that
# the page is bookmarked, or is currently open on another device
type_label_visited=Z odwiedzonych
type_label_bookmarked=Z zakładek
type_label_recommended=Na czasie
type_label_pocket=Z Pocket
type_label_downloaded=Z pobranych
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
# menu and are meant as a call to action for a given page.
# LOCALIZATION NOTE (menu_action_bookmark): Bookmark is a verb, as in "Add to
# bookmarks"
menu_action_bookmark=Dodaj zakładkę
menu_action_remove_bookmark=Usuń zakładkę
menu_action_open_new_window=Otwórz w nowym oknie
@ -18,32 +37,73 @@ menu_action_delete=Usuń z historii
menu_action_pin=Przypnij
menu_action_unpin=Odepnij
confirm_history_delete_p1=Czy na pewno usunąć wszystkie wizyty na tej stronie z historii?
# LOCALIZATION NOTE (confirm_history_delete_notice_p2): this string is displayed in
# the same dialog as confirm_history_delete_p1. "This action" refers to deleting a
# page from history.
confirm_history_delete_notice_p2=Tej czynności nie można cofnąć.
menu_action_save_to_pocket=Zachowaj w Pocket
menu_action_delete_pocket=Usuń z Pocket
menu_action_archive_pocket=Archiwizuj w Pocket
# LOCALIZATION NOTE (menu_action_show_file_*): These are platform specific strings
# found in the context menu of an item that has been downloaded. The intention behind
# "this action" is that it will show where the downloaded file exists on the file system
# for each operating system.
menu_action_show_file_mac_os=Pokaż w Finderze
menu_action_show_file_windows=Otwórz folder nadrzędny
menu_action_show_file_linux=Otwórz folder nadrzędny
menu_action_show_file_default=Wyświetl plik
menu_action_open_file=Otwórz plik
# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
# link that belongs to this downloaded item"
menu_action_copy_download_link=Kopiuj adres, z którego pobrano plik
menu_action_go_to_download_page=Przejdź do strony pobierania
menu_action_remove_download=Usuń z historii
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
search_button=Szukaj
# LOCALIZATION NOTE (search_header): Displayed at the top of the panel
# showing search suggestions. {search_engine_name} is replaced with the name of
# the current default search engine. e.g. 'Google Search'
search_header=Wyszukiwanie z „{search_engine_name}”
# LOCALIZATION NOTE (search_web_placeholder): This is shown in the searchbox when
# the user hasn't typed anything yet.
search_web_placeholder=Szukaj w Internecie
# LOCALIZATION NOTE (section_disclaimer_topstories): This is shown below
# the topstories section title to provide additional information about
# how the stories are selected.
section_disclaimer_topstories=Najciekawsze artykuły w Internecie, wybierane na podstawie tego co czytasz. Od serwisu Pocket, będącego teraz częścią Mozilli.
section_disclaimer_topstories_linktext=Zobacz, jak to działa
# LOCALIZATION NOTE (section_disclaimer_topstories_buttontext): The text of
# the button used to acknowledge, and hide this disclaimer in the future.
section_disclaimer_topstories_buttontext=OK
prefs_home_header=Strona startowa
prefs_home_description=Wybierz, jakie treści mają być wyświetlane na stronie startowej.
prefs_restore_defaults_button=Przywróć domyślne
# LOCALIZATION NOTE (prefs_*, settings_*): These are shown in about:preferences
# for a "Firefox Home" section. "Firefox" should be treated as a brand and kept
# in English, while "Home" should be localized matching the about:preferences
# sidebar mozilla-central string for the panel that has preferences related to
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Strona startowa Firefoksa
prefs_home_description=Wybierz, co wyświetlać na stronie startowej Firefoksa.
prefs_content_discovery_header=Strona startowa Firefoksa
prefs_content_discovery_description=Funkcja odkrywania treści na stronie startowej Firefoksa umożliwia odkrywanie spersonalizowanych artykułów o wysokiej jakości z całego Internetu.
prefs_content_discovery_button=Wyłącz odkrywanie treści
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
prefs_section_rows_option={num} wiersz;{num} wiersze;{num} wierszy
prefs_search_header=Pasek wyszukiwania
prefs_topsites_description=Popularne odwiedzane strony
prefs_topstories_description2=Świetne rzeczy z całego Internetu, personalizowane specjalnie dla Ciebie
prefs_topstories_options_sponsored_label=Sponsorowane treści
prefs_topsites_description=Najczęściej odwiedzane strony.
prefs_topstories_description2=Świetne rzeczy z całego Internetu, wybrane specjalnie dla Ciebie
prefs_topstories_options_sponsored_label=Sponsorowane artykuły
prefs_topstories_sponsored_learn_more=Więcej informacji
prefs_highlights_description=Wybierane z zachowanych i odwiedzonych stron.
prefs_highlights_options_visited_label=Historia
@ -51,23 +111,21 @@ prefs_highlights_options_download_label=Ostatnio pobrane pliki
prefs_highlights_options_pocket_label=Zachowane w Pocket
prefs_snippets_description=Informacje od Mozilli i Firefoksa.
settings_pane_button_label=Dostosuj stronę nowej karty
settings_pane_header=Ustawienia nowej karty
settings_pane_body2=Wybierz, co wyświetlać na tej stronie
settings_pane_search_header=Wyszukiwanie w Internecie
settings_pane_search_body=Pasek wyszukiwania na stronie nowej karty.
settings_pane_topsites_header=Popularne
settings_pane_topsites_body=Dostęp do najczęściej odwiedzanych stron.
settings_pane_topsites_options_showmore=Dwa wiersze
settings_pane_highlights_header=Wyróżniane
settings_pane_highlights_body2=Szybki dostęp do niedawno odwiedzonych stron i dodanych zakładek.
settings_pane_highlights_header=Wyróżnione
settings_pane_highlights_options_bookmarks=Zakładki
settings_pane_highlights_options_visited=Odwiedzone strony
# LOCALIZATION NOTE(settings_pane_snippets_header): For the "Snippets" feature
# traditionally on about:home. Alternative translation options: "Small Note" or
# something that expresses the idea of "a small message, shortened from
# something else, and non-essential but also not entirely trivial and useless."
settings_pane_snippets_header=Od Mozilli
settings_pane_snippets_body=Krótkie i słodkie informacje od Mozilli o Firefoksie i kulturze internetowej, a od czasu do czasu także jakiś żart.
settings_pane_done_button=Gotowe
settings_pane_topstories_options_sponsored=Sponsorowane treści
# LOCALIZATION NOTE (edit_topsites_*): This is shown in the Edit Top Sites modal
# dialog.
edit_topsites_button_text=Edytuj
edit_topsites_edit_button=Edytuj stronę
# LOCALIZATION NOTE (topsites_form_*): This is shown in the New/Edit Topsite modal.
topsites_form_add_header=Dodawanie strony do sekcji Popularne
topsites_form_edit_header=Edycja strony z sekcji Popularne
topsites_form_title_label=Tytuł
@ -76,30 +134,48 @@ topsites_form_url_label=Adres URL
topsites_form_image_url_label=Własny obraz
topsites_form_url_placeholder=Adres strony
topsites_form_use_image_link=Użyj własnego obrazu…
# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
topsites_form_preview_button=Podgląd
topsites_form_add_button=Dodaj
topsites_form_save_button=Zachowaj
topsites_form_cancel_button=Anuluj
topsites_form_url_validation=Wymagany jest prawidłowy adres URL
topsites_form_image_validation=Wczytanie obrazu nie powiodło się. Spróbuj innego adresu.
topsites_form_image_validation=Wczytanie obrazu się nie powiodło. Spróbuj innego adresu.
# LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
# trending stories section and precedes a list of links to popular topics.
pocket_read_more=Popularne treści:
pocket_read_even_more=Pokaż więcej artykułów
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=Więcej artykułów
pocket_more_reccommendations=Więcej polecanych
pocket_learn_more=Więcej informacji
pocket_how_it_works=Jak to działa?
pocket_cta_button=Pobierz Pocket
pocket_cta_text=Zachowuj historie w Pocket, aby wrócić później do ich lektury.
pocket_description=Odkrywaj wysokiej jakości treści dzięki serwisowi Pocket, który jest teraz częścią Mozilli.
highlights_empty_state=Zacznij przeglądać Internet, a pojawią się tutaj świetne artykuły, filmy oraz inne ostatnio odwiedzane strony i dodane zakładki.
topstories_empty_state=To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej treści z całego Internetu.
manual_migration_explanation2=Wypróbuj program Firefox z zakładkami, historią i hasłami z innej przeglądarki.
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
# in the space that would have shown a few stories, this is shown instead.
# {provider} is replaced by the name of the content provider for this section.
topstories_empty_state=To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej artykułów z całego Internetu.
# LOCALIZATION NOTE (manual_migration_explanation2): This message is shown to encourage users to
# import their browser profile from another browser they might be using.
manual_migration_explanation2=Wypróbuj Firefoksa z zakładkami, historią i hasłami z innej przeglądarki.
# LOCALIZATION NOTE (manual_migration_cancel_button): This message is shown on a button that cancels the
# process of importing another browsers profile into Firefox.
manual_migration_cancel_button=Anuluj
# LOCALIZATION NOTE (manual_migration_import_button): This message is shown on a button that starts the process
# of importing another browsers profile profile into Firefox.
manual_migration_import_button=Importuj
# LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
# action link are shown in each section of UI that fails to render
error_fallback_default_info=Coś się nie powiodło podczas wczytywania tej treści
error_fallback_default_refresh_suggestion=Odśwież stronę, by spróbować ponownie
# LOCALIZATION NOTE (section_menu_action_*). These strings are displayed in the section
# context menu and are meant as a call to action for the given section.
section_menu_action_remove_section=Usuń sekcję
section_menu_action_collapse_section=Zwiń sekcję
section_menu_action_expand_section=Rozwiń sekcję
@ -109,19 +185,31 @@ section_menu_action_add_topsite=Dodaj stronę do popularnych
section_menu_action_add_search_engine=Dodaj wyszukiwarkę
section_menu_action_move_up=Przesuń w górę
section_menu_action_move_down=Przesuń w dół
section_menu_action_privacy_notice=Uwagi dotyczące prywatności
section_menu_action_privacy_notice=Prywatność
firstrun_title=Zabierz swoje dane ze sobą
# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
# firstrun of the browser, they give an introduction to Firefox and Sync.
firstrun_title=Zabierz Firefoksa ze sobą
firstrun_content=Zakładki, historia, hasła i inne ustawienia mogą być dostępne i synchronizowane na wszystkich urządzeniach.
firstrun_learn_more_link=Więcej informacji
firstrun_learn_more_link=Więcej informacji o koncie Firefoksa
# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=Wprowadź adres e-mail
firstrun_form_sub_header=i zacznij korzystać z Firefox Sync
firstrun_form_sub_header=i zacznij korzystać z synchronizacji Firefoksa
firstrun_email_input_placeholder=Adres e-mail
firstrun_invalid_input=Wymagany jest prawidłowy adres e-mail
firstrun_extra_legal_links=Kontynuując, akceptujesz {terms} i {privacy}.
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_extra_legal_links=Kontynuując, wyrażasz zgodę na {terms} i {privacy}.
firstrun_terms_of_service=warunki korzystania z usługi
firstrun_privacy_notice=uwagi dotyczące prywatności
firstrun_privacy_notice=zasady ochrony prywatności
firstrun_continue_to_login=Kontynuuj
firstrun_skip_login=Pomiń
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=Otwórz menu

View File

@ -18,7 +18,9 @@ header_recommended_by={provider} විසින් නිර්දේශිත
# the page is bookmarked, or is currently open on another device
type_label_visited=ප්‍රවේශිත
type_label_bookmarked=පිටු සලකුණු තැබූ
type_label_recommended=නැඹුරුතා
type_label_pocket=Pocket හි සුරකින ලදී
type_label_downloaded=බාගැනිණ
# LOCALIZATION NOTE (menu_action_*): These strings are displayed in a context
# menu and are meant as a call to action for a given page.
@ -45,10 +47,15 @@ menu_action_archive_pocket=Pocket හි සංරක්ෂණ කරන්න
# found in the context menu of an item that has been downloaded. The intention behind
# "this action" is that it will show where the downloaded file exists on the file system
# for each operating system.
menu_action_show_file_default=ගොනුව පෙන්වන්න
menu_action_open_file=ගොනුව විවෘත කරන්න
# LOCALIZATION NOTE (menu_action_copy_download_link, menu_action_go_to_download_page):
# "Download" here, in both cases, is not a verb, it is a noun. As in, "Copy the
# link that belongs to this downloaded item"
menu_action_copy_download_link=බාගැනිමේ සබැඳිය පිටපත් කරන්න
menu_action_go_to_download_page=බාගැනිම් පිටුවට යන්න
menu_action_remove_download=ඉතිහාසයෙන් ඉවත් කරන්න
# LOCALIZATION NOTE (search_button): This is screenreader only text for the
# search button.
@ -78,13 +85,21 @@ section_disclaimer_topstories_buttontext=හරි, තේරුණා
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Firefox මුල්පිටු අන්තර්ගතය
prefs_home_description=Firefox මුල් පිටුවෙහි ඔබට අවැසි වන්නේ කුමන අන්තර්ගතයදැයි තෝරන්න.
prefs_content_discovery_header=Firefox නිවස
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
prefs_section_rows_option={num} තීරය;{num} තීර
prefs_search_header=ජාල සෙවුම
prefs_topsites_description=ඔබ වැඩිපුරම පිවිසෙන අඩවි
prefs_topstories_options_sponsored_label=අනුග්‍රාහක කතා
prefs_topstories_sponsored_learn_more=තවත් දැනගන්න
prefs_highlights_description=ඔබ සුරකින ලද හෝ පිවිසි අඩවි තෝරාගැනීමක්
prefs_highlights_options_visited_label=පිවිසුනු පිටු
prefs_highlights_options_download_label=මෑතකාලීන බාගත
prefs_snippets_description=Mozilla සහ Firefox වෙතින් යාවත්
settings_pane_button_label=ඔබේ නව ටැබ පිටුව රුචිකරණය කරන්න
settings_pane_topsites_header=ප්‍රමුඛ අඩවි
settings_pane_highlights_header=ඉස්මතු කිරීම්
@ -107,10 +122,12 @@ topsites_form_title_placeholder=සිරස්තල එක් කරන්න
topsites_form_url_label=URL
topsites_form_url_placeholder=URL එකක් ඇතුළත් කරන්න
# LOCALIZATION NOTE (topsites_form_*_button): These are verbs/actions.
topsites_form_preview_button=පෙරදසුන
topsites_form_add_button=එක් කරන්න
topsites_form_save_button=සුරකින්න
topsites_form_cancel_button=අවලංගු කරන්න
topsites_form_url_validation=වලංගු URL එකක් අවශ්‍ය වේ
topsites_form_image_validation=පින්තූරය පැටවීමට අපොහොසත් විය. වෙනත් URL එකක් උත්සාහ කරන්න.
# LOCALIZATION NOTE (pocket_read_more): This is shown at the bottom of the
# trending stories section and precedes a list of links to popular topics.
@ -118,6 +135,8 @@ pocket_read_more=ජනප්‍රිය මාතෘකා:
# LOCALIZATION NOTE (pocket_read_even_more): This is shown as a link at the
# end of the list of popular topic links.
pocket_read_even_more=තවත් බොහෝ දැ
pocket_more_reccommendations=තවත් නිර්දේශ
pocket_how_it_works=එය ක්‍රියාත්මක වන්නේ කෙසේද
# LOCALIZATION NOTE (topstories_empty_state): When there are no recommendations,
# in the space that would have shown a few stories, this is shown instead.
@ -135,22 +154,37 @@ manual_migration_import_button=දැන් ආයාත කරන්න
# LOCALIZATION NOTE (error_fallback_default_*): This message and suggested
# action link are shown in each section of UI that fails to render
error_fallback_default_info=අහෝ, මෙම අන්තර්ගතය පූර්ණයෙදී යම් වරදක් සිදුවිය.
error_fallback_default_refresh_suggestion=යළි උත්සාහ කිරීමට පිටුව යාවත්කාලීන කරන්න.
# LOCALIZATION NOTE (section_menu_action_*). These strings are displayed in the section
# context menu and are meant as a call to action for the given section.
section_menu_action_manage_webext=දිගුව පාලනය කරන්න
section_menu_action_add_search_engine=සෙවුම් යන්ත්‍රයක් එක් කරන්න
section_menu_action_move_up=ඉහළට ගෙනයන්න
section_menu_action_move_down=පහළට ගෙනයන්න
section_menu_action_privacy_notice=පෞද්ගලිකත්ව සටහන
# LOCALIZATION NOTE (firstrun_*). These strings are displayed only once, on the
# firstrun of the browser, they give an introduction to Firefox and Sync.
firstrun_learn_more_link=Firefox ගිණුම් ගැන වැඩි දුර දැනගන්න
# LOCALIZATION NOTE (firstrun_form_header and firstrun_form_sub_header):
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=ඔබගේ විද්‍යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න
firstrun_email_input_placeholder=විද්‍යුත් තැපෑල
firstrun_invalid_input=වලංගු විද්‍යුත් තැපැල් ලිපිනයක් අවශ්‍ය වේ
# LOCALIZATION NOTE (firstrun_extra_legal_links): {terms} is equal to firstrun_terms_of_service, and
# {privacy} is equal to firstrun_privacy_notice. {terms} and {privacy} are clickable links.
firstrun_extra_legal_links=ඉදිරියට යාමෙන් ඔබ {terms}සහ {privacy} සමග එකඟ වන්නේ ය.
firstrun_terms_of_service=සේවා කොන්දේසි
firstrun_privacy_notice=පෞද්ගලිකත්ව ප්‍රතිපත්තිය
firstrun_continue_to_login=ඉදිරියට
firstrun_skip_login=මෙම පියවර මගහරින්න
# LOCALIZATION NOTE (context_menu_title): Action tooltip to open a context menu
context_menu_title=මෙනුව විවෘත කරන්න

View File

@ -91,6 +91,11 @@ section_disclaimer_topstories_buttontext=Гаразд, зрозуміло
# what is shown for the homepage, new windows, and new tabs.
prefs_home_header=Домівка Firefox
prefs_home_description=Оберіть бажаний вміст для показу в домівці Firefox.
prefs_content_discovery_header=Домівка Firefox
prefs_content_discovery_description=Огляд вмісту в домівці Firefox дозволяє вам знаходити високоякісні, цікаві статті з усього інтернету.
prefs_content_discovery_button=Вимкнути огляд вмісту
# LOCALIZATION NOTE (prefs_section_rows_option): This is a semi-colon list of
# plural forms used in a drop down of multiple row options (1 row, 2 rows).
# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
@ -144,7 +149,6 @@ pocket_read_more=Популярні теми:
# end of the list of popular topic links.
pocket_read_even_more=Переглянути більше історій
pocket_more_reccommendations=Інші рекомендації
pocket_learn_more=Докладніше
pocket_how_it_works=Як це працює
pocket_cta_button=Отримати Pocket
pocket_cta_text=Зберігайте улюблені статті в Pocket і задовольніть себе захопливим читанням.

View File

@ -110,7 +110,7 @@ prefs_highlights_options_visited_label=Trang đã truy cập
prefs_highlights_options_download_label=Tải xuống gần đây nhất
prefs_highlights_options_pocket_label=Trang đã được lưu vào Pocket
prefs_snippets_description=Cập nhật từ Mozilla và Firefox
settings_pane_button_label=Tùy biến trang Thẻ mới
settings_pane_button_label=Tùy biến trang thẻ mới
settings_pane_topsites_header=Các trang Web hàng đầu
settings_pane_highlights_header=Nổi bật
settings_pane_highlights_options_bookmarks=Trang đánh dấu
@ -197,7 +197,7 @@ firstrun_learn_more_link=Tìm hiểu thêm về Tài khoản Firefox
# firstrun_form_sub_header is a continuation of firstrun_form_header, they are one sentence.
# firstrun_form_header is displayed more boldly as the call to action.
firstrun_form_header=Nhập email của bạn
firstrun_form_sub_header=để tiếp tục với Trình đồng bộ Firefox
firstrun_form_sub_header=để tiếp tục với Đồng bộ hóa Firefox
firstrun_email_input_placeholder=Email
firstrun_invalid_input=Yêu cầu email hợp lệ

View File

@ -105,7 +105,7 @@
"bundle": "npm-run-all bundle:*",
"bundle:locales": "pontoon-to-json --src $npm_package_config_locales_dir --dest data",
"bundle:webpack": "webpack --config webpack.system-addon.config.js",
"bundle:css": "node-sass --source-map true --source-map-contents content-src/styles -o css",
"bundle:css": "node-sass content-src/styles -o css",
"bundle:html": "rimraf prerendered && webpack --config webpack.prerender.config.js && node ./bin/render-activity-stream-html.js",
"buildmc": "npm-run-all buildmc:*",
"prebuildmc": "rimraf $npm_package_config_mc_dir/browser/components/newtab/",
@ -125,8 +125,8 @@
"prestartmc": "npm run buildmc",
"startmc:copy": "cpx \"{{,.}*,!(node_modules)/**/{,.}*}\" $npm_package_config_mc_dir/browser/components/newtab/ -w",
"startmc:copyPingCentre": "npm run buildmc:copyPingCentre -- -w",
"startmc:webpack": "npm run bundle:webpack -- -w",
"startmc:css": "npm run bundle:css && npm run bundle:css -- -w",
"startmc:webpack": "npm run bundle:webpack -- --env.development -w",
"startmc:css": "npm run bundle:css && npm run bundle:css -- --source-map-embed --source-map-contents -w",
"importmc": "rsync --exclude-from .mcignore -a $npm_package_config_mc_dir/browser/components/newtab/ .",
"testmc": "npm-run-all testmc:*",
"testmc:lint": "npm run lint",

View File

@ -41,8 +41,8 @@ window.gActivityStreamStrings = {
"prefs_home_header": "Contenido de la página de inicio de Firefox",
"prefs_home_description": "Elige qué contenido quieres en tu pantalla de inicio de Firefox.",
"prefs_content_discovery_header": "Inicio de Firefox",
"prefs_content_discovery_description": "Content Discovery en la página de inicio de Firefox le permite descubrir artículos de alta calidad y relevantes de toda la web.",
"prefs_content_discovery_button": "Desactivar Content Discovery",
"prefs_content_discovery_description": "El Descubrimiento de contenido en el Inicio de Firefox te permite descubrir artículos relevantes de alta calidad provenientes de toda la web.",
"prefs_content_discovery_button": "Desactivar Descubrimiento de contenido",
"prefs_section_rows_option": "{num} fila;{num} filas",
"prefs_search_header": "Búsqueda web",
"prefs_topsites_description": "Los sitios que más visitas",
@ -91,7 +91,7 @@ window.gActivityStreamStrings = {
"section_menu_action_remove_section": "Eliminar sección",
"section_menu_action_collapse_section": "Contraer sección",
"section_menu_action_expand_section": "Expandir sección",
"section_menu_action_manage_section": "Gestionar sección",
"section_menu_action_manage_section": "Gestionar secciones",
"section_menu_action_manage_webext": "Gestionar extensión",
"section_menu_action_add_topsite": "Añadir sitio frecuente",
"section_menu_action_add_search_engine": "Añadir motor de búsqueda",

View File

@ -40,9 +40,9 @@ window.gActivityStreamStrings = {
"section_disclaimer_topstories_buttontext": "باشه، گرفتم",
"prefs_home_header": "محتوای صفحه خانگی فایرفاکس",
"prefs_home_description": "انتخاب کنید که چه محتوایی می‌خواهید در صفحه خانگیِ فایرفاکس خود ببینید.",
"prefs_content_discovery_header": "Firefox Home",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_content_discovery_header": "خانهٔ فایرفاکس",
"prefs_content_discovery_description": "سرویس کشف محتوا در فایرفاکس به شما قابلیت پیدا کردن مطالبِ با کیفیت و مرتبط را در سراسر وب می‌دهد.",
"prefs_content_discovery_button": "خاموش کردن سیستم کشف محتوا",
"prefs_section_rows_option": "{num} ردیف;{num} ردیف",
"prefs_search_header": "جست‌وجو وب",
"prefs_topsites_description": "سایت‌هایی که بیشتر بازدید می‌کنید",
@ -79,8 +79,8 @@ window.gActivityStreamStrings = {
"pocket_read_even_more": "مشاهده داستان‌های بیشتر",
"pocket_more_reccommendations": "توصیه‌های بیشتر",
"pocket_how_it_works": "این چجوری کار میکنه",
"pocket_cta_button": "Get Pocket",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"pocket_cta_button": "دریافت Pocket",
"pocket_cta_text": "مطالبی که دوست دارید را در Pocket ذخیره کنید، و به ذهن خود را با مطالب فوق‌العاده انرژی بدهید.",
"highlights_empty_state": "مرور کردن را شروع کنید و شاهد تعداد زیادی مقاله، فیلم و صفحات خوبی باشید که اخیر مشاهده کرده اید یا نشانگ گذاری کرده اید.",
"topstories_empty_state": "فعلا تموم شد. بعدا دوباره سر بزن تا مطالب جدید از {provider} ببینی. نمی‌تونی صبر کنی؟ یک موضوع محبوب رو انتخاب کن تا مطالب جالب مرتبط از سراسر دنیا رو پیدا کنی.",
"manual_migration_explanation2": "فایرفاکس را با نشانک‌ها،‌ تاریخچه‌ها و کلمات عبور از سایر مرورگر ها تجربه کنید.",

File diff suppressed because one or more lines are too long

View File

@ -31,11 +31,11 @@ window.gActivityStreamStrings = {
"menu_action_open_file": "Aperir le file",
"menu_action_copy_download_link": "Copiar le ligamine de discargamento",
"menu_action_go_to_download_page": "Ir al pagina de discargamento",
"menu_action_remove_download": "Remover ex le chronologia",
"menu_action_remove_download": "Remover del chronologia",
"search_button": "Cercar",
"search_header": "Recerca {search_engine_name}",
"search_web_placeholder": "Cercar in le Web",
"section_disclaimer_topstories": "Le historias plus interessante del web, eligite in base a lo que tu lege. Per Pocket, ora parte de Mozilla.",
"section_disclaimer_topstories": "Le historias plus interessante del web, seligite a base de lo que tu lege. De Pocket, ora parte de Mozilla.",
"section_disclaimer_topstories_linktext": "Apprende como illo functiona.",
"section_disclaimer_topstories_buttontext": "Ok, io comprende",
"prefs_home_header": "Pagina initial de Firefox",
@ -47,11 +47,11 @@ window.gActivityStreamStrings = {
"prefs_search_header": "Recerca del Web",
"prefs_topsites_description": "Le sitos que tu visita plus",
"prefs_topstories_description2": "Grande contento ex tote le Web, personalisate pro te",
"prefs_topstories_options_sponsored_label": "Historias sponsorisate",
"prefs_topstories_options_sponsored_label": "Articulos sponsorisate",
"prefs_topstories_sponsored_learn_more": "Saper plus",
"prefs_highlights_description": "Un election de files que tu ha salvate o visitate",
"prefs_highlights_description": "Un selection de sitos que tu ha salvate o visitate",
"prefs_highlights_options_visited_label": "Paginas visitate",
"prefs_highlights_options_download_label": "Discargamentos plus recente",
"prefs_highlights_options_download_label": "Discargamento plus recente",
"prefs_highlights_options_pocket_label": "Paginas salvate in Pocket",
"prefs_snippets_description": "Actualisationes ab Mozilla e Firefox",
"settings_pane_button_label": "Personalisar tu pagina de nove scheda",
@ -60,9 +60,9 @@ window.gActivityStreamStrings = {
"settings_pane_highlights_options_bookmarks": "Marcapaginas",
"settings_pane_snippets_header": "Breve novas",
"edit_topsites_button_text": "Editar",
"edit_topsites_edit_button": "Editar iste sito",
"edit_topsites_edit_button": "Modificar iste sito",
"topsites_form_add_header": "Nove sito popular",
"topsites_form_edit_header": "Editar le sito popular",
"topsites_form_edit_header": "Modificar le sito popular",
"topsites_form_title_label": "Titulo",
"topsites_form_title_placeholder": "Scriber un titulo",
"topsites_form_url_label": "URL",
@ -73,8 +73,8 @@ window.gActivityStreamStrings = {
"topsites_form_add_button": "Adder",
"topsites_form_save_button": "Salvar",
"topsites_form_cancel_button": "Cancellar",
"topsites_form_url_validation": "Il es necessari un URL valide",
"topsites_form_image_validation": "Error durante le carga del imagina. Prova un URL differente.",
"topsites_form_url_validation": "Es necessari un URL valide",
"topsites_form_image_validation": "Error durante le cargamento del imagine. Prova un altere URL.",
"pocket_read_more": "Subjectos popular:",
"pocket_read_even_more": "Vider plus historias",
"pocket_more_reccommendations": "Altere recommendationes",

View File

@ -40,9 +40,9 @@ window.gActivityStreamStrings = {
"section_disclaimer_topstories_buttontext": "კარგი, გასაგებია",
"prefs_home_header": "Firefox საწყისი გვერდი",
"prefs_home_description": "აირჩიეთ, თუ რისი გამოჩენა გსურთ Firefox-ის საწყის გვერდზე.",
"prefs_content_discovery_header": "Firefox Home",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_content_discovery_header": "Firefox მთავარი",
"prefs_content_discovery_description": "შიგთავსის მოძიება Firefox-ის მთავარ გვერდზე, საშუალებას გაძლევთ აღმოაჩინოთ მაღალი ხარისხის, გამოსადეგი სტატიები მთელ ინტერნეტში.",
"prefs_content_discovery_button": "შიგთავსის მოძიების გამორთვა",
"prefs_section_rows_option": "{num} რიგად;{num} რიგად",
"prefs_search_header": "საძიებო ველი",
"prefs_topsites_description": "ხშირად მონახულებული საიტები",
@ -110,6 +110,5 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "პირადი მონაცემების დაცვის განაცხადს",
"firstrun_continue_to_login": "გაგრძელება",
"firstrun_skip_login": "გამოტოვება",
"context_menu_title": "მენიუს გახსნა",
"pocket_learn_more": "იხილეთ ვრცლად"
"context_menu_title": "მენიუს გახსნა"
};

View File

@ -38,16 +38,16 @@ window.gActivityStreamStrings = {
"section_disclaimer_topstories": "Najciekawsze artykuły w Internecie, wybierane na podstawie tego co czytasz. Od serwisu Pocket, będącego teraz częścią Mozilli.",
"section_disclaimer_topstories_linktext": "Zobacz, jak to działa",
"section_disclaimer_topstories_buttontext": "OK",
"prefs_home_header": "Strona startowa",
"prefs_home_description": "Wybierz, jakie treści mają być wyświetlane na stronie startowej.",
"prefs_content_discovery_header": "Firefox Home",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_home_header": "Strona startowa Firefoksa",
"prefs_home_description": "Wybierz, co wyświetlać na stronie startowej Firefoksa.",
"prefs_content_discovery_header": "Strona startowa Firefoksa",
"prefs_content_discovery_description": "Funkcja odkrywania treści na stronie startowej Firefoksa umożliwia odkrywanie spersonalizowanych artykułów o wysokiej jakości z całego Internetu.",
"prefs_content_discovery_button": "Wyłącz odkrywanie treści",
"prefs_section_rows_option": "{num} wiersz;{num} wiersze;{num} wierszy",
"prefs_search_header": "Pasek wyszukiwania",
"prefs_topsites_description": "Popularne odwiedzane strony",
"prefs_topstories_description2": "Świetne rzeczy z całego Internetu, personalizowane specjalnie dla Ciebie",
"prefs_topstories_options_sponsored_label": "Sponsorowane treści",
"prefs_topsites_description": "Najczęściej odwiedzane strony.",
"prefs_topstories_description2": "Świetne rzeczy z całego Internetu, wybrane specjalnie dla Ciebie",
"prefs_topstories_options_sponsored_label": "Sponsorowane artykuły",
"prefs_topstories_sponsored_learn_more": "Więcej informacji",
"prefs_highlights_description": "Wybierane z zachowanych i odwiedzonych stron.",
"prefs_highlights_options_visited_label": "Historia",
@ -56,7 +56,7 @@ window.gActivityStreamStrings = {
"prefs_snippets_description": "Informacje od Mozilli i Firefoksa.",
"settings_pane_button_label": "Dostosuj stronę nowej karty",
"settings_pane_topsites_header": "Popularne",
"settings_pane_highlights_header": "Wyróżniane",
"settings_pane_highlights_header": "Wyróżnione",
"settings_pane_highlights_options_bookmarks": "Zakładki",
"settings_pane_snippets_header": "Od Mozilli",
"edit_topsites_button_text": "Edytuj",
@ -74,16 +74,16 @@ window.gActivityStreamStrings = {
"topsites_form_save_button": "Zachowaj",
"topsites_form_cancel_button": "Anuluj",
"topsites_form_url_validation": "Wymagany jest prawidłowy adres URL",
"topsites_form_image_validation": "Wczytanie obrazu nie powiodło się. Spróbuj innego adresu.",
"topsites_form_image_validation": "Wczytanie obrazu się nie powiodło. Spróbuj innego adresu.",
"pocket_read_more": "Popularne treści:",
"pocket_read_even_more": "Pokaż więcej artykułów",
"pocket_read_even_more": "Więcej artykułów",
"pocket_more_reccommendations": "Więcej polecanych",
"pocket_how_it_works": "Jak to działa?",
"pocket_cta_button": "Pobierz Pocket",
"pocket_cta_text": "Zachowuj historie w Pocket, aby wrócić później do ich lektury.",
"highlights_empty_state": "Zacznij przeglądać Internet, a pojawią się tutaj świetne artykuły, filmy oraz inne ostatnio odwiedzane strony i dodane zakładki.",
"topstories_empty_state": "To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej treści z całego Internetu.",
"manual_migration_explanation2": "Wypróbuj program Firefox z zakładkami, historią i hasłami z innej przeglądarki.",
"topstories_empty_state": "To na razie wszystko. {provider} później będzie mieć więcej popularnych artykułów. Nie możesz się doczekać? Wybierz popularny temat, aby znaleźć więcej artykułów z całego Internetu.",
"manual_migration_explanation2": "Wypróbuj Firefoksa z zakładkami, historią i hasłami z innej przeglądarki.",
"manual_migration_cancel_button": "Anuluj",
"manual_migration_import_button": "Importuj",
"error_fallback_default_info": "Coś się nie powiodło podczas wczytywania tej treści",
@ -97,32 +97,18 @@ window.gActivityStreamStrings = {
"section_menu_action_add_search_engine": "Dodaj wyszukiwarkę",
"section_menu_action_move_up": "Przesuń w górę",
"section_menu_action_move_down": "Przesuń w dół",
"section_menu_action_privacy_notice": "Uwagi dotyczące prywatności",
"firstrun_title": "Zabierz swoje dane ze sobą",
"section_menu_action_privacy_notice": "Prywatność",
"firstrun_title": "Zabierz Firefoksa ze sobą",
"firstrun_content": "Zakładki, historia, hasła i inne ustawienia mogą być dostępne i synchronizowane na wszystkich urządzeniach.",
"firstrun_learn_more_link": "Więcej informacji",
"firstrun_learn_more_link": "Więcej informacji o koncie Firefoksa",
"firstrun_form_header": "Wprowadź adres e-mail",
"firstrun_form_sub_header": "i zacznij korzystać z Firefox Sync",
"firstrun_form_sub_header": "i zacznij korzystać z synchronizacji Firefoksa",
"firstrun_email_input_placeholder": "Adres e-mail",
"firstrun_invalid_input": "Wymagany jest prawidłowy adres e-mail",
"firstrun_extra_legal_links": "Kontynuując, akceptujesz {terms} i {privacy}.",
"firstrun_extra_legal_links": "Kontynuując, wyrażasz zgodę na {terms} i {privacy}.",
"firstrun_terms_of_service": "warunki korzystania z usługi",
"firstrun_privacy_notice": "uwagi dotyczące prywatności",
"firstrun_privacy_notice": "zasady ochrony prywatności",
"firstrun_continue_to_login": "Kontynuuj",
"firstrun_skip_login": "Pomiń",
"context_menu_title": "Otwórz menu",
"prefs_restore_defaults_button": "Przywróć domyślne",
"settings_pane_header": "Ustawienia nowej karty",
"settings_pane_body2": "Wybierz, co wyświetlać na tej stronie",
"settings_pane_search_header": "Wyszukiwanie w Internecie",
"settings_pane_search_body": "Pasek wyszukiwania na stronie nowej karty.",
"settings_pane_topsites_body": "Dostęp do najczęściej odwiedzanych stron.",
"settings_pane_topsites_options_showmore": "Dwa wiersze",
"settings_pane_highlights_body2": "Szybki dostęp do niedawno odwiedzonych stron i dodanych zakładek.",
"settings_pane_highlights_options_visited": "Odwiedzone strony",
"settings_pane_snippets_body": "Krótkie i słodkie informacje od Mozilli o Firefoksie i kulturze internetowej, a od czasu do czasu także jakiś żart.",
"settings_pane_done_button": "Gotowe",
"settings_pane_topstories_options_sponsored": "Sponsorowane treści",
"pocket_learn_more": "Więcej informacji",
"pocket_description": "Odkrywaj wysokiej jakości treści dzięki serwisowi Pocket, który jest teraz częścią Mozilli."
"context_menu_title": "Otwórz menu"
};

File diff suppressed because one or more lines are too long

View File

@ -8,9 +8,9 @@ window.gActivityStreamStrings = {
"section_context_menu_button_sr": "Open the section context menu",
"type_label_visited": "ප්‍රවේශිත",
"type_label_bookmarked": "පිටු සලකුණු තැබූ",
"type_label_recommended": "Trending",
"type_label_recommended": "නැඹුරුතා",
"type_label_pocket": "Pocket හි සුරකින ලදී",
"type_label_downloaded": "Downloaded",
"type_label_downloaded": "බාගැනිණ",
"menu_action_bookmark": "පිටු සලකුණ",
"menu_action_remove_bookmark": "පිටු සලකුණ ඉවත් කරන්න",
"menu_action_open_new_window": "නව කවුළුවක විවෘත කරන්න",
@ -27,11 +27,11 @@ window.gActivityStreamStrings = {
"menu_action_show_file_mac_os": "Show in Finder",
"menu_action_show_file_windows": "Open Containing Folder",
"menu_action_show_file_linux": "Open Containing Folder",
"menu_action_show_file_default": "Show File",
"menu_action_open_file": "Open File",
"menu_action_copy_download_link": "Copy Download Link",
"menu_action_go_to_download_page": "Go to Download Page",
"menu_action_remove_download": "Remove from History",
"menu_action_show_file_default": "ගොනුව පෙන්වන්න",
"menu_action_open_file": "ගොනුව විවෘත කරන්න",
"menu_action_copy_download_link": "බාගැනිමේ සබැඳිය පිටපත් කරන්න",
"menu_action_go_to_download_page": "බාගැනිම් පිටුවට යන්න",
"menu_action_remove_download": "ඉතිහාසයෙන් ඉවත් කරන්න",
"search_button": "සොයන්න",
"search_header": "{search_engine_name} ෙසවුම",
"search_web_placeholder": "ජාලය තුළ සොයන්න",
@ -40,20 +40,20 @@ window.gActivityStreamStrings = {
"section_disclaimer_topstories_buttontext": "හරි, තේරුණා",
"prefs_home_header": "Firefox මුල්පිටු අන්තර්ගතය",
"prefs_home_description": "Firefox මුල් පිටුවෙහි ඔබට අවැසි වන්නේ කුමන අන්තර්ගතයදැයි තෝරන්න.",
"prefs_content_discovery_header": "Firefox Home",
"prefs_content_discovery_header": "Firefox නිවස",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_section_rows_option": "{num} තීරය;{num} තීර",
"prefs_search_header": "ජාල සෙවුම",
"prefs_topsites_description": "ඔබ වැඩිපුරම පිවිසෙන අඩවි",
"prefs_topstories_description2": "Great content from around the web, personalized for you",
"prefs_topstories_options_sponsored_label": "Sponsored Stories",
"prefs_topstories_options_sponsored_label": "අනුග්‍රාහක කතා",
"prefs_topstories_sponsored_learn_more": "තවත් දැනගන්න",
"prefs_highlights_description": "A selection of sites that youve saved or visited",
"prefs_highlights_options_visited_label": "Visited Pages",
"prefs_highlights_options_download_label": "Most Recent Download",
"prefs_highlights_description": "ඔබ සුරකින ලද හෝ පිවිසි අඩවි තෝරාගැනීමක්",
"prefs_highlights_options_visited_label": "පිවිසුනු පිටු",
"prefs_highlights_options_download_label": "මෑතකාලීන බාගත",
"prefs_highlights_options_pocket_label": "Pages Saved to Pocket",
"prefs_snippets_description": "Updates from Mozilla and Firefox",
"prefs_snippets_description": "Mozilla සහ Firefox වෙතින් යාවත්",
"settings_pane_button_label": "ඔබේ නව ටැබ පිටුව රුචිකරණය කරන්න",
"settings_pane_topsites_header": "ප්‍රමුඛ අඩවි",
"settings_pane_highlights_header": "ඉස්මතු කිරීම්",
@ -69,16 +69,16 @@ window.gActivityStreamStrings = {
"topsites_form_image_url_label": "Custom Image URL",
"topsites_form_url_placeholder": "URL එකක් ඇතුළත් කරන්න",
"topsites_form_use_image_link": "Use a custom image…",
"topsites_form_preview_button": "Preview",
"topsites_form_preview_button": "පෙරදසුන",
"topsites_form_add_button": "එක් කරන්න",
"topsites_form_save_button": "සුරකින්න",
"topsites_form_cancel_button": "අවලංගු කරන්න",
"topsites_form_url_validation": "වලංගු URL එකක් අවශ්‍ය වේ",
"topsites_form_image_validation": "Image failed to load. Try a different URL.",
"topsites_form_image_validation": "පින්තූරය පැටවීමට අපොහොසත් විය. වෙනත් URL එකක් උත්සාහ කරන්න.",
"pocket_read_more": "ජනප්‍රිය මාතෘකා:",
"pocket_read_even_more": "තවත් බොහෝ දැ",
"pocket_more_reccommendations": "More Recommendations",
"pocket_how_it_works": "How it works",
"pocket_more_reccommendations": "තවත් නිර්දේශ",
"pocket_how_it_works": "එය ක්‍රියාත්මක වන්නේ කෙසේද",
"pocket_cta_button": "Get Pocket",
"pocket_cta_text": "Save the stories you love in Pocket, and fuel your mind with fascinating reads.",
"highlights_empty_state": "Start browsing, and well show some of the great articles, videos, and other pages youve recently visited or bookmarked here.",
@ -86,29 +86,29 @@ window.gActivityStreamStrings = {
"manual_migration_explanation2": "Firefox වෙනත් ගවේශයකය පිටය සලකුණු, අතීතය සහ මුරපද සමග උත්සාහ කර බලන්න.",
"manual_migration_cancel_button": "එපා, ස්තුතියි",
"manual_migration_import_button": "දැන් ආයාත කරන්න",
"error_fallback_default_info": "Oops, something went wrong loading this content.",
"error_fallback_default_refresh_suggestion": "Refresh page to try again.",
"error_fallback_default_info": "අහෝ, මෙම අන්තර්ගතය පූර්ණයෙදී යම් වරදක් සිදුවිය.",
"error_fallback_default_refresh_suggestion": "යළි උත්සාහ කිරීමට පිටුව යාවත්කාලීන කරන්න.",
"section_menu_action_remove_section": "Remove Section",
"section_menu_action_collapse_section": "Collapse Section",
"section_menu_action_expand_section": "Expand Section",
"section_menu_action_manage_section": "Manage Section",
"section_menu_action_manage_webext": "Manage Extension",
"section_menu_action_manage_webext": "දිගුව පාලනය කරන්න",
"section_menu_action_add_topsite": "Add Top Site",
"section_menu_action_add_search_engine": "Add Search Engine",
"section_menu_action_add_search_engine": "සෙවුම් යන්ත්‍රයක් එක් කරන්න",
"section_menu_action_move_up": "ඉහළට ගෙනයන්න",
"section_menu_action_move_down": "පහළට ගෙනයන්න",
"section_menu_action_privacy_notice": "පෞද්ගලිකත්ව සටහන",
"firstrun_title": "Take Firefox with You",
"firstrun_content": "Get your bookmarks, history, passwords and other settings on all your devices.",
"firstrun_learn_more_link": "Learn more about Firefox Accounts",
"firstrun_form_header": "Enter your email",
"firstrun_learn_more_link": "Firefox ගිණුම් ගැන වැඩි දුර දැනගන්න",
"firstrun_form_header": "ඔබගේ විද්‍යුත් තැපැල් ලිපිනය ඇතුලත් කරන්න",
"firstrun_form_sub_header": "to continue to Firefox Sync",
"firstrun_email_input_placeholder": "Email",
"firstrun_invalid_input": "Valid email required",
"firstrun_extra_legal_links": "By proceeding, you agree to the {terms} and {privacy}.",
"firstrun_terms_of_service": "Terms of Service",
"firstrun_privacy_notice": "Privacy Notice",
"firstrun_continue_to_login": "Continue",
"firstrun_skip_login": "Skip this step",
"context_menu_title": "Open menu"
"firstrun_email_input_placeholder": "විද්‍යුත් තැපෑල",
"firstrun_invalid_input": "වලංගු විද්‍යුත් තැපැල් ලිපිනයක් අවශ්‍ය වේ",
"firstrun_extra_legal_links": "ඉදිරියට යාමෙන් ඔබ {terms}සහ {privacy} සමග එකඟ වන්නේ ය.",
"firstrun_terms_of_service": "සේවා කොන්දේසි",
"firstrun_privacy_notice": "පෞද්ගලිකත්ව ප්‍රතිපත්තිය",
"firstrun_continue_to_login": "ඉදිරියට",
"firstrun_skip_login": "මෙම පියවර මගහරින්න",
"context_menu_title": "මෙනුව විවෘත කරන්න"
};

View File

@ -40,9 +40,9 @@ window.gActivityStreamStrings = {
"section_disclaimer_topstories_buttontext": "Гаразд, зрозуміло",
"prefs_home_header": "Домівка Firefox",
"prefs_home_description": "Оберіть бажаний вміст для показу в домівці Firefox.",
"prefs_content_discovery_header": "Firefox Home",
"prefs_content_discovery_description": "Content Discovery in Firefox Home allows you to discover high-quality, relevant articles from across the web.",
"prefs_content_discovery_button": "Turn Off Content Discovery",
"prefs_content_discovery_header": "Домівка Firefox",
"prefs_content_discovery_description": "Огляд вмісту в домівці Firefox дозволяє вам знаходити високоякісні, цікаві статті з усього інтернету.",
"prefs_content_discovery_button": "Вимкнути огляд вмісту",
"prefs_section_rows_option": "{num} рядок;{num} рядки;{num} рядків",
"prefs_search_header": "Веб пошук",
"prefs_topsites_description": "Сайти, які ви відвідуєте найчастіше",
@ -110,6 +110,5 @@ window.gActivityStreamStrings = {
"firstrun_privacy_notice": "Повідомлення про приватність",
"firstrun_continue_to_login": "Продовжити",
"firstrun_skip_login": "Пропустити цей крок",
"context_menu_title": "Відкрити меню",
"pocket_learn_more": "Докладніше"
"context_menu_title": "Відкрити меню"
};

File diff suppressed because one or more lines are too long

View File

@ -54,7 +54,7 @@ window.gActivityStreamStrings = {
"prefs_highlights_options_download_label": "Tải xuống gần đây nhất",
"prefs_highlights_options_pocket_label": "Trang đã được lưu vào Pocket",
"prefs_snippets_description": "Cập nhật từ Mozilla và Firefox",
"settings_pane_button_label": "Tùy biến trang Thẻ mới",
"settings_pane_button_label": "Tùy biến trang thẻ mới",
"settings_pane_topsites_header": "Các trang Web hàng đầu",
"settings_pane_highlights_header": "Nổi bật",
"settings_pane_highlights_options_bookmarks": "Trang đánh dấu",
@ -102,7 +102,7 @@ window.gActivityStreamStrings = {
"firstrun_content": "Đồng bộ các dấu trang, lịch sử, mật khẩu và các cài đặt khác lên tất cả các thiết bị của bạn.",
"firstrun_learn_more_link": "Tìm hiểu thêm về Tài khoản Firefox",
"firstrun_form_header": "Nhập email của bạn",
"firstrun_form_sub_header": "để tiếp tục với Trình đồng bộ Firefox",
"firstrun_form_sub_header": "để tiếp tục với Đồng bộ hóa Firefox",
"firstrun_email_input_placeholder": "Email",
"firstrun_invalid_input": "Yêu cầu email hợp lệ",
"firstrun_extra_legal_links": "Bằng cách tiếp tục, bạn đồng ý với {terms} và {privacy}.",

View File

@ -511,7 +511,6 @@ describe("CFRPageActions", () => {
sandbox.spy(pageAction, "hide");
CFRPageActions.RecommendationMap.set(fakeBrowser, {});
secondaryAction.callback();
assert.calledOnce(pageAction.hide);
// Should send telemetry
assert.calledWith(dispatchStub, {
type: "DOORHANGER_TELEMETRY",
@ -523,8 +522,9 @@ describe("CFRPageActions", () => {
event: "DISMISS",
},
});
// Should remove the recommendation
assert.isFalse(CFRPageActions.RecommendationMap.has(fakeBrowser));
// Don't remove the recommendation on `DISMISS` action
assert.isTrue(CFRPageActions.RecommendationMap.has(fakeBrowser));
assert.notCalled(pageAction.hide);
});
it("should send right telemetry for BLOCK secondary action", async () => {
await pageAction._handleClick();
@ -553,13 +553,12 @@ describe("CFRPageActions", () => {
});
it("should send right telemetry for MANAGE secondary action", async () => {
await pageAction._handleClick();
const blockAction = global.PopupNotifications.show.firstCall.args[5][2]; // eslint-disable-line prefer-destructuring
const manageAction = global.PopupNotifications.show.firstCall.args[5][2]; // eslint-disable-line prefer-destructuring
assert.deepEqual(blockAction.label, {value: "Secondary Button 3", attributes: {accesskey: "g"}});
assert.deepEqual(manageAction.label, {value: "Secondary Button 3", attributes: {accesskey: "g"}});
sandbox.spy(pageAction, "hide");
CFRPageActions.RecommendationMap.set(fakeBrowser, {});
blockAction.callback();
assert.calledOnce(pageAction.hide);
manageAction.callback();
// Should send telemetry
assert.calledWith(dispatchStub, {
type: "DOORHANGER_TELEMETRY",
@ -571,8 +570,9 @@ describe("CFRPageActions", () => {
event: "MANAGE",
},
});
// Should remove the recommendation
assert.isFalse(CFRPageActions.RecommendationMap.has(fakeBrowser));
// Don't remove the recommendation on `MANAGE` action
assert.isTrue(CFRPageActions.RecommendationMap.has(fakeBrowser));
assert.notCalled(pageAction.hide);
});
it("should call PopupNotifications.show with the right arguments", async () => {
await pageAction._handleClick();
@ -647,6 +647,26 @@ describe("CFRPageActions", () => {
assert.calledOnce(PageAction.prototype.hide);
assert.isFalse(CFRPageActions.RecommendationMap.has(fakeBrowser));
});
it("should not call `delete` if retain is true", () => {
savedRec.retain = true;
fakeBrowser.documentURI.host = "subdomain.mozilla.com";
assert.isTrue(CFRPageActions.RecommendationMap.has(fakeBrowser));
CFRPageActions.updatePageActions(fakeBrowser);
assert.propertyVal(savedRec, "retain", false);
assert.calledOnce(PageAction.prototype.hide);
assert.isTrue(CFRPageActions.RecommendationMap.has(fakeBrowser));
});
it("should call `delete` if retain is false", () => {
savedRec.retain = false;
fakeBrowser.documentURI.host = "subdomain.mozilla.com";
assert.isTrue(CFRPageActions.RecommendationMap.has(fakeBrowser));
CFRPageActions.updatePageActions(fakeBrowser);
assert.propertyVal(savedRec, "retain", false);
assert.calledOnce(PageAction.prototype.hide);
assert.isFalse(CFRPageActions.RecommendationMap.has(fakeBrowser));
});
});
describe("forceRecommendation", () => {

View File

@ -700,10 +700,10 @@ describe("DiscoveryStreamFeed", () => {
});
});
describe("#onAction: DISCOVERY_STREAM_SPOC_IMPRESSION", () => {
it("should call recordTopRecImpressions from DISCOVERY_STREAM_REC_IMPRESSION", async () => {
describe("#onAction: DISCOVERY_STREAM_IMPRESSION_STATS", () => {
it("should call recordTopRecImpressions from DISCOVERY_STREAM_IMPRESSION_STATS", async () => {
sandbox.stub(feed, "recordTopRecImpressions").returns();
await feed.onAction({type: at.DISCOVERY_STREAM_REC_IMPRESSION, data: {recId: "seen"}});
await feed.onAction({type: at.DISCOVERY_STREAM_IMPRESSION_STATS, data: {tiles: [{id: "seen"}]}});
assert.calledWith(feed.recordTopRecImpressions, "seen");
});

View File

@ -97,10 +97,32 @@ describe("TelemetryFeed", () => {
instance.init();
assert.calledOnce(Services.obs.addObserver);
assert.calledTwice(Services.obs.addObserver);
assert.calledWithExactly(Services.obs.addObserver,
instance.browserOpenNewtabStart, "browser-open-newtab-start");
});
it("should add window open listener", () => {
sandbox.spy(Services.obs, "addObserver");
instance.init();
assert.calledTwice(Services.obs.addObserver);
assert.calledWithExactly(Services.obs.addObserver,
instance._addWindowListeners, "domwindowopened");
});
it("should add TabPinned event listener on new windows", () => {
const stub = {addEventListener: sandbox.stub()};
sandbox.spy(Services.obs, "addObserver");
instance.init();
assert.calledTwice(Services.obs.addObserver);
const [cb] = Services.obs.addObserver.secondCall.args;
cb(stub);
assert.calledTwice(stub.addEventListener);
assert.calledWithExactly(stub.addEventListener, "unload", instance.handleEvent);
assert.calledWithExactly(stub.addEventListener, "TabPinned", instance.handleEvent);
});
it("should create impression id if none exists", () => {
assert.equal(instance._impressionId, FAKE_UUID);
});
@ -109,6 +131,21 @@ describe("TelemetryFeed", () => {
FakePrefs.prototype.prefs[PREF_IMPRESSION_ID] = "fakeImpressionId";
assert.equal(new TelemetryFeed()._impressionId, "fakeImpressionId");
});
it("should register listeners on existing windows", () => {
const stub = sandbox.stub();
globals.set({
Services: {
...Services,
wm: {getEnumerator: () => [{addEventListener: stub}]},
},
});
instance.init();
assert.calledTwice(stub);
assert.calledWithExactly(stub, "unload", instance.handleEvent);
assert.calledWithExactly(stub, "TabPinned", instance.handleEvent);
});
describe("telemetry pref changes from false to true", () => {
beforeEach(() => {
FakePrefs.prototype.prefs = {};
@ -140,6 +177,88 @@ describe("TelemetryFeed", () => {
});
});
});
describe("#handleEvent", () => {
it("should dispatch a TAB_PINNED_EVENT", () => {
sandbox.stub(instance, "sendEvent");
globals.set({
Services: {
...Services,
wm: {getEnumerator: () => [{gBrowser: {tabs: [{pinned: true}]}}]},
},
});
instance.handleEvent({type: "TabPinned", target: {}});
assert.calledOnce(instance.sendEvent);
const [ping] = instance.sendEvent.firstCall.args;
assert.propertyVal(ping, "event", "TABPINNED");
assert.propertyVal(ping, "source", "TAB_CONTEXT_MENU");
assert.propertyVal(ping, "session_id", "n/a");
assert.propertyVal(ping.value, "total_pinned_tabs", 1);
});
it("should skip private windows", () => {
sandbox.stub(instance, "sendEvent");
globals.set({PrivateBrowsingUtils: {isWindowPrivate: () => true}});
instance.handleEvent({type: "TabPinned", target: {}});
assert.notCalled(instance.sendEvent);
});
it("should return the correct value for total_pinned_tabs", () => {
sandbox.stub(instance, "sendEvent");
globals.set({
Services: {
...Services,
wm: {
getEnumerator: () => [{
gBrowser: {tabs: [{pinned: true}, {pinned: false}]},
}],
},
},
});
instance.handleEvent({type: "TabPinned", target: {}});
assert.calledOnce(instance.sendEvent);
const [ping] = instance.sendEvent.firstCall.args;
assert.propertyVal(ping, "event", "TABPINNED");
assert.propertyVal(ping, "source", "TAB_CONTEXT_MENU");
assert.propertyVal(ping, "session_id", "n/a");
assert.propertyVal(ping.value, "total_pinned_tabs", 1);
});
it("should return the correct value for total_pinned_tabs (when private windows are open)", () => {
sandbox.stub(instance, "sendEvent");
const privateWinStub = sandbox.stub().onCall(0).returns(false)
.onCall(1)
.returns(true);
globals.set({PrivateBrowsingUtils: {isWindowPrivate: privateWinStub}});
globals.set({
Services: {
...Services,
wm: {
getEnumerator: () => [{
gBrowser: {tabs: [{pinned: true}, {pinned: true}]},
}],
},
},
});
instance.handleEvent({type: "TabPinned", target: {}});
assert.calledOnce(instance.sendEvent);
const [ping] = instance.sendEvent.firstCall.args;
assert.propertyVal(ping.value, "total_pinned_tabs", 0);
});
it("should unregister the event listeners", () => {
const stub = {removeEventListener: sandbox.stub()};
instance.handleEvent({type: "unload", target: stub});
assert.calledTwice(stub.removeEventListener);
assert.calledWithExactly(stub.removeEventListener, "unload", instance.handleEvent);
assert.calledWithExactly(stub.removeEventListener, "TabPinned", instance.handleEvent);
});
});
describe("#addSession", () => {
it("should add a session and return it", () => {
const session = instance.addSession("foo");
@ -816,16 +935,18 @@ describe("TelemetryFeed", () => {
assert.called(global.Cu.reportError);
});
it("should make this.browserOpenNewtabStart() stop observing browser-open-newtab-start", async () => {
it("should make this.browserOpenNewtabStart() stop observing browser-open-newtab-start and domwindowopened", async () => {
await instance.init();
sandbox.spy(Services.obs, "removeObserver");
sandbox.stub(instance.pingCentre, "uninit");
await instance.uninit();
assert.calledOnce(Services.obs.removeObserver);
assert.calledTwice(Services.obs.removeObserver);
assert.calledWithExactly(Services.obs.removeObserver,
instance.browserOpenNewtabStart, "browser-open-newtab-start");
assert.calledWithExactly(Services.obs.removeObserver,
instance._addWindowListeners, "domwindowopened");
});
});
describe("#onAction", () => {

View File

@ -1,7 +1,7 @@
const path = require("path");
const config = require("./webpack.system-addon.config.js");
const absolute = relPath => path.join(__dirname, relPath);
module.exports = Object.assign({}, config, {
module.exports = Object.assign({}, config(), {
entry: absolute("content-src/aboutlibrary/aboutlibrary.jsx"),
output: {
path: absolute("aboutlibrary/content"),

View File

@ -9,7 +9,7 @@ NOTE: This file is generated by webpack from ${srcPath}
using the buildmc:html npm task.
`;
module.exports = Object.assign({}, webpackConfig, {
module.exports = Object.assign({}, webpackConfig(), {
mode: "none",
target: "node",
devtool: "sourcemap",

View File

@ -5,14 +5,15 @@ const absolute = relPath => path.join(__dirname, relPath);
const resourcePathRegEx = /^resource:\/\/activity-stream\//;
module.exports = {
module.exports = (env = {}) => ({
mode: "none",
entry: absolute("content-src/activity-stream.jsx"),
output: {
path: absolute("data/content"),
filename: "activity-stream.bundle.js",
},
devtool: "source-map",
// TODO: switch to eval-source-map for faster builds. Requires CSP changes
devtool: env.development ? "inline-source-map" : false,
plugins: [new webpack.optimize.ModuleConcatenationPlugin()],
module: {
rules: [
@ -54,4 +55,4 @@ module.exports = {
"redux": "Redux",
"react-redux": "ReactRedux",
},
};
});

View File

@ -16,10 +16,10 @@ scripts:
bundle:
locales: pontoon-to-json --src $npm_package_config_locales_dir --dest data
webpack: webpack --config webpack.system-addon.config.js
css: node-sass --source-map true --source-map-contents content-src/styles -o css
css: node-sass content-src/styles -o css
html: rimraf prerendered && webpack --config webpack.prerender.config.js && node ./bin/render-activity-stream-html.js
# buildmc: Export the bootstraped add-on to mozilla central
# buildmc: Export code to mozilla central
buildmc:
pre: rimraf $npm_package_config_mc_dir/browser/components/newtab/
bundle: => bundle
@ -39,15 +39,15 @@ scripts:
css: node-sass --source-map true --source-map-contents content-src/aboutlibrary -o aboutlibrary/content
copy: cpx "aboutlibrary/**/{,.}*" $npm_package_config_mc_dir/browser/components/library
# startmc: Start developing the bootstrapped add-on
# startmc: Automatically rebuild/export to mozilla central when files are changed. NOTE: Includes sourcemaps, do not use for profiling/perf testing.
startmc:
_parallel: true
pre: =>buildmc
# This copies only the system addon sub-folder; changing anything outside of it will need a full rebuild.
copy: cpx "{{,.}*,!(node_modules)/**/{,.}*}" $npm_package_config_mc_dir/browser/components/newtab/ -w
copyPingCentre: =>buildmc:copyPingCentre -- -w
webpack: =>bundle:webpack -- -w
css: =>bundle:css && =>bundle:css -- -w
webpack: =>bundle:webpack -- --env.development -w
css: =>bundle:css && =>bundle:css -- --source-map-embed --source-map-contents -w
# importmc: Import changes from mc to github repo
importmc: rsync --exclude-from .mcignore -a $npm_package_config_mc_dir/browser/components/newtab/ .