diff --git a/.github/ISSUE_TEMPLATE/localization-request.yml b/.github/ISSUE_TEMPLATE/localization-request.yml new file mode 100644 index 0000000000..e2f2c8c050 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/localization-request.yml @@ -0,0 +1,17 @@ +name: Localization Request +description: Request a new language or translation. +title: "[L10N]: " +labels: ["enhancement"] +body: + - type: textarea + attributes: + label: Language + description: Specify the language you'd like to add or translate. A list of currently supported languages can be found in our [Weblate project](https://hosted.weblate.org/engage/browsertrix/). + validations: + required: true + - type: textarea + attributes: + label: Context + description: Any background information that helps us understand the request. + validations: + required: true diff --git a/frontend/docs/docs/develop/frontend-dev.md b/frontend/docs/docs/develop/frontend-dev.md index 52544e8e8d..cd475311d6 100644 --- a/frontend/docs/docs/develop/frontend-dev.md +++ b/frontend/docs/docs/develop/frontend-dev.md @@ -134,44 +134,3 @@ To run tests in multiple browsers: ```sh yarn test --browsers chromium firefox webkit ``` - -## Localization - -Wrap text or templates in the `msg` helper to make them localizable: - -```js -// import from @lit/localize: -import { msg } from "@lit/localize"; - -// later, in the render function: -render() { - return html` - - ` -} -``` - -Entire templates can be wrapped as well: - -```js -render() { - return msg(html` -

Click the button

- - `) -} -``` - -See: - -To add new languages: - -1. Add [BCP 47 language tag](https://www.w3.org/International/articles/language-tags/index.en) to `targetLocales` in `lit-localize.json` -2. Run `yarn localize:extract` to generate new .xlf file in `/xliff` -3. Provide .xlf file to translation team -4. Replace .xlf file once translated -5. Run `yarn localize:build` bring translation into `src` - -See: diff --git a/frontend/docs/docs/develop/localization.md b/frontend/docs/docs/develop/localization.md new file mode 100644 index 0000000000..bfd9963569 --- /dev/null +++ b/frontend/docs/docs/develop/localization.md @@ -0,0 +1,55 @@ +# Localization + +The Browsertrix UI supports multiple languages. Browsertrix end users can set a language preference in their account settings. + +## Contributing + +Translations are managed through Weblate, a web-based translation tool. Registration is free! Once registered, you can submit translations for review by Browsertrix maintainers. + +**[Register for Weblate](https://hosted.weblate.org/engage/browsertrix/)** + +## Adding a Language + +Adding support for a new language involves a small code change. If you'd like to add a new language and would prefer that a Browsertrix maintainer make the change, submit a [**Localization Request** on GitHub](https://github.com/webrecorder/browsertrix/issues/new/choose). A Browsertrix maintainer will respond to your request on GitHub. + +To add a new language directly through code change: + +1. Look up the [BCP 47 language tag](https://www.w3.org/International/articles/language-tags/index.en#registry) and add it to the `targetLocales` field in `lit-localize.json`. +```js +{ + // ... + "sourceLocale": "en", + "targetLocales": [ + "es", + // Add your language tag here + ], +} +``` + +2. Generate a new XLIFF file by running: + ```sh + yarn localize:extract + ``` + This will add an `.xlf` file named after the new language tag to the `/xliff` directory. + +3. Open a pull request with the changes. +4. Once the pull request is merged, manually refresh the language list in the [Weblate Browsertrix project](https://hosted.weblate.org/projects/browsertrix). Translations are managed entirely through the Weblate interface. + +## Making Strings Localizable + +All text should be wrapped in the `msg` helper to make them localizable: + +```js +import { msg } from "@lit/localize"; + +// later, in the render function: +render() { + return html` + + ` +} +``` + +See [Lit's message types documentation](https://lit.dev/docs/localization/overview/#message-types) page for details. diff --git a/frontend/docs/mkdocs.yml b/frontend/docs/mkdocs.yml index 36270c10b0..44d938e807 100644 --- a/frontend/docs/mkdocs.yml +++ b/frontend/docs/mkdocs.yml @@ -88,6 +88,7 @@ nav: - develop/index.md - develop/local-dev-setup.md - develop/frontend-dev.md + - develop/localization.md - develop/docs.md markdown_extensions: diff --git a/frontend/src/__generated__/locales/es.ts b/frontend/src/__generated__/locales/es.ts new file mode 100644 index 0000000000..0d0563f075 --- /dev/null +++ b/frontend/src/__generated__/locales/es.ts @@ -0,0 +1,1326 @@ + + // Do not modify this file by hand! + // Re-generate this file by running lit-localize + + import {html} from 'lit'; + import {str} from '@lit/localize'; + + /* eslint-disable no-irregular-whitespace */ + /* eslint-disable @typescript-eslint/no-explicit-any */ + + export const templates = { + 's07018373ca29dfcb': `Cuota de minutos mensual alcanzó su capacidad`, +'s0a11c2ffb8309d1a': `Error 404`, +'s0e6ebc9cdd39780b': `¿Eliminar colección?`, +'s0fbf6dc6a1966408': `Siguiente página`, +'s2099d599ac75e503': `Archivado`, +'s2df075aface0dab8': `Compartir archivos`, +'s598446c4063cc093': `Error desconocido de API`, +'s81a19821f3e4a3d2': `Reproducir`, +'s833f0d71eaa06739': `Elija ítems`, +'sa3ce85ea4e96897c': `Cuota de almacenamiento alcanzó su capacidad`, +'scbeafb2ef469257c': `Inicio de sesión requerido`, +'se7bee6e9a9b5394c': `Privado`, +'sf3ff78cc329d3528': `Página anterior`, +'sfa480f50d480c290': `Compartible`, +'h7ee8a6e551e702ba': html` ${0} of ${1} `, +'s5697808ce744d508': str`Current page, page ${0}`, +'s24a06fd949e2d65b': `Back to`, +'sc16e00a7a8b2fde2': `Back`, +'crawls.plural.zero': `crawls`, +'crawls.plural.one': `crawl`, +'crawls.plural.two': `crawls`, +'crawls.plural.few': `crawls`, +'crawls.plural.many': `crawls`, +'crawls.plural.other': `crawls`, +'items.plural.zero': `items`, +'items.plural.one': `item`, +'items.plural.two': `items`, +'items.plural.few': `items`, +'items.plural.many': `items`, +'items.plural.other': `items`, +'pages.plural.zero': `pages`, +'pages.plural.one': `page`, +'pages.plural.two': `pages`, +'pages.plural.few': `pages`, +'pages.plural.many': `pages`, +'pages.plural.other': `pages`, +'comments.plural.zero': `comments`, +'comments.plural.one': `comment`, +'comments.plural.two': `comments`, +'comments.plural.few': `comments`, +'comments.plural.many': `comments`, +'comments.plural.other': `comments`, +'URLs.plural.zero': `URLs`, +'URLs.plural.one': `URL`, +'URLs.plural.two': `URLs`, +'URLs.plural.few': `URLs`, +'URLs.plural.many': `URLs`, +'URLs.plural.other': `URLs`, +'h05165b87bf66fe02': html`Are you sure you want to delete + ${0}?`, +'s2ceb11be2290bb1b': `Cancel`, +'s317006269d0d1476': `Delete Collection`, +'s41203abb9f802a84': `Share Collection`, +'s54bbf34e3e18b439': `Make this collection shareable to enable a public viewing link.`, +'seeb6295e19bc1400': `Collection is Shareable`, +'s0379fc73608ab971': `Done`, +'s11161fdebb62dcc9': `Link to Share`, +'s4708cb91cd6afef0': `This collection can be viewed by anyone with the link.`, +'s0921b07ddda1f1b1': `Open in New Tab`, +'sb8096046172ad45a': `Embed Collection`, +'h7066b35dd7e4517e': html`Share this collection by embedding it into an existing webpage.`, +'h54da0b63b416aa90': html`Add the following embed code to your HTML page:`, +'sdbf249ab40dc18fa': `Copy Embed Code`, +'h648aaa4b436a5970': html`Add the following JavaScript to your + /replay/sw.js:`, +'s4f0cf5a844f978f3': `Copy JS`, +'hf56186ec17103fb3': html`See + + our embedding guide + for more details.`, +'s3f5390ecd7d14626': `Collections`, +'s8af61807443f32a4': `Actions`, +'s10f3845975a0351e': `Edit Metadata`, +'s8975026acabb194d': `Select Archived Items`, +'s1a24424753185138': `Make Shareable`, +'s7e5bf5d1b7f08ba4': `Make Private`, +'s2fe988430f978df3': `Download Collection`, +'s88f9e7f4ecc07ede': `Total Size`, +'sabe8b8c669e05b8d': `Total Pages`, +'s3512b3c95c7a5c3a': `Last Updated`, +'s63d894b1ddb06289': `Description`, +'s80b0d32b285ce4d7': `Edit description`, +'sa5ef80b4bb9b39f8': `Less`, +'s37a9e8aec5713460': `More`, +'s6b33dfbbaf6a2014': `No description added.`, +'s21c76a0f6cae7920': `Row actions`, +'s27914822b37139fb': `Page not found.`, +'s6f6715b26a9dd225': `This Collection doesn’t have any archived items, yet.`, +'sf3f1aa4156bb5055': `Remove from Collection`, +'h2962269031cae049': html`Deleted ${0} Collection.`, +'s1a223f3372970867': `Sorry, couldn't delete Collection at this time.`, +'s26c61deb65da8736': `Sorry, couldn't retrieve Collection at this time.`, +'saccd6920c9253eaf': `Sorry, couldn't retrieve web captures at this time.`, +'sa56f8f1bd9aa64d3': str`Successfully removed item from Collection.`, +'s0df6dbe466eb9399': `Sorry, couldn't remove item from Collection at this time.`, +'sd77c5f8da91d0729': str`Maximum ${0} characters`, +'sa1c466807a6fdfb7': str`${0} character over limit`, +'s8b6894f4bfec27c0': str`${0} characters over limit`, +'se1f5b61904654dba': str`Please shorten this text to ${0} or fewer characters.`, +'s9f8c17b4d595bb2d': `Manage Billing`, +'s5a38b8a21f9d9ab7': `Update Billing`, +'s0e65fdd42d12acb3': `Choose Plan`, +'sbf7e4b6a4db03e2a': `Sorry, couldn't retrieve current plan at this time.`, +'hac630f92c94217bc': html`Your plan will be canceled on + + `, +'sc8fa6bd4dc311b6a': `Monthly quota`, +'s87d8a89eee6ca824': `Subscription status, features, and add-ons, if applicable.`, +'sc93b55ebdda10016': str`You can view plan details, update payment methods, and update billing information by clicking “${0}”.`, +'h1abcffb9335ebc6d': html`To upgrade to Pro, contact us at + ${2}.`, +'s7ec899c7c6213c52': str`Upgrade Browsertrix plan (${0})`, +'s00341480baa290eb': str`Contact us at ${0} to make changes to your plan.`, +'s1d04dbb2d7ee4b9b': str`Contact your Browsertrix host administrator to make changes to your plan.`, +'sf98af5da948f4280': `Usage History`, +'s3fd6cf99e3f6c454': `Starter`, +'s53a526d5c80c3e28': `Standard`, +'scce75a19b57e0095': `Plus`, +'sa45a194b58837e4f': `Active`, +'s88297f67c4182ba0': `Paused, payment failed`, +'sa30c4d3b566b6b1a': `Canceled`, +'s8e067719f45b0458': `Pro`, +'s8e49ef99717ff3d4': str`${0} concurrent ${1}`, +'sd069593586fce913': str`${0} of crawl and QA analysis execution time`, +'s1228a18c03355491': `Unlimited minutes`, +'h9083eded7901e66a': html`${0} + storage`, +'se9ef1815463f8000': `Unlimited`, +'s1d6a13ef53c51ee9': str`${0} per crawl`, +'s41de0883966c23c8': `Unlimited pages`, +'s35ccaf9d67c65607': `Unlimited concurrent crawls`, +'sc27403512c49c425': str`Pro plan change request (${0})`, +'sc2a7f6d40341e683': `Contact Sales`, +'sded4cfc4d8910016': `Browser Default`, +'sefcf950b3cc4fc3b': `Language`, +'sf334547f9650322f': `Select Type`, +'s08513d4147b6cb21': `Matches Text`, +'sd27a8f54aca5d278': `Regex`, +'h8c21d04827e5cb19': html`Regular Expression syntax error: + ${0}`, +'h1a1f28e6632c15d0': html`Please enter a valid constructor string + pattern. See + RegExp docs.`, +'s312a6fda81078718': `Exclusions`, +'s4163bbb813fbc8c9': `Exclusion Type`, +'s682de1f27bbe4d2e': `Exclusion Value`, +'s234f4d8778048245': `Add More`, +'s9fb5a3993c135689': `Remove exclusion`, +'sd3fbc5df51c1beec': `Enter value`, +'sae0550426935cd1e': `Exclusion already exists. Please edit or remove to continue`, +'sbe7425a3b5445ba7': str`Please enter ${0} or more characters`, +'s74abf58e08f32710': `Please enter a valid Regular Expression constructor pattern`, +'s3c6391ad20986b33': `Tags separated by comma`, +'s03aa3cfb08dff960': `Tags`, +'s0e3006648a1a80a5': str`Add “${0}”`, +'sfff90c46fdba31db': `(unnamed item)`, +'s8265788524ca2260': str`${0} daily`, +'s2acb3777ed86adb6': str`Every ${0}`, +'s37a3a294775e081a': str`Monthly on the ${0}`, +'s2bc963c5c7bac2e1': str`Every day at ${0}`, +'s3fc21c0b1ae61eb7': str`Every ${0} + at ${1}`, +'s478f33dea36e1d3f': str`On day ${0} of the month at ${1}`, +'s44f6ab2c6b3cff23': `Default: Unlimited`, +'sf21761e7f8e0550e': str`Default: ${0}`, +'s5ae0226079b4d5fc': `Specify exclusion rules for what pages should not be visited. + Exclusions apply to all URLs.`, +'sa663117885b91a78': `Adds a hard limit on the number of pages that will be crawled.`, +'s4ad6912b1925acb3': `Gracefully stop the crawler after a specified time limit.`, +'s4d0d8767ec20220b': `Gracefully stop the crawler after a specified size limit.`, +'scd0d4a13a709c62f': `Limits amount of time to wait for a page to load. Behaviors will run after this timeout only if the page is partially or fully loaded.`, +'se49a3313529da9ce': `Waits on the page after initial HTML page load prior to moving on to next steps such as link extraction and behaviors. Can be useful with pages that are slow to load page contents.`, +'s332a2eb380d83e9e': `Limits how long behaviors can run on each page.`, +'s60b7cb2386c892ef': `Waits on the page after behaviors are complete before moving onto the next page. Can be helpful for rate limiting.`, +'s750a2fea733037cb': `Choose a custom profile to make use of saved cookies and logged-in + accounts. Note that websites may log profiles out after a period of time.`, +'scd15181280405de6': `Choose a Browsertrix Crawler Release Channel. If available, other versions may provide new/experimental crawling features.`, +'h1a88ca035802fcd0': html`Blocks advertising content from being loaded. Uses + Steven Black’s Hosts file.`, +'h63182e63349f17de': html`Set custom user agent for crawler browsers to use in requests. For + common user agents see + Useragents.me.`, +'s49e094325ac57142': `Websites that observe the browser’s language setting may serve + content in that language if available.`, +'sd5aac2757a442b2a': `Choose a proxy to crawl through`, +'s7d61376257220dab': `Scope`, +'se544485215819946': `Per-Crawl Limits`, +'s90b49a493c7010f0': `Per-Page Limits`, +'s4d34e4682643b600': `Browser Settings`, +'s27fe8e8cd298d71f': `Scheduling`, +'s2fa63aad5fbcf846': `Crawl Time Limit`, +'scbeff7c3e03228ae': `minutes`, +'sf3146e744d4ea35e': `Crawl Size Limit`, +'s09021407b59bfa0c': `GB`, +'s82ec5790418d27f9': `Page Load Timeout`, +'s9eff639fb8a1be0a': `seconds`, +'scc5a8cdbf7cb629f': `Delay After Page Load`, +'s555d700250ee2648': `Behavior Timeout`, +'se4a7507398db6097': `Delay Before Next Page`, +'sec5232d4799e747b': `Block ads by domain`, +'s67a7f67e5f3794a3': `User Agent`, +'s79bcc15b91f1d3e6': `Default: Browser User Agent`, +'s031945e67717bf79': `Save Changes`, +'s990226e15178d959': `Crawl defaults have been updated.`, +'sa7ddb8e5aada5c32': `Sorry, couldn't update crawl defaults at this time.`, +'sc3ac225273c8316b': `General`, +'s9f5a5f23312798f0': `Members`, +'s622421be65bb31bc': `Billing`, +'sbbd1f0c4c2032472': `Crawling Defaults`, +'s121cd82dcf118d06': `Org Settings`, +'h9c83f117a7e3a93f': html`Viewing + ${0}`, +'s52d61e7db1ece998': `Active Members`, +'sf5a8607d6239c964': `Invite New Member`, +'s016f4c5b4036f795': `Current Plan`, +'se2b0d9785502bf55': `Default settings for all new crawl workflows. Existing workflows will not be affected.`, +'sde7ccf17ea362380': `Org Name`, +'s734b679e69b9fe4e': `My Organization`, +'s523d7b042c762733': `Name of your organization that is visible to all org members.`, +'sfe0fcf030a91a7d2': `Custom URL Identifier`, +'s736e0de127d6aba2': str`Org home page: ${0}//${1}/orgs/${2}`, +'s0559157886d79c76': `Customize your organization's web address for accessing Browsertrix.`, +'s719552bdda1832f6': `Org ID`, +'s0d005b5de55948e4': `Use this ID to reference this org in the Browsertrix API.`, +'s68a8a3c2dd867ac9': `URL Identifier too short`, +'sef49aec68fd1dc66': `Name`, +'sd1f44f1a8bc20e67': `Email`, +'sca7fed2bef53cb99': `Role`, +'sdc673e73b5c13aea': `Delete`, +'s4605b8ed548bb31a': `Pending Invites`, +'sea4f08110bb8f15d': `Remove`, +'s94a5b771df7f7661': `No pending invites to show.`, +'saae1c70e168b45b4': `Admin`, +'s3ef62e0bd9bac4d7': `Crawler`, +'s70b4765cad7bc7cf': `Viewer`, +'s4f90ef001514b29f': `Remove org member`, +'s697bd21982bb821b': `Cannot remove only admin member`, +'s48d753e395f68144': `Revoke invite`, +'s05836f33cb2800d5': `org-member@email.com`, +'s35d5a98fef05c2e2': `View archived items and collections`, +'s760d19695f403a5d': `View crawl workflows`, +'sc6c8efa8df64bbf6': `View, replay, and download archived items`, +'s9939658b6f5b3495': `View collections`, +'s7be3d103d0f26a87': `Create, evaluate, and curate archived items`, +'s8985e2eee822a8a8': `All Viewer permissions, plus:`, +'s2305e925ed4b2d44': `Create crawl workflows`, +'sc194ca87fef5ac61': `Create browser profiles`, +'sb600cf68d73b98ca': `Upload archived items`, +'s226f8bd25872aa3e': `Run QA analysis`, +'s3881ec7953629fbc': `Rate and review archived items`, +'s626234b5b44929cc': `Create, edit, and share collections`, +'sed1db7128648b8a3': `Manage org and billing settings`, +'s88d8b1cbbba1acc8': `Manage org`, +'se8dca0132c66ae03': `Permissions`, +'sc5ed422ae1629f52': `All Crawler permissions, plus:`, +'s8b79d2688ae4f717': `Manage subscription`, +'scb7523a42668cd3f': `Manage billing details`, +'s5d990ce1ea8c8042': `Edit org name and URL`, +'s2badff32392c2d7b': `Manage org members`, +'sdf3cd4c01143a4c5': `View and edit org defaults`, +'s2afc9a717c161490': `Invite`, +'s2017def625ae7fbb': `Sorry, couldn't retrieve pending invites at this time.`, +'s7cfdd7b9b1ce6231': str`Successfully invited ${0}.`, +'s53846234c681dace': `Sorry, couldn't invite user at this time.`, +'s63ca31a1df9116e2': str`Successfully removed ${0} from ${1}.`, +'s667558910cf30318': str`Sorry, couldn't remove ${0} at this time.`, +'s0cac3669c233a0ad': `Org successfully updated.`, +'s49f978da9266fe17': `Sorry, couldn't rename organization at this time. Try again later from org settings.`, +'s3178784df91234f5': `This org name is already taken, try another one.`, +'sd391c62881795bdc': `This org URL identifier is already taken, try another one.`, +'sb3f61c2b54e564f7': `This org URL identifier is invalid. Please use alphanumeric characters and dashes (-) only.`, +'h58a74834f0ef0fcb': html`Supports + GitHub Flavored Markdown.`, +'s7a89a316efd4e9c0': str`Please shorten the description to ${0} or fewer characters.`, +'s6ee5d5975cae2ed4': `Edit Collection Metadata`, +'s918e070311f7573c': `Create a New Collection`, +'s7c0283bbbff2ab2f': `You can rename your collection later`, +'s33f85f24c0f5f008': `Save`, +'s866c12ab4f3d1c87': `Create Collection`, +'scd67e2d22e89af48': `Collection Name`, +'sf9e77dd881f8333d': `My Collection`, +'s75a2e5409f11285f': `Publicly Accessible`, +'s529880061faf7209': `Enable public access to make Collections shareable. Only people with the shared link can view your Collection.`, +'s77001a56d74ac617': str`Successfully saved "${0}" Collection.`, +'s0014ed029ed0ef6f': `This name is already taken.`, +'s2f30d4261790b785': `Something unexpected went wrong`, +'sb62f4eaa41f130ab': `What would you like to crawl?`, +'s58672d8bc12bdf2d': `Page Crawl`, +'sc86311564d806b1a': `One or more page URLs`, +'sc33daa5130000a11': `Choose this option if you know the URL of every page you'd like to crawl and don't need to include any additional pages beyond one hop out.`, +'s008f62e40844e6d5': `Site Crawl`, +'s58aa8e5a0a8ef1cd': `Entire website or directory`, +'sa7264597ca290e44': `Specify a domain name, start page URL, or path on a website and let the crawler automatically find pages within that scope.`, +'s6c98d4e4eff5c8bb': `Copied to clipboard!`, +'s3687049d1af562c4': `Copy`, +'sdccd8f78d52d3a87': `Copy to clipboard`, +'sac8252732f2edb19': `Date`, +'saa8aa81ad6f055fd': `Level`, +'s9d6c4c0517894d2a': `Error Message`, +'s1c67a1fa4d07bd8b': `Page URL`, +'sc1214050e2c56ad3': `Log Details`, +'s10fedec3a779ea63': `Timestamp`, +'s4c60317e4731da19': `Starting`, +'s0b01847c8ab4dd76': `Waiting (At Capacity)`, +'sd1615a1ffbc4ca6b': `Waiting (Crawl Limit)`, +'s85994a70cd39166c': `Running`, +'s4f566a3b2235ad29': `Stopping`, +'s1f4459adc67dfb55': `Finishing Crawl`, +'sb4ef767c2f04d346': `Generating WACZ`, +'s0fa473f39f7ec911': `Uploading WACZ`, +'s33c5166e0c903c2d': `Uploaded`, +'sdcda09c20b09b522': `Complete`, +'sbf9c5c5a8e5efad4': `Failed`, +'s6bd79b8079b05bac': `Skipped: Storage Quota Reached`, +'s6b369f478c969b36': `Skipped: Time Quota Reached`, +'sc5fcb9351a03ab2e': `Stopped`, +'sb619a31d460a8c37': `Stopped: Storage Quota Reached`, +'sd440066f6f0992df': `Stopped: Time Quota Reached`, +'sb5d266ab6f2def03': `Stopped: Crawling Disabled`, +'h98fd4ace98188324': html`Removed exclusion: ${0}`, +'s13acc5f8f152f1b6': `Cannot remove exclusion when crawl is no longer running.`, +'s3bccb0cc459670c2': `Sorry, couldn't remove exclusion at this time.`, +'safa05ce541a662af': `Invalid Regex`, +'s0182a351a8a13d9a': `Sorry, couldn't fetch pending exclusions at this time.`, +'s2a288f907fc02eb5': `Exclusion added.`, +'sde68eef7ad059311': `Exclusion already exists`, +'s9563c65bbd7fe609': `Sorry, couldn't add exclusion at this time.`, +'s96450e8470e7ce09': `Crawls`, +'sa27852a4bea47423': `Watch Crawl`, +'s665f4200fb9fc550': `Error Logs`, +'s9d8b8aa2b404c2c8': `Settings`, +'s09075b7d9df189b9': `Workflow not found.`, +'sf612ca852330362b': `Sorry, couldn't retrieve Workflow at this time.`, +'s4409ada9c5c2a7f8': `Inactive`, +'sa84be0d8d11ebe27': `Stop Crawl?`, +'s466e8c1ec1a81a75': `Pages crawled so far will be saved and marked as incomplete. Are you sure you want to stop crawling?`, +'s9f90886fea6a9515': `Keep Crawling`, +'s06a8bb661e53711e': `Stop Crawling`, +'s1954441b28866a31': `Cancel Crawl?`, +'s78f373341662ad89': `Canceling will discard all pages crawled. Are you sure you want to discard them?`, +'s7047060377c6217c': `Cancel & Discard Crawl`, +'se6cd38c76bc4114a': `Delete Crawl?`, +'s7db0f40fc7d6a04d': `All files and logs associated with this crawl will also be deleted, and the crawl will be removed from any Collection it is a part of.`, +'scb57efea186060b1': `Delete Crawl`, +'sc8865a6e612fb020': `Edit Browser Windows`, +'se0e0c906e2ad3b0a': `Crawl Workflows`, +'s4d80f6e1da39d26e': `Edit Settings`, +'s7824618ab2f5160b': `Edit workflow settings`, +'s33807afa94c15a25': `Browser windows can only be edited while a crawl is starting or running`, +'sf0c8f0ef20e0dba2': `Increase or decrease`, +'s8cf2c15722a31ab4': `Downloading will be enabled when this crawl is finished.`, +'s09af18496f032668': `Download Logs`, +'sd9ad53251f2330a5': `Stop`, +'se74c84fa68b23eba': `Org Storage Full or Monthly Execution Minutes Reached`, +'s3e80c83387cea4f1': `Run Crawl`, +'sc75900abc0ec0f82': `Stop Crawl`, +'s68412182ace32912': `Edit Exclusions`, +'s3d9a304e32d9da4b': `Edit Workflow Settings`, +'saae760a5004a02b5': `Copy Tags`, +'s6068ea17740268c3': `Duplicate Workflow`, +'s094bfe263487597f': `Delete Workflow`, +'sad3e3c8146fc920f': `Status`, +'s525d0e58243865e8': `No Crawls Yet`, +'s9b8dccb514a0e34c': `Schedule`, +'sa348b8b53e07a21b': `No Schedule`, +'s4a8134a67288fde0': `Created By`, +'sf72695e8cd91f93c': str`${0} on ${1}`, +'hcb76d3d062f4fe97': html` ${0} + +${1} URL`, +'h0f472740ba5c3c86': html` ${0} + +${1} URLs`, +'s900a5e61e7ade066': `View:`, +'sb090ab524895d2b4': `All Crawls`, +'he775de5878ab0942': html`Crawl is currently running. + Watch Crawl Progress`, +'s76d9944af031bdb3': `No matching crawls found.`, +'sf76674a7d3d83ab2': `No crawls yet.`, +'se72232cb8fce7869': `Pages Crawled`, +'s1582c2bf884b8052': `Run Duration`, +'s1885dd59daa24f31': `Crawl Size`, +'s63dc27cd73a61aa2': `Browser Windows`, +'s5e72081d8c9517b2': `Crawl starting...`, +'s8b33ac8b95791469': `Crawl waiting for available resources before it can continue...`, +'s8764f257cc35167f': `Crawl waiting for others to finish, concurrent limit per Organization reached...`, +'s4cb3d6de6b76708d': `Crawl finishing...`, +'s9faa4c27631001f6': `Crawl stopping...`, +'sb660858279ecdbc7': `Crawl workflow is not currently running.`, +'s2d60617060d16a4a': `Replay Latest Crawl`, +'sb0977bdf896ee15d': `QA Latest Crawl`, +'s0b3d512df6b7e85c': `Crawl is not running.`, +'h27573a6e2ed7211d': html`Viewing error logs for currently running crawl. + Watch Crawl Progress`, +'s31b57d50c6a992ba': `Error logs currently not available.`, +'s639f3dec21008b90': `No error logs found yet for latest crawl.`, +'sb663339526803ecb': `Logs will show here after you run a crawl.`, +'sa641ef4b0f2af2b4': str`Displaying latest ${0} errors of ${1}.`, +'sa7bc374e662a4beb': `Upcoming Pages`, +'s70a238ad69373ab0': `Crawl Queue Editor`, +'s6ae6bdeecf9a5bb9': `Done Editing`, +'sffcdff4dee19a06f': `Change the number of browser windows crawling in parallel. This change will take effect immediately on the currently running crawl and update crawl workflow settings.`, +'sdba2ec5eaf8c5bdb': `Updated number of browser windows.`, +'s4d670721c3e54379': `Sorry, couldn't change number of browser windows at this time.`, +'sc8eda12c58f5d10f': `Sorry, couldn't retrieve all crawl settings at this time.`, +'sb6b7b4847d9c4a52': `Sorry, couldn't get crawls at this time.`, +'s1a20a47c9bf221da': str`${0} Copy`, +'sb751de28d615caad': str`Copied Workflow to new template.`, +'h0e60bb54fe15e7b6': html`Deleted ${0} Workflow.`, +'s6ec009ac55d85d6a': `Sorry, couldn't delete Workflow at this time.`, +'s58aa8e320a4c30f1': `Something went wrong, couldn't cancel crawl.`, +'s199ff7df1e40a103': `Something went wrong, couldn't stop crawl.`, +'s247c148670b82228': `Starting crawl.`, +'s46a31b511363ec98': `Sorry, couldn't run crawl at this time.`, +'s7640b7f154998ccb': `Your org does not have enough storage to run crawls.`, +'sacdcca6c6c2d8dad': `Your org has used all of its execution minutes for this month.`, +'s1f8de71d5ba5627d': `You do not have permission to run crawls.`, +'s972f8ea379345cf8': `Your org doesn't have permission to use the proxy configured for this crawl.`, +'s8674d705840bf3f6': `Successfully deleted crawl`, +'s19a4db351c2fbdec': str`Sorry, couldn't delete archived item at this time.`, +'s6f62c58028d235ff': str`Only org owners can delete other users' archived items.`, +'s29424e3f5e73a2ee': `Sorry, couldn't retrieve crawl error logs at this time.`, +'s6666c5055de36901': `Start typing to search`, +'s0ceeb7d3fb3dfde6': `Keep typing to search.`, +'s1f73928cbbc07cab': `No matches found.`, +'s1853eecbad6d4a0e': `List of Pages`, +'sce375af3e1ad308f': `Pages in Same Directory`, +'sd592eeaabdbd5a46': `Pages on Same Domain`, +'s1547ae4dfa1265ea': `Pages on Same Domain + Subdomains`, +'s083f85625c5d739f': `In-Page Links`, +'sba3df9981f03cb40': `Single Page`, +'s0558979b981b9057': `Custom Page Prefix`, +'sdd8e8047128a2fdc': `Any Page`, +'s5a395b3e48a294bd': `Latest Crawl`, +'s95625bc1d95aa0b8': `Last Modified`, +'s55c00be19b1b3bcd': `Crawl Start URL`, +'s5870292e1ae494dd': `Date Created`, +'s7bd9565ea1a1da14': `Sorry, couldn't retrieve Workflows at this time.`, +'s164c4d58c512c0c6': `Configure crawling defaults`, +'s95daf5c7d10ceb6d': `Edit org crawling settings`, +'sf7397f6287e8520a': `New Workflow`, +'sa403185f2ed90589': `Scope options`, +'s845562f03d066eed': `Something unexpected went wrong while retrieving Workflows.`, +'s9b288e9b7f945b0c': `Sort by:`, +'seca8292e83cb4017': `Reverse sort`, +'sf993bb199fefbe04': `All`, +'sf2d5ffb20d61fcf8': `Scheduled`, +'sa02bab5f570a8afb': `No schedule`, +'s1ea30180f8c26a81': `Show Only Mine`, +'sd1a36c09d6bd4f5f': `Search all Workflows by name or Crawl Start URL`, +'hc226df43ef96e720': html`${0} + +${1} URL`, +'h649ef1ec13735ee9': html`${0} + +${1} URLs`, +'s442425cd7d61051f': `No matching Workflows found.`, +'s39cb621a29eea6d8': `Clear search and filters`, +'se7e46893ef0b3d41': `Could not find page.`, +'sa83bf2a7e5ed33e0': `No Workflows yet.`, +'sac9ae85c05084654': str`Partially copied Workflow`, +'sebba8356f42b6eaa': str`Only first ${0} URLs were copied.`, +'s8745d54f3284f080': `Are you sure you want to cancel the crawl?`, +'s5d966c90d8dc06e6': `Are you sure you want to stop the crawl?`, +'ha60886587b96e32c': html`Started crawl from ${0}. +
+ Watch crawl`, +'sfecdd5e13f68c9ba': `Approved`, +'sef9fb24c04d90f87': `Rejected`, +'s6b78e83ba924d2e7': `Comments Only`, +'s7d7ca36ecef354a5': `In progress`, +'s999c3e25ab32b651': `Select a QA run`, +'s0548c4c522c2f90c': `Severe Inconsistencies`, +'s70a070937662c055': `Moderate Inconsistencies`, +'s9585f280ec52b319': `Good Match`, +'s2234e31926485921': `n/a`, +'s1ab7979099c86a1b': `Analysis Status`, +'sf61d84d4684b9a2e': `Not Analyzed`, +'s047601483e52c192': `Analysis Progress`, +'s984a5e18d85b6d57': str`${0} ${1}`, +'sb59d68ed12d46377': `Loading`, +'s5537cac8d3ba0010': `QA Rating`, +'s34988bb5e08f7962': `Total Analysis Time`, +'s6ac0c20ddc5c15ff': `Pages`, +'sefe1162757e8b5cf': `Analysis Runs`, +'sf3dae3d9f775423e': `Crawl Results`, +'s3a67142f35d9130e': `Non-HTML files captured as pages are known good files that the crawler found as clickable links on a page and don't need to be analyzed. Failed pages did not respond when the crawler tried to visit them.`, +'h8309b5706a9a85ba': html` + ${0} + HTML ${1} + `, +'h7d8f1533bbc700e1': html` + ${0} + Non-HTML files captured as ${1} + `, +'ha312818a16d5146b': html` + ${0} + Failed ${1} + `, +'s3fd6bd99e3f6a5be': `Started`, +'sbb99d4ec27fbb263': `Finished`, +'sf78fab1fe68a47c3': `Started by`, +'sbec5b6441455a810': `No analysis runs, yet`, +'s20bd021257df5b80': `Download Analysis Run`, +'sa0d6d4b00a4a10f1': `Delete Analysis Run`, +'s971c35217bda8e0a': `Delete Analysis Run?`, +'sb11c79fa9c6cb0e4': `All of the data included in this analysis run will be deleted.`, +'sc2007e562d105da2': str`This analysis run includes data for ${0} ${1} and was started on `, +'s08a64b07b54df8d4': `by`, +'scab97c7ea6213c21': `Running QA analysis on pages...`, +'s2b4c64bc0d5fd6ad': `This analysis run doesn't exist.`, +'s049d14439a7f020c': `HTML Page Match Analysis`, +'sc628fbfed893e18c': `You’re viewing the latest analysis run results.`, +'s699f0bd2ff9aaf75': `You’re viewing results from an older analysis run.`, +'sab8b4cbbb1fa71fa': `Current`, +'s542cb71bae166855': `Last Finished`, +'s76cc1c6d9fab3a2d': `Outdated`, +'sa6d797ddb16d0c5d': `Analysis starting`, +'s882dbbc2c22c08f5': `analyzed`, +'sd0ad99175efc2e67': `Match analysis compares pages during a crawl against their replay during an analysis run. A good match indicates that the crawl is probably good, whereas severe inconsistencies may indicate a bad crawl.`, +'s79454494f711e05d': `Statistic`, +'s66f26fdcbe2101eb': `Chart`, +'sdc8e7f2cf5dd00e6': `Screenshots`, +'s2492f5fb1b05b45e': `Text`, +'s78636b92c1a3909c': `Pending`, +'s1c0a0ba9ca354f45': `Incomplete`, +'sc3bfe3a4fe4c13f6': `match`, +'s99f110d27e30b289': `Title`, +'s61eacb19db252f5e': `URL`, +'s0f190df641fecf78': `Most Comments`, +'s25e3c5ac269adaf8': `Recently Approved`, +'s92351d42a885eeb9': `Not Approved`, +'s6995bb72b2e39447': `No page title`, +'s2e192b19ed15fcf6': `Page`, +'sfebfade13f5c4866': `Approval`, +'sdc12d4d35420eeb7': `Comments`, +'s4d3c92a1a881dc5f': str`Review "${0}"`, +'s7282886335497d58': `Newest comment:`, +'s669b18c6d2d9c95b': `None`, +'sc022cfb22694b207': `Sorry, couldn't retrieve archived item at this time.`, +'s3d197283cb019b5a': `Overview`, +'s17845e39451afe17': `Quality Assurance`, +'safc16ad9610c9b47': `WACZ Files`, +'s2734c290e261a94d': `Crawl Settings`, +'s58cfa43fd4318df9': `Download all files as a single WACZ`, +'s7a2da4018fdc9300': `Download as Multi-WACZ`, +'sb32ae1652df8c7ad': `Workflow settings used to run this crawl`, +'sa74e88ae69ff57ca': `Edit Workflow`, +'s252a52330d32b900': `Metadata`, +'sdd5f4eba5c1d833c': `Metadata cannot be edited while crawl is running.`, +'s2e46f937929109fd': `Uploads`, +'sa71de39189a9e9cd': `Go to Workflow`, +'s96c92dc644219e36': `Copy Workflow ID`, +'s0f90731f43e2ac1c': `Download Item`, +'s5ce3f4567e31397d': `Delete Item`, +'s535e3ddaa2c43693': `No files yet.`, +'sb1ccb7808e51e5c1': `No files to replay.`, +'s167f53f89012d24c': `Start Time`, +'s04b8a6cf5711e50f': `Finish Time`, +'sa9e7561cc2d14158': `Elapsed Time`, +'s3ebd69a68ec329be': `Execution Time`, +'sb0ca4190190d41fa': `Initiator`, +'h1dc2f6235d169989': html`Manual start by + ${0}`, +'hdfcda45e7d5c5ab4': html`Scheduled start`, +'s78789724e789221c': `Size`, +'sc592307ea80f16b9': `Unknown`, +'s622fb421a67fa33d': `Crawl ID`, +'sec7059aaa0633ca2': `Crawler Channel (Exact Crawler Version)`, +'s1e2b861185295cbb': `In Collections`, +'se1933d9b37b72bcc': `Backed up`, +'s0ebf17b26bf14b0c': `No files to download.`, +'s9f5fa96cb69dbf70': `No error logs to display.`, +'sc05332c751d49fa1': `Stop Analysis`, +'s1b7a477d96b9a1af': `Cancel Analysis`, +'sea03564788ff7601': `Rerun Analysis`, +'se97287c806479ebc': `Run Analysis`, +'s3c4e37e5ad921484': `No completed analysis runs are available.`, +'sdd0e6007d5cde74e': `Review Crawl`, +'sccf493f23e609bae': `Stop QA Analysis?`, +'sc806ccf9be6b1edf': `Pages analyzed so far will be saved and this run will be marked as incomplete. Are you sure you want to stop this analysis run?`, +'s2f34e9b74f8dc3e7': `Keep Running`, +'se0f7567743f84b08': `Cancel QA Analysis?`, +'sc30660bdd0128dd9': `Canceling will discard all analysis data associated with this run. Are you sure you want to cancel this analysis run?`, +'s98413844b16f5669': `Sorry, couldn't retrieve crawl at this time.`, +'s77b8aee24f2143f1': `Sorry, couldn't load all crawl settings.`, +'sb4bc9654d1402034': `Sorry, couldn't retrieve crawl logs at this time.`, +'sad61764572206873': `Sorry, couldn't cancel crawl at this time.`, +'s3256360646b319fd': `Sorry, couldn't stop crawl at this time.`, +'s4e5aa1d02ccd66f2': str`Are you sure you want to delete this crawl?`, +'s7a8ac0d4fdb945fd': `Starting QA analysis...`, +'sa8a8be5d64bc9f61': `Sorry, couldn't start QA run at this time.`, +'scbb8d1a9ba6fc144': `Sorry, QA analysis is not supported for this crawl as it was run with an older crawler version. Please run a new crawl with the latest crawler and QA should be available.`, +'s1022659c0dc8dc2d': `Stopping QA analysis...`, +'sb7dc70f8590120d9': `Analysis is not currently running.`, +'s6984388e4beabcd1': `Canceling QA analysis...`, +'sd28770d781de4bf2': `Latest Analysis Status`, +'s5dd0167ca221d080': `Last Analysis Run`, +'s383e3adf37d47e4f': `# of Analysis Runs`, +'saf1ddef6935f7778': `Sorry, couldn't retrieve archived items at this time.`, +'sa17d9ca5bd22265d': `Org Storage Full`, +'sd928eb8c36987311': `Upload WACZ`, +'s5fa99b1acb437428': `Delete Archived Item?`, +'s12d426dd14919305': `This item will be removed from any Collection it is a part of.`, +'s25d78bb10386c779': `All files and logs associated with this item will also be deleted, and the crawl will no longer be visible in its associated Workflow.`, +'s039b6434e8a75560': str`Delete ${0}`, +'s96668830629e0dfc': `Upload`, +'sa783d9004df13b20': `Crawl`, +'sf999d4199ff4542d': `Any`, +'s5d5304ab9f2c700f': `Status:`, +'se3bba1b6eb0bcf30': `Search all uploads by name`, +'sffee0bcd6f20d6fd': `Search all crawls by name or Crawl Start URL`, +'sd18fd6a192ab09f9': `Search all items by name or Crawl Start URL`, +'s3cc68dd968072be8': `Copy Crawl ID`, +'s4a0475dbb07f0f0d': `No matching items found.`, +'s2b93a67511243888': `No archived items yet.`, +'s5ff63d8186a80322': str`Successfully deleted archived item.`, +'sc02cbf6ebf0b6cdb': `New Collection`, +'h21e623f674123fc2': html`Are you sure you want to delete + ${0}?`, +'s777098c61f6b518a': `Start building your Collection.`, +'s04200a50c7577767': `No Collections Found`, +'s9f8154ea8167f3f7': `Organize your crawls into a Collection to easily replay them together.`, +'s15aac264eaeac4fc': `Your organization doesn't have any Collections, yet.`, +'s7be481b712fcb089': `Search by Name`, +'s9c2062a6e5e59b93': `Start typing to view collection filters.`, +'sb8102dd29e015556': `No matching collections found.`, +'s739275003674d159': `Collection Access`, +'sa3242c7021e01280': `Row Actions`, +'sf0c64ac402e1e0b9': `No Collections Yet.`, +'s5ac7d4f485d82e8c': `Shareable Collection`, +'sc052d225a3066b68': `Private Collection`, +'sa9c9e33629402ea8': `Something unexpected went wrong while retrieving Collections.`, +'sb4f8acbd7f3df4eb': `Sorry, couldn't retrieve Collections at this time.`, +'s5334c0927cf25b86': `Exit fullscreen`, +'sf4d494dc33755beb': `Interactive Browser`, +'s38272cc7bd101136': `Interact with this embedded browser to set up your browser profile. The embedded browser will exit without saving changes after a few minutes of inactivity.`, +'s9b2bb1407142018e': `Enter fullscreen`, +'sa6117a1376ac5a03': `Interactive browser session timed out due to inactivity.`, +'sa59811ddaf1545bb': `Load New Browser`, +'scc36ba8b82872b7f': `Connection to interactive browser lost. Waiting to reconnect...`, +'sa833dbc13f096dd2': `Toggle visited site list`, +'s2bd6e954998248bd': `Visited Sites`, +'sc5aa44d2c9e6d958': `Websites in the browser profile`, +'s469a4b8dd8b91801': `New Sites`, +'s67e489a6eaaca64d': `Websites that are not in the browser profile yet. Finish editing and save to add these websites to the profile.`, +'sf4d539e610f3a2aa': str`Go to ${0}`, +'sb07ea0d5070f719d': `Crawler Release Channel`, +'s4aa729a672a9ba6c': `Created On`, +'s540bfd8b5a1314fd': `Updated By`, +'se1273d9b375c0cec': `Backed Up`, +'s01c4948ecd700b51': `Not Backed Up`, +'s69ec09431b9c3946': `Browser Profile`, +'s30ef6b3bc73ce7ac': `View or edit the current browser profile configuration.`, +'s940c87c3bb46b8a2': `Configure Browser Profile`, +'sd4ebefb6be69429c': `Cancel Editing?`, +'s63504e7ffb9d5147': `Are you sure you want to discard changes to this browser profile?`, +'sf3dbf3fbaa2dc8f7': `No, Continue Editing`, +'s2cbee244fbacb4e7': `Yes, Discard Changes`, +'s984cf207ea75350f': `Browser Profiles`, +'s527bc3bad26def9d': `Not used in any crawl workflows.`, +'se9b9328201b35732': `(no name)`, +'s6029661d996c9385': `Save Browser Profile`, +'sd5e2609e90cb7fdf': `Duplicate Profile`, +'s739960bae09ec6ab': `Sorry, couldn't preview browser profile at this time.`, +'s6393445b8d0c8338': `Starting up browser with current profile...`, +'s6f6f70a05859338b': `Sorry, couldn't create browser profile at this time.`, +'h132d0ccd2402fb33': html`Could not delete ${0}, in use by + ${1}. Please remove browser profile from Workflow to continue.`, +'ha6f8533fba325287': html`Deleted ${0}.`, +'s6a43c0c6daea3998': `Sorry, couldn't delete browser profile at this time.`, +'s3c262944058333a4': `Sorry, couldn't retrieve browser profiles at this time.`, +'s45b40284fd1bde28': `Successfully saved browser profile.`, +'s2610ab6db9110d0e': `Sorry, couldn't save browser profile at this time.`, +'s4719e6796d840ca4': `Your org does not have enough storage to save this browser profile.`, +'s005e3899acd05fb2': `You do not have permission to edit browser profiles.`, +'s2efb8aa7d17bb334': `New Browser Profile`, +'sab24f3177c0d1479': `Visited URLs`, +'s202f117db06ec8d1': `Sortable`, +'s94c650bef124bd01': `Ascending`, +'s15bdec250a4a55fb': `Descending`, +'s524e95d8a7ac9944': `No browser profiles yet.`, +'s07e46807b4a9183c': str`+${0}`, +'s922123a81f238186': str`By ${0}`, +'s0d2b97026d57ffd0': `Starting up browser with selected profile...`, +'s1a68485acac52eb0': `Edit org settings`, +'sd7cb8be58c9b3603': `Create New...`, +'s91c206764e342fbd': `Crawl Workflow`, +'sa7eea45fe1e4d231': `Collection`, +'sf49525241bba3b06': `Storage`, +'s8f30271298d1c702': `Archived Item`, +'sdabda2230cd87b68': `Crawling`, +'sd15f184f058660bf': `Crawl Running`, +'se9e67cf931e7b60a': `Crawls Running`, +'s0ed063ab73b37012': `Crawl Workflow Waiting`, +'s2dd2d72feacd6d05': `Crawl Workflows Waiting`, +'s19cf4e0395936af4': `Page Crawled`, +'s1c1298026d795ce3': `Collection Total`, +'s768e849d9e12a0bc': `Collections Total`, +'s19bdda7f6e57db4d': `Shareable Collections`, +'s2d32831106560c5b': `Storage is Full`, +'sd158a5fc0f062f18': `Available`, +'sa17899510bcc6527': `gigabyte`, +'s30ae03472b93dc47': `Profiles`, +'sd65ca9dddbbb3e26': `Execution Minutes Quota Reached`, +'s343f0419454a4243': `remaining`, +'s1e5485ef2e9f9384': `time`, +'sbcb34a98c7e2bffa': `Monthly Execution Time Used`, +'s190acfed45a89552': `Gifted Execution Time Used`, +'se25cbbec3ae5366d': `Extra Execution Time Used`, +'se9999d2382dfc215': `Monthly Execution Time Remaining`, +'sf02eff827e8582fd': `Sorry, couldn't retrieve org metrics at this time.`, +'s30a6b741fdc68a97': `Resource Type`, +'sf03a57a37dea5f72': `Good During Crawl`, +'sa82e2a0507bb9592': `Bad During Crawl`, +'s49d37b069de1b651': `Good During Analysis`, +'sc8c67c7d3923c8f1': `Bad During Analysis`, +'sfbe3af6e8db73479': `All Resources`, +'s4baded305e206aa6': `Good:`, +'sf6f647260bc3214a': `Success (2xx) and Redirection (3xx) status codes`, +'sc156a7a7a89f87c6': `Bad:`, +'sb8a3c85221a8cc57': `Client error (4xx) and Server error (5xx) status codes`, +'sb93da28b5c60c57f': `Screenshot not available`, +'s4467f80d499a8311': `Screenshot during crawl`, +'sa0c75059b7f6345c': `Screenshot during analysis`, +'s4a5260a2b43369f4': `Screenshot Match`, +'sf32384611e0882ed': `No Screenshot Diff`, +'sff04d43695052343': `Extracted Text Match`, +'s1dfeef2f2cb848e4': `No Extracted Text Diff`, +'s5d6510e3595aea19': `Resources Loaded (Crawl)`, +'s1c420911a78de4b0': `No Crawl Diff`, +'scfedabcfdc620cbb': `Resources Loaded (Replay)`, +'s524749212a383ee8': `No Replay Diff`, +'s407b9645da0e7f67': `Missing text: Crawl`, +'s593d4457a9d6d44d': `Added text: Crawl`, +'s98532a4306876047': `Identical text`, +'se9d0193e43eeb2c0': `Added text: Analysis`, +'seabc8e57fd94b4e6': `Missing text: Analysis`, +'sbbbb22ec10aa988c': `Text data not available`, +'s0415c19e486bf57c': `Text extracted during crawl`, +'s7da7beefe9323ff7': `Text extracted during analysis`, +'s0686beeebd4ed8cb': `Text Match`, +'s2344bb018c2ade99': str`Showing all ${0} pages`, +'sd2afbd920020fe6d': str`Showing ${0} of ${1} pages`, +'sd7c439303c5c7045': `No matching pages found`, +'s929e7f1e8b36f974': `Best Screenshot Match`, +'s675fe36f0899f519': `Worst Screenshot Match`, +'s81ea3c33b0eb6ac3': `Best Extracted Text Match`, +'s3067258df765240a': `Worst Extracted Text Match`, +'s3bfcd1bea9cef454': `Approval:`, +'s1fb123372f4fb6f1': `Approved, Rejected, or Commented`, +'s151e5217f41eb71f': `Commented`, +'s94116b0928ce71f0': `QA rating`, +'se5d01bef737e2e3a': `Approve`, +'saf84ec86139d349e': `Comment`, +'s123da0f92f97dd86': `Reject`, +'s7af4c82fbda65fb8': `Sorry, couldn't submit page approval at this time.`, +'sfc53e352afbca881': `Review`, +'sd813c96a1d891cdc': `Select Analysis Run`, +'s9b06bb424f641aa7': `Exit Review`, +'sae3f811a877eda3d': `Reviews are temporarily disabled during analysis runs.`, +'sd86a0df0354a191e': `Finish Review`, +'s30dc103481da2c63': `Previous Page`, +'s52848747f6720ab6': `Approvals are temporarily disabled during analysis runs.`, +'sd1dd00fc6f052e83': `Next Page`, +'s33270858c507edc3': `Page heuristics`, +'sa93c79c575088852': `Resources`, +'s17ea9dd97d788aa4': `Page Comments`, +'s6a69b77aacc204a8': `Submit Comment`, +'s1aa8ee48aadb4de1': `QA Review`, +'s955269ebe3fb8ffc': `Rate this crawl:`, +'sf238b90665620a88': `Excellent!`, +'s8d86b131628669ce': `This archived item perfectly replicates the original pages.`, +'sc40cd77e0d29dbf8': `Good`, +'s9f474beaa66f0e89': `Looks and functions nearly the same as the original pages.`, +'s198f498517ea3a13': `Fair`, +'se63df4037b90e036': `Similar to the original pages, but may be missing non-critical content or functionality.`, +'sb349f019a716a4fd': `Poor`, +'s78fe03ba909b5fdb': `Some similarities with the original pages, but missing critical content or functionality.`, +'s16413e19b0f07a18': `Bad`, +'s14bfcce8cd64daa1': `Missing all content and functionality from the original pages.`, +'saedfe28e1aa52a54': `Update archived item description?`, +'s32dd03dcd377904e': `No description, yet`, +'sbf9c9810624e0c87': `Submit Review`, +'s6d7c9c2bb994f236': str`Comments (${0})`, +'s3732b439b691ea10': str`${0} commented on ${1}`, +'s36012a8db93560f3': `Delete comment`, +'s1b8e8cb412ed3b9e': `Add a comment`, +'sa7817227bd6cae5b': `Enter page feedback`, +'sa6f04f2271f5c923': `Reload Replay`, +'sde1645eba260b3df': `Reload page`, +'s388e286f3911e3cf': `Toggle screenshot wipe view`, +'s7381233b8fceb3a6': `Loading page`, +'s4f5aff57a099f200': `Navigation prevented`, +'s106806b78c8a9e8c': `Following links during review is disabled.`, +'scbfea985fa196a60': `Sorry, couldn't add comment at this time.`, +'s2b9d114436d10a68': `Sorry, couldn't delete comment at this time.`, +'s7bded53458ce71de': `Sorry, couldn't retrieve analysis runs at this time.`, +'s0892cc244e973091': `Sorry, couldn't retrieve page at this time.`, +'s5697a73d7e82ea32': `Sorry, couldn't retrieve pages at this time.`, +'s8aad22226aba8470': `Saved QA review.`, +'s36fd1256980b5f58': `Sorry, couldn't submit QA review at this time.`, +'sede6d0c607d400db': `New Crawl Workflow`, +'s51691497846184b2': `Setup Guide`, +'saa63c0c9ca0eac98': `You don't have permission to create a new Workflow.`, +'sf255d6c5d5851c6e': `Workflows that use this browser profile will behave as if they have logged into the same websites and have the same web cookies.`, +'habe03840abb41da5': html` + It is highly recommended to create dedicated accounts to use when + crawling. For details, refer to + + ${0}. + `, +'se058d83e4b3bad9e': `browser profile best practices`, +'h6c440abb1e1a7d78': html`Extending ${0}`, +'s3b397808715b71d8': `Cancel Profile Creation?`, +'sbe21fe708139ddb1': `Are you sure you want to cancel creating a browser profile?`, +'s6f639f93c6d08688': `No, Continue Browsing`, +'sb0e5f1e84807f5de': `Yes, Cancel`, +'sf2b2832a3c346a5b': `Save New Profile...`, +'s5aa589cb3acb8d01': `Example (example.com)`, +'s9669bd7587b7c11a': `My Profile`, +'s29551e433eb649e6': `Optional profile description`, +'see7858af9d37f505': `Example (example.com) login profile`, +'sc93a9aa3e5bcbf5d': `Save Profile`, +'s56f260de740bbd75': `Successfully created browser profile.`, +'saa0111d08ab1c92a': `You do not have permission to create browser profiles.`, +'s66ea9952bbd68025': `Sorry, couldn't retrieve organization at this time.`, +'s0726c5784ccf9222': str`Successfully updated role for ${0}.`, +'scc21a97f5f1b13b0': str`Sorry, couldn't update role for ${0} at this time.`, +'saafb6030ac4b40dd': str`Are you sure you want to remove yourself from ${0}?`, +'s1ae7988ed93b0a32': `0 seconds`, +'sbef1b56d0a7fa38b': `(default)`, +'s68eac1025cee6964': `Crawl Scope`, +'s4ab09f62524380b9': `Max Pages`, +'sa6c0603a4209dcfa': `Auto-Scroll Behavior`, +'s66722bc2ea775e05': `Disabled`, +'s2ca35daaa4e03216': `Enabled (default)`, +'sacf95026f82adb10': `No custom profile`, +'s38daf2fb241d8bbb': `Block Ads by Domain`, +'sf9b685a4616f291f': `Browser User Agent (default)`, +'sb8dd788adf7b907b': `Proxy`, +'s78a3454dadf068cf': `Crawl Schedule Type`, +'s063b2ed6541c9181': `Run on a Recurring Basis`, +'s4bd63450e427cc68': `Page URLs`, +'s34e90e6353b56f58': `Include Any Linked Page (“one hop out”)`, +'s00147a7c30a80117': `Extra URL Prefixes in Scope`, +'s396f09e6ec318187': `Max Depth in Scope`, +'s00952de51c229a2e': str`${0} hop(s)`, +'s9ecb6da2267389f4': `Unlimited (default)`, +'sa3a6465ecf8740fb': `Check For Sitemap`, +'sebf185d3ee56b47f': `Additional Page URLs`, +'scb489a1a173ac3f0': `Yes`, +'s09205907b5b56cda': `No`, +'s5c60254028976b28': `Not specified`, +'sd4973818277def8b': `Collections not found.`, +'s60a67fa21821066c': `Sorry, couldn't retrieve Collection details at this time.`, +'sa1d4559f0fcc5219': `Remove file`, +'s452f791e0ff6a13e': `Hide password`, +'s2f7f35f6a5b733f5': `Show password`, +'sfe7c07c43a065520': `Very weak password`, +'sfe4bd9efa5b792aa': `Weak password`, +'sddb80d4918810289': `Acceptably strong password`, +'s228261677fd5d365': `Very strong password`, +'s8ea5128c2bf4fdf6': `Please choose a stronger password`, +'sc2e2da3280dd60b5': `Suggestion:`, +'s0417c8d0f786c9a0': `Suggestions:`, +'s46095ee558ac3b51': `Tip: To generate very strong passwords, consider using a password manager.`, +'sc966d49eebca4286': `Latest`, +'se19df7d58cd5fff7': `Version:`, +'saf8787e5652ecdfa': `Sorry, couldn't retrieve crawler channels at this time.`, +'s237f0a38a4c51a36': `Crawler Proxy Server`, +'s2d84a282e9aa4c24': `Default Proxy:`, +'sa7d29818c0933c2a': `No Proxy`, +'s59675d3bb2b7b629': `Description:`, +'s22bb367ab94a971e': `Sorry, couldn't retrieve proxies at this time.`, +'s48e186fb300e5464': `Time`, +'s09085707b5a0d793': `AM`, +'s09421b07b5d1e9e6': `PM`, +'sb41b2cfbbc52565b': `Created`, +'s466e48320d0fb4fb': `Bytes Stored`, +'sd805db60d62be7a1': str`Quotas for: ${0}`, +'sfba7b662681a9f92': `Max Concurrent Crawls`, +'s3f807ba2fb999331': `Max Pages Per Crawl`, +'s2557cf3e70ee62dc': `Org Storage Quota (GB)`, +'s8a803831f3ac3903': `Max Execution Minutes Per Month`, +'scff5f61c6f6be0ba': `Extra Execution Minutes`, +'s2e4512cebe8e8b39': `Gifted Execution Minutes`, +'s2e1b51c1697ca361': `Unlabeled`, +'s4e6bdb6d5910dd35': `Update Quotas`, +'s438a40049bb04715': str`Proxy Settings for: ${0}`, +'s234e4c06c8c1aada': `Enable all shared proxies`, +'sa166018e0e9d30e9': `Update Proxy Settings`, +'s8d7a8a8d9ff3a0c7': str`Disable Archiving?`, +'h66cb67cd841f4beb': html`Are you sure you want to disable archiving in + ${0} org? + Members will no longer be able to crawl, upload files, create + browser profiles, or create collections.`, +'sdc8e0ecdba53dccc': `Slug:`, +'see2872cc86489f3e': `Members:`, +'saa29a2ac03cd9d19': `Reason`, +'s67f9c55472e78c8a': `Enter reason for disabling archiving`, +'s159812ca2edc12a2': `Disable Archiving`, +'s2f2866981870fee3': str`Confirm Org Deletion: ${0}`, +'hbc605ddee9667ea5': html`Are you sure you want to delete + ${0}? This + cannot be undone.`, +'h88cfbf4cb1b57616': html`Deleting an org will delete all + + + + of data associated with the org.`, +'hc95f75343ebc2ce0': html`Crawls: + `, +'h9e8c0254131f987c': html`Uploads: + `, +'hc4433ba5eba156e2': html`Profiles: + `, +'se49bbaeabfd85d48': str`Type "${0}" to confirm`, +'s91622815dce6a0ec': `Delete Org`, +'s3eab2ed27de13f27': str`Archiving in "${0}" is disabled.`, +'s2da2e2eba00d0f28': str`Archiving in "${0}" is re-enabled.`, +'s42dfcfdcb5aee47e': `Sorry, couldn't update org archiving ability at this time.`, +'s4b9eccf40f4a605d': `Sorry, couldn't get all proxies at this time.`, +'s081029829332df74': str`Org "${0}" has been deleted.`, +'s4de74a2a08a74bff': `Sorry, couldn't delete org at this time.`, +'sd8adbc60f2886b80': `Issue`, +'s9dbcb696452981eb': `Active with issue: Storage quota reached`, +'sf86e8d4cc5fbc13d': `Active with issue: Execution minutes quota reached`, +'s0fa3391db68e4425': `disabled`, +'s37e449970d4403d8': `Archiving Disabled:`, +'s020efa9f4b5c78e0': `Archiving Disabled (no reason specified)`, +'s11326fd2590f4e5e': `Default`, +'sb1405111ed0fb19e': `Edit Quotas`, +'sc36b98f91a3e8631': `Edit Proxies`, +'s9e437ca7310a2c69': `Re-enable Archiving`, +'sec77d4da6a57f2b7': `Page not found`, +'s492e6fe0b20b7ebd': `Beta feature`, +'s2f4b78e72a3aa936': `This part of Browsertrix is in beta!`, +'sd5498363c7a9c870': `Parts might change or be broken. Please share your thoughts with us!`, +'sa0b562a796b69487': `Beta`, +'s4201222224dff23c': str`Crawl: ${0}`, +'s0eb7c300368b2a58': str`Upload: ${0}`, +'s24761a0cc8d9c0aa': `Organization`, +'s6c6e1788cde76cc2': `Select an org`, +'s318065b4139dd6d9': `Required for first member`, +'s13786b2be911ee8b': `person@email.com`, +'s67a47f83f4c07f04': `Enter your email`, +'s115ed3de58eca847': `you@email.com`, +'sf6e1665c7022a1f8': `Password`, +'se7e0859bf0c563fe': str`Choose a strong password between ${0}–${1} characters.`, +'sa9d1dd5d6142477d': `Your name`, +'s1a8bd8fe18bfdf7c': `Your full name, nickname, or another name that org collaborators can see.`, +'s321c03399a143242': `Create Account`, +'sfaf43af702f5d344': `Invalid password. Must be between 8 and 64 characters`, +'sb85b1e36579852a6': `Invalid email or password`, +'sefaaf09fe409d0cc': `User is already registered, but with a different password.`, +'s0e9aa8d89165481b': `Not applicable`, +'s0382d73823585617': str`${0}: ${1}`, +'s9fdb0be4e08e3609': str`QA Analysis: ${0} (${1}% finished)`, +'s9087c0239aa5bd6d': str`QA Analysis: ${0}`, +'s2fb39b9ba9441537': str`${0} crawled, ${1} found`, +'s1a8b76905717bc34': str`Last run started on ${0}`, +'sa0ffc3feac61fcc4': str`Rated ${0} / ${1}`, +'s4e31ba44d4056425': `No QA review submitted`, +'se661780e1199546f': `QA Analysis Runs`, +'s92921878e886e36d': `Duration`, +'s3c162d34398019aa': `Collection Auto-Add`, +'s68291c1557198475': `Search by Collection name`, +'s7cbfe1eb01181972': `Start typing to search Collections.`, +'sabcad5f4717bc336': `No matching Collections found.`, +'s125a86b2f45bbb25': str`${0} items`, +'s849f950e0b812cf4': `Remove from auto-add`, +'sa777c574a8222f0f': `Add to Collection`, +'s84f53a9ae5b34f78': `Successfully saved crawl details.`, +'s9e5ae4184a72363a': `Sorry, couldn't save crawl details at this time.`, +'sf32f25806ba4fd81': `Pending Exclusions`, +'s1eee55ca9401677a': str`+${0} URLs`, +'s2bdd9994851a31c4': str`+1 URL`, +'s28d7266643f5992f': `No matches`, +'s96a817ae5ad03253': `No matching URLs found in queue.`, +'sbbdd27eea29fea6f': `Start typing an exclusion to view matching URLs in the queue.`, +'sdbd27d37273261f2': `Queued URLs`, +'se7f351ae6cbb41f0': str`Queued URLs from 1 to ${0}`, +'h077c8fe82a78c616': html` + Queued URLs from + + to ${3} of + ${4} + `, +'s4dfaf5cfc90f8493': `No pages queued.`, +'s8e853be463b322f0': `End of queue`, +'s7584ded3d749c75e': `Load more`, +'s813262fab638bbfc': str`-${0} URLs`, +'s6c4a20fdba7af262': str`-1 URL`, +'s2342004e9c7c2f6a': `Sorry, couldn't fetch crawl queue at this time.`, +'s5db7bd625b7a6a49': `File to Upload`, +'sd784144d0c062bd0': `Browse Files`, +'s807ea65f0643e257': `Select a .wacz file to upload`, +'sc60cfa93d82aa39c': `Our Website (example.com)`, +'s962895dbdd4ad0b7': `Cancel this upload?`, +'se7692167f1edeef2': `Uploading...`, +'s1ff918403135632b': `Keep this window open until your upload finishes.`, +'hb8ae169d4ea6d7a3': html`Successfully uploaded ${0}.
+ View Item `, +'scccaadc44687f6bf': `Sorry, couldn't upload file at this time.`, +'s13df06b5e1720f7f': `Your org does not have enough storage to upload this file.`, +'s52d81506be796d67': `Filter by name`, +'s0b030282c6ff15dd': str`Create a New Browser Profile`, +'s31173036c8f30b4c': `Starting URL`, +'s837b2b5793a240b3': `https://example.com`, +'s4efd5471466a0988': `Start Browsing`, +'s726c436f1051f770': `Starting up browser for new profile...`, +'sb91d1be10eb2c7da': `Last updated`, +'sadfb54de733655c9': `Using proxy: `, +'s1ee610c805b33e8e': `Check Profile`, +'sb1b1656b3a49e81a': `View Profiles`, +'s4e59c71197f2a840': `This org doesn't have any custom profiles yet.`, +'sd8c5a340f076fd18': `Create profile`, +'sfd20092783b9309d': str`${0} / ${1} crawl`, +'sd6a07c24d3ae246a': str`${0} / ${1} crawls`, +'sea0ac3af5d7a3071': `0 crawls`, +'sdfbbc387c71bad18': `Auto-Add`, +'s1b210718400e7ea8': str`${0} page`, +'s279de934d8a18e21': str`${0} pages`, +'s514cde9d19a9adc5': str`Started by ${0}`, +'s9b31004ff434426e': `Crawl Finished`, +'saa33768e03c45fc8': `File Size`, +'sf51117c57a1110ec': str`in ${0}`, +'sf27239dda9b1416d': str`Crawls in Collection (${0})`, +'sa3d5a7186b818303': str`All Workflows (${0})`, +'s49730f3d5751a433': `Loading...`, +'sd7d35ab49e07fe79': str`Uploads in Collection (${0})`, +'s84c2e4081c2bf6d7': str`All Uploads (${0})`, +'s1e2b42118528e92f': `In Collection?`, +'sa03a63e319c2f89b': `No matching uploads found.`, +'s06d6c6dc05578422': `Only items in Collection`, +'s8a6f4e542c686466': `Only mine`, +'s13e37d380ccd180d': `No changes to save`, +'s8ad4a17ab2b75854': str`Adding ${0} ${1}`, +'s4a0cbea3f0b22976': `Save Selection`, +'s18471d24ae3141ba': str`Successfully saved archived item selection.`, +'sc9e34cb12aab0e3a': str`Updated.`, +'s83c70a729f1dd241': `Something unexpected went wrong, couldn't save auto-add setting.`, +'s771d6468b1e5ae7f': `Run on a specific date & time`, +'sb407b40e2e7a98c1': `Run on a recurring basis`, +'s4d1422b9bc3d0a7e': `Daily`, +'s1ed5bb575207cece': `Weekly`, +'s046a35bfdd88a596': `Monthly`, +'sb15d4f1e13d04925': `Limits`, +'s980b48ea42f59abe': `Review Settings`, +'hf77ba6b1d74e2cdb': html`Fields marked with + * + are required`, +'s5f94c84437a8594c': `Form section contains errors`, +'sf39dc9c47c9ff82c': `Changes in all sections will be saved`, +'s814a0cb8f2908f75': `Save Workflow`, +'s74e4c44c09eaa53a': `Previous Step`, +'sc2c5b518e1f5c85a': `Next Step`, +'sf4626f0918c0d6a0': `Review & Save`, +'s9645fd859ac5dbd8': `Run on Save`, +'s7af85d601db244a7': `Tells the crawler which pages it can visit.`, +'se1e6d1d7a1a133e9': `Exclude Pages`, +'scbd664e4049d11f3': `Specify exclusion rules for what pages should not be visited.`, +'s262c31c801cfbcd9': `Please enter a valid URL.`, +'s12e1314dc1f74824': str`The URL of the page to crawl.`, +'s0cd2df7d9d95ae68': `At least 1 URL is required.`, +'s41d2278219615589': str`The crawler will visit and record each URL listed here. You can enter up to ${0} URLs.`, +'s150f5e42dc1aad38': `Include any linked page (“one hop out”)`, +'sfc5e402f8b21ef5f': `If checked, the crawler will visit pages one link away.`, +'hef8020bab2159211': html`Will crawl all pages and paths in the same directory, e.g. + ${0}${1}/`, +'hed4c39f98af5c58f': html`Will crawl all pages on + ${0} and ignore pages + on any subdomains.`, +'ha8f0ffdb034da2d1': html`Will crawl all pages on + ${0} and + subdomain.${1}.`, +'hba1eb91e4626e056': html`Will crawl hash anchor links as pages. For example, + ${0}${1}#example-page + will be treated as a separate page.`, +'h2303b42f0dff5ee4': html`Will crawl all page URLs that begin with + ${0}${1} + or any URL that begins with those specified in + Extra URL Prefixes in Scope`, +'s285f35c68ab11461': `The starting point of your crawl.`, +'s09a8c053783eafa0': `If the crawler finds pages outside of the Crawl Scope they + will only be saved if they begin with URLs listed here.`, +'s406e05cc7ea70f01': `hops`, +'sb43ce2ffe2a4857f': `Limits how many hops away the crawler can visit while staying within the Crawl Scope.`, +'sba156796788dc6c2': `If checked, the crawler will visit pages one link away outside of + Crawl Scope.`, +'sf092ad58edfa163b': `Check for sitemap`, +'s4caffd8aa426781c': `If checked, the crawler will check for a sitemap at /sitemap.xml and use it to discover pages to crawl if present.`, +'s2279075e18f7dd74': `Additional Pages`, +'sdd5dbd4b0fef8660': str`Must be more than minimum of ${0}`, +'sa4f9d4099c408ae6': str`Must be less than maximum of ${0}`, +'sab01daa76a48769f': `pages`, +'s9d84cf47af31a3ba': `Auto-scroll behavior`, +'sd412fd49fb930199': `When enabled the browser will automatically scroll to the end of the page.`, +'s9a3cc9f85491f80b': `Increase the number of open browser windows during a crawl. This will speed up your crawl by effectively running more crawlers at the same time.`, +'s5149476b5ea0a1b9': `See caveats`, +'s4dc337bffda2ec4d': `Crawl Schedule`, +'se92749db624c8982': `Configure crawls to run every day, week, or month at a specified time.`, +'sf94cd0bf25284668': `Set Schedule`, +'s4bfaefac9bc26241': `Frequency`, +'s680d6fc47b06b8b5': `Limit the frequency for how often a crawl will run.`, +'se0955919920ee87d': `Day`, +'s88d3b00e313183b5': `What day of the week should a crawl run on?`, +'sb4ab7b002d655ce9': `What day of the month should a crawl run on?`, +'h8c7c3a6e07d7c512': html`Schedule: + ${0}.`, +'se0baa9b7fb0768e4': `Invalid date`, +'h30728ea4302f7fe9': html`Next scheduled run: + ${0}.`, +'s4174899261b8b308': `A crawl will run at this time in your current timezone.`, +'s0d56a24ca72b8e48': `Customize this Workflow's name. Workflows are named after + the first Crawl URL by default.`, +'sa8e78592c1db6c3a': `Provide details about this Workflow.`, +'s163480f4b18e39c0': `Create or assign this crawl (and its outputs) to one or more tags + to help organize your archived items.`, +'s68f29315fcc19b3b': `Search for a Collection to auto-add crawls`, +'s54100e0807a1e40d': `Automatically add crawls from this workflow to one or more collections + as soon as they complete. + Individual crawls can be selected from within the collection later.`, +'s0e598010b73d1398': `There are issues with this Workflow. Please go through previous steps and fix all issues to continue.`, +'s0a81f678a90d8133': `There is an issue with this Crawl Workflow:`, +'h94a6d35ca79705c4': html`${0} + required in + Scope. `, +'sdd3e1b91cb27a4d5': `Page URL(s)`, +'s67b76d03e88b5990': `Please fix to continue.`, +'s265a8f6e25a8c5f2': `Workflow created.`, +'s6f5d63a06a530e47': `Crawl started with new workflow settings.`, +'sb59e91f2312fbb0b': `Workflow updated.`, +'scb2c6b3674a42128': `Workflow saved without starting crawl.`, +'s429899b1dcafcad4': `Could not run crawl with new workflow settings due to already running crawl.`, +'s286331d9358fc509': str`Seed URL ${0}: `, +'s08dd397493a013b1': `Couldn't save Workflow. Please fix the following Workflow issues:`, +'sea5eee53e296f33b': str`${0} URL entered`, +'sfa75e464c2da4bba': str`${0} URLs entered`, +'s960e671fe5f2559b': str`Please shorten list to ${0} or fewer URLs.`, +'s40b5b363fefc9199': str`Please remove or fix the following invalid URL: ${0}`, +'saf63d34c8601dd41': str`${0}`, +'s136b21dec9a221bd': str`Manual run by ${0}`, +'sde7cc417de1b3246': `---`, +'sa84bc532c73403ed': str`Running for ${0}`, +'s8eb4021572d41d99': `Name & Schedule`, +'sc154fb69dffcdef9': `billing settings`, +'s71c5c2d34bb2c4c2': str`Your org will be deleted in + ${0} days`, +'s7fa0d24b94690373': str`Your subscription ends on ${0}. Your user account, org, and all associated data will be deleted.`, +'h16be212de6638b6c': html`We suggest downloading your archived items before they + are deleted. To keep your plan and data, see + ${0}.`, +'sc3e0d8cbe688ccd5': str`Archiving will be disabled in ${0} days`, +'sda57befc109a45f6': `Archiving will be disabled within one day`, +'s618b35a93b6fd392': str`Your subscription ends on ${0}. You will no longer be able to run crawls, upload files, create browser profiles, or create collections.`, +'hf17c5369da37401b': html`To keep your plan and continue crawling, see + ${0}.`, +'sfb85ab2a166e4c99': str`Archiving is disabled for this org`, +'habd962339c5b3e55': html`Your subscription has been paused due to payment failure. + Please go to ${0} to update your payment method.`, +'s4e6c7f0a1e774fea': `Your subscription has been canceled. Please contact Browsertrix support to renew your plan.`, +'s320cc6d25ddbc36f': `Please contact Browsertrix support to renew your plan.`, +'s06dfdacf184fe26a': str`Your org has reached its storage limit`, +'s7b663782f7f35eb8': str`To add archived items again, delete unneeded items and unused browser profiles to free up space, or contact ${0} to upgrade your storage plan.`, +'sf3a7cc6ecc194453': `Browsertrix host administrator`, +'sd25ec176e0dbfa6d': str`Your org has reached its monthly execution minutes limit`, +'s10a8d7c57c09ca1b': str`Contact ${0} to purchase additional monthly execution minutes or upgrade your plan.`, +'seb2d088a92660d77': `No usage history to show.`, +'sb47daaf9e1c4a905': `Month`, +'s79ab9c8346b9be59': `Total duration of crawls and QA analysis runs, from start to finish`, +'sea9560007df1aaa9': `Aggregated time across all browser windows that the crawler was actively executing a crawl or QA analysis run, i.e. not in a waiting state`, +'sc1a83f0d03f25927': `Billable Execution Time`, +'se2ec05b5a091819b': `Execution time used that is billable to the current month of the plan`, +'s599754097e848667': `Rollover Execution Time`, +'s9ca038237c7e3f8a': `Additional execution time used, of which any extra minutes will roll over to next month as billable time`, +'s77c5956de0c7b221': `Gifted Execution Time`, +'s39a11e7a4beab91d': `Execution time used that is free of charge`, +'s43b124b5dcec3779': `Excellent`, +'s047852d575e8d720': `Admin dashboard`, +'scdb1bac161852c73': `Welcome`, +'s98a92b0ff61e893b': `Go to Crawl`, +'s2cf63ec9357621f3': `Enter Crawl ID`, +'s09023907b59c38eb': `Go`, +'sb8e7753cf636ad38': `All Organizations`, +'s0b93e1d76ac26914': `New Organization`, +'s8743a99bf24efa16': `Invite User to Org`, +'se5a07b8c6d549acb': `Start typing to see availability`, +'scf7d1d9927633a59': `This org name is available`, +'s8540e7dd50ec3a5d': `This org name is taken`, +'s8fdbf5db84bb1bfb': `Create Org`, +'sbe1f0c780a5b311d': `Invite sent!`, +'sa2059dea9346101d': `View org members`, +'sc4adfb73a9bc10d1': `This org name is already taken.`, +'s1184d1f63618dc4e': str`Created new org named "${0}".`, +'sf1c2a4776e202435': `Sorry, couldn't create organization at this time.`, +'s8f392679ac01fa81': `Successfully signed up`, +'s694b98572e690336': `Click the link in the verification email we sent you to log in.`, +'s5e6b698a2ec87331': `Sign up`, +'s67c74844cd95f5fe': `Sign in with password`, +'s7d44a141de0e2c9b': `Forgot your password?`, +'sca974356724f8230': `Log In`, +'s050344ebd2ce4a8b': `Please wait while Browsertrix is initializing`, +'s9ada74585cd89b16': `Your email address`, +'sb6f5b47cf81180bc': `Request password reset`, +'sbf550ad9b31a5f6d': `Sorry, invalid username or password`, +'s4bea5e0591ea1cf6': `Sorry, too many failed login attempts. If this is a valid email, a reset password link has been sent to your email.`, +'s43ae2b49c3470555': `Something went wrong, couldn't sign you in`, +'sd3fd65e8d242ed24': `Successfully received your request. You will receive an email to reset your password if your email is found in our system.`, +'s6d37a6bebbc3f8a8': `That email is not a valid email address`, +'s9689f44e0a49b830': `Date Started`, +'s2056041ac63786fc': `Running crawls`, +'sce252e7b2e662cc5': `All Running Crawls`, +'sa8d4790d89fbcb7d': `Any Active Status`, +'sf777c154340d04b4': `View Crawl Settings`, +'sbf18806bc43052fa': `Sorry, couldn't retrieve crawls at this time.`, +'sdfcb755990df2126': `Set up your organization to start crawling.`, +'s15256ad4732bbe6e': `Finish setting up your Browsertrix account to start crawling.`, +'h22769969c5066f85': html`You’ve been invited by + ${0} + to join the organization + ${1} + on Browsertrix.`, +'h406ea2eff53edcfb': html`You’ve been invited to join the organization + ${0} + on Browsertrix.`, +'s07cee0cdf942df03': `Step 1 complete`, +'s4b321ea46428acc4': `Step 1`, +'s6a3c9d5ddbf42bdc': `Join organization`, +'sff0509fed5bbfd10': `Create password and display name`, +'s4b3221a46428b1dd': `Step 2`, +'sda1ec41fec043766': `Configure organization`, +'s64be0af044395977': `What is an org?`, +'s42e8653d5ae10bc1': `An org, or organization, is your workspace for web archiving. If you’re archiving collaboratively, an org workspace can be shared between team members.`, +'hda7aa624404fc0ed': html`Refer to our user guide on + org settings + for details.`, +'s8ae1873b610b92d6': str`Your org dashboard will be + ${0}//${1}/orgs/${2}`, +'s0d5ee4ffcb9c2c65': `You can change this in your org settings later.`, +'sbbd340ef453ff7e4': `Go to Dashboard`, +'s033b7f18e2a1b86e': str`The org name "${0}" is already taken, try another one.`, +'s6d0192d253b870f7': str`The org URL identifier "${0}" is already taken, try another one.`, +'s692207ce67c91506': str`The org URL identifier "${0}" is not a valid URL. Please use alphanumeric characters and dashes (-) only`, +'s5df133e1b1fd43c3': `Welcome to Browsertrix`, +'sa9b1e3b3add547b6': `Go to home page`, +'s418c368c5315bec1': `This invite doesn't exist or has expired. Please ask the organization administrator to resend an invitation.`, +'s1952dc02aa41f1c9': str`This is not a valid invite, or it may have expired. If you believe this is an error, please contact ${0} for help.`, +'s0235065054efe3a8': `your Browsertrix administrator`, +'s4a7fb6e66ba564d7': str`Something unexpected went wrong retrieving this invite. Please contact ${0} for help.`, +'s7ebc4f216d73836f': `This verification email is not valid.`, +'s95689a99051fa841': `Email address verified`, +'s8759f1186d757714': `Log in to continue.`, +'sf151c44c3a52a448': `Enter new password`, +'sf6c0a694575fb0a6': `Must be between 8-64 characters`, +'s8daf047a917f4cc4': str`Choose a strong password between ${0}-${1} characters.`, +'s16ba889483d4940e': `Change Password`, +'s3f35c026ab278525': `Resend password reset email?`, +'s00ac24e5b7cc64c2': `Password reset email is not valid. Request a new password reset email`, +'s7d90fb0e2d1684a7': str`Sent invite to ${0}`, +'s586d6bd2eca2da93': `Users`, +'se5cde7fdda328454': `admin`, +'s5b8c89c6fdc51c40': `Invite Users`, +'s22a99e19a2e45984': `Please log in to accept this invite.`, +'saf87265b4bddeb9c': `Accept invitation`, +'sb754c3cdf47401bb': `You’ve been invited to join a new org`, +'s31c7b03cf1e0b1bc': `Accept Invitation`, +'s32322dc45e502559': `Decline`, +'s84922e45c0957371': str`This invitation is for ${0}. You are currently logged in as ${1}. Please log in with the correct email to access this invite.`, +'sc9a2484754aae7bb': str`You've joined ${0}.`, +'sdb8ec1b3a5726c88': `Browsertrix`, +'sb8404f4d7b7ba1f3': `This invitation is not valid`, +'s4b97257cf024d907': str`You've declined to join ${0}.`, +'s57ade424d57c6edf': `Sent`, +'s686306cdb839fb8d': `Sending...`, +'s97ee1bd2cffede65': `Resend verification email`, +'s523f5d97bb322419': `Account Settings`, +'s11b2e9ecce28690c': `Display Name`, +'s5fe9a19519c8d882': `Enter your full name, or another name to display in the orgs you belong to.`, +'se724e8e0ccb7f52c': `Display name`, +'s548e6499a7c9fd51': `Update the email you use to log in.`, +'sca4fb8fafd9b52e5': `Verified`, +'sfeb3a6ed33712701': `Needs verification`, +'sde97d4363265e9aa': `Enter your current password`, +'s3490e2c8b9ec6ad2': `New password`, +'s9acc53189826a820': `Your name has been updated.`, +'s1354a4083fa2c43e': `Sorry, couldn't update name at this time.`, +'s44793ea339a0944b': `Your email has been updated.`, +'sc4e0922536abfe43': `Sorry, couldn't update email at this time.`, +'s903070bc971b67b6': `Your password has been updated.`, +'se89dc7be93ca7754': `Please correct your current password and try again.`, +'s1cc6234f5ae1d6c8': `Sorry, couldn't update password at this time.`, +'s79e8cc71a5975b04': `Message`, +'s95aec54f13a08d1e': `User Guide`, +'se20cc4e6ad4e27be': `Open in new window`, +'s8baf25aec7231ef1': `Your account isn't quite set up yet`, +'sb92e2629adb0b7a5': `You must belong to at least one org in order to access Browsertrix features.`, +'s273f0ee82bf2b922': str`If you haven't received an invitation to an org, please contact us at ${0}.`, +'s95aeb2828c01b0de': str`If you haven't received an invitation to an org, please contact your Browsertrix administrator.`, +'s8ce22933775afaff': `Open user menu`, +'sa03807e44737a915': `Log Out`, +'s0558d72e9d8fc3dc': `Running Crawls`, +'s5ed8698a2f254511': `Sign Up`, +'sd1c4b6344a767979': `Expand org list`, +'s29496acaea25840d': `Source Code`, +'see4bdf173efdb187': `Help Forum`, +'sa91bc211cf5a96af': `Copy Browsertrix Version`, +'s90a0fdd47ac39d59': `Jump to Crawl`, +'sa1bc28260e4221a8': `Please log in to continue.`, +'s9e1f0a81715a5906': `Welcome to Browsertrix!`, +'h702a7337c08bf73f': html`A confirmation email was sent to:
+ ${0}.`, +'sd11e60711d79e788': `Click the link in your email to confirm your email address.`, +'sc3447bb7540dfcc9': `Got it, go to dashboard`, +'sce6f1cb94a02b0bb': `Organizations`, +'s4bd7cce2b092e180': `You don't have any organizations.`, + }; + \ No newline at end of file diff --git a/frontend/src/components/ui/locale-picker.ts b/frontend/src/components/ui/locale-picker.ts index 64f47e9019..0bf59e30d8 100644 --- a/frontend/src/components/ui/locale-picker.ts +++ b/frontend/src/components/ui/locale-picker.ts @@ -1,28 +1,31 @@ import { localized } from "@lit/localize"; -import { html, LitElement } from "lit"; +import type { SlSelectEvent } from "@shoelace-style/shoelace"; +import { html } from "lit"; import { customElement, state } from "lit/decorators.js"; -import { allLocales } from "@/__generated__/locale-codes"; -import { getLocale, setLocaleFromUrl } from "@/utils/localization"; +import { sourceLocale } from "@/__generated__/locale-codes"; +import { BtrixElement } from "@/classes/BtrixElement"; +import { allLocales, type LocaleCodeEnum } from "@/types/localization"; +import { getLocale, setLocale } from "@/utils/localization"; +import { AppStateService } from "@/utils/state"; -type LocaleCode = (typeof allLocales)[number]; type LocaleNames = { - [L in LocaleCode]: string; + [L in LocaleCodeEnum]: string; }; @localized() @customElement("btrix-locale-picker") -export class LocalePicker extends LitElement { +export class LocalePicker extends BtrixElement { @state() private localeNames: LocaleNames | undefined = {} as LocaleNames; - private readonly setLocaleName = (locale: LocaleCode) => { + private readonly setLocaleName = (locale: LocaleCodeEnum) => { this.localeNames![locale] = new Intl.DisplayNames([locale], { type: "language", - }).of(locale)!; + }).of(locale.toUpperCase())!; }; - async firstUpdated() { + firstUpdated() { this.localeNames = {} as LocaleNames; allLocales.forEach(this.setLocaleName); } @@ -32,23 +35,24 @@ export class LocalePicker extends LitElement { return; } - const selectedLocale = getLocale(); + const selectedLocale = + this.appState.userPreferences?.locale || sourceLocale; return html` - ${this.localeNames[selectedLocale as LocaleCode]} + + ${this.localeNames[selectedLocale as LocaleCodeEnum]} + ${allLocales.map( (locale) => html`${this.renderMenuUserInfo()} this.navigate(ROUTES.accountSettings)} + @click=${() => this.navigate("/account/settings")} > ${msg("Account Settings")} @@ -432,7 +452,12 @@ export class App extends LiteElement { ` - : this.renderSignUpLink()} + : html` + ${this.renderSignUpLink()} + + `} ${isSuperAdmin ? html` @@ -608,10 +633,6 @@ export class App extends LiteElement {