From 357327d3bd8608f72ffd2ae36c5ed97fe29fb52b Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 12:31:17 -0300 Subject: [PATCH 01/15] Add components to modify document title --- frontend/src/App.js | 63 ++++++++++--------- frontend/src/DmarcGuidancePage.js | 2 + frontend/src/Page.js | 14 +++++ .../src/{PrivateRoute.js => PrivatePage.js} | 13 ++-- frontend/src/useDocumentTitle.js | 7 +++ 5 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 frontend/src/Page.js rename frontend/src/{PrivateRoute.js => PrivatePage.js} (68%) create mode 100644 frontend/src/useDocumentTitle.js diff --git a/frontend/src/App.js b/frontend/src/App.js index dcb2ded564..2899acf338 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,5 +1,5 @@ import React, { lazy, Suspense } from 'react' -import { Route, Switch } from 'react-router-dom' +import { Switch } from 'react-router-dom' import { useLingui } from '@lingui/react' import { LandingPage } from './LandingPage' import { Main } from './Main' @@ -15,7 +15,8 @@ import { useUserState } from './UserState' import { ErrorBoundary } from 'react-error-boundary' import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { FloatingMenu } from './FloatingMenu' -import PrivateRoute from './PrivateRoute' +import PrivatePage from './PrivatePage' +import { Page } from './Page' const PageNotFound = lazy(() => import('./PageNotFound')) const CreateUserPage = lazy(() => import('./CreateUserPage')) @@ -119,74 +120,74 @@ export default function App() {
Loading...}> - + - + - + - + - + - - + - - + - + - + - + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - +
diff --git a/frontend/src/DmarcGuidancePage.js b/frontend/src/DmarcGuidancePage.js index bf1ec4fb8a..66fd2a9167 100644 --- a/frontend/src/DmarcGuidancePage.js +++ b/frontend/src/DmarcGuidancePage.js @@ -9,10 +9,12 @@ import { Trans } from '@lingui/macro' import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { ErrorBoundary } from 'react-error-boundary' import { LoadingMessage } from './LoadingMessage' +import { useDocumentTitle } from './useDocumentTitle' export default function DmarcGuidancePage() { const { currentUser } = useUserState() const { domainSlug } = useParams() + useDocumentTitle(`Tracker | ${domainSlug}`) const { loading, error, data } = useQuery(GET_GUIDANCE_TAGS_OF_DOMAIN, { context: { diff --git a/frontend/src/Page.js b/frontend/src/Page.js new file mode 100644 index 0000000000..fd5addb22b --- /dev/null +++ b/frontend/src/Page.js @@ -0,0 +1,14 @@ +import React from 'react' +import { Route } from 'react-router-dom' +import { string } from 'prop-types' +import { useDocumentTitle } from './useDocumentTitle' + +export const Page = ({ title, ...props }) => { + useDocumentTitle(title) + + return +} + +Page.propTypes = { + title: string, +} diff --git a/frontend/src/PrivateRoute.js b/frontend/src/PrivatePage.js similarity index 68% rename from frontend/src/PrivateRoute.js rename to frontend/src/PrivatePage.js index a4aa6d5507..375359bf12 100644 --- a/frontend/src/PrivateRoute.js +++ b/frontend/src/PrivatePage.js @@ -1,17 +1,19 @@ // From https://reactrouter.com/web/example/auth-workflow import React from 'react' -import { node } from 'prop-types' -import { Route, Redirect, useLocation } from 'react-router-dom' +import { node, string } from 'prop-types' +import { Redirect, useLocation } from 'react-router-dom' import { useUserState } from './UserState' +import { Page } from './Page' // A wrapper for that redirects to the login // screen if you're not yet authenticated. -export default function PrivateRoute({ children, ...rest }) { +export default function PrivatePage({ children, title, ...rest }) { const { isLoggedIn } = useUserState() const location = useLocation() return ( - isLoggedIn() ? ( @@ -29,6 +31,7 @@ export default function PrivateRoute({ children, ...rest }) { ) } -PrivateRoute.propTypes = { +PrivatePage.propTypes = { children: node, + title: string, } diff --git a/frontend/src/useDocumentTitle.js b/frontend/src/useDocumentTitle.js new file mode 100644 index 0000000000..85baf47f0a --- /dev/null +++ b/frontend/src/useDocumentTitle.js @@ -0,0 +1,7 @@ +import { useEffect } from 'react' + +export const useDocumentTitle = (title) => { + useEffect(() => { + document.title = title || 'Tracker' + }, [title]) +} From 9886b741228ceb29b344297470d29b9c2b1ecf66 Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Fri, 26 Mar 2021 17:02:26 -0300 Subject: [PATCH 02/15] Dynamic names (commented out til bug fix) --- frontend/src/DmarcGuidancePage.js | 4 ++-- frontend/src/DmarcReportPage.js | 2 ++ frontend/src/OrganizationDetails.js | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/DmarcGuidancePage.js b/frontend/src/DmarcGuidancePage.js index 66fd2a9167..8b4b0d3044 100644 --- a/frontend/src/DmarcGuidancePage.js +++ b/frontend/src/DmarcGuidancePage.js @@ -9,12 +9,12 @@ import { Trans } from '@lingui/macro' import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { ErrorBoundary } from 'react-error-boundary' import { LoadingMessage } from './LoadingMessage' -import { useDocumentTitle } from './useDocumentTitle' +// import { useDocumentTitle } from './useDocumentTitle' export default function DmarcGuidancePage() { const { currentUser } = useUserState() const { domainSlug } = useParams() - useDocumentTitle(`Tracker | ${domainSlug}`) + // useDocumentTitle(`${domainSlug} - Tracker`) const { loading, error, data } = useQuery(GET_GUIDANCE_TAGS_OF_DOMAIN, { context: { diff --git a/frontend/src/DmarcReportPage.js b/frontend/src/DmarcReportPage.js index 7119848e11..b62ddae2ec 100644 --- a/frontend/src/DmarcReportPage.js +++ b/frontend/src/DmarcReportPage.js @@ -28,12 +28,14 @@ import { months } from './months' import { ErrorBoundary } from 'react-error-boundary' import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { LoadingMessage } from './LoadingMessage' +// import { useDocumentTitle } from './useDocumentTitle' export default function DmarcReportPage({ summaryListResponsiveWidth }) { const { currentUser } = useUserState() const { domainSlug, period, year } = useParams() const history = useHistory() const { i18n } = useLingui() + // useDocumentTitle(`${domainSlug} - Tracker`) const currentDate = new Date() const [selectedPeriod, setSelectedPeriod] = useState(period) diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index 37c06d3dab..1ed578e351 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -23,12 +23,15 @@ import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { LoadingMessage } from './LoadingMessage' import { OrganizationDomains } from './OrganizationDomains' import { OrganizationAffiliations } from './OrganizationAffiliations' +// import { useDocumentTitle } from './useDocumentTitle' export default function OrganizationDetails() { const { orgSlug } = useParams() const { currentUser } = useUserState() const toast = useToast() const history = useHistory() + // useDocumentTitle(`${orgSlug} - Tracker`) + const { loading, _error, data } = useQuery(ORG_DETAILS_PAGE, { variables: { slug: orgSlug }, context: { From 6814a8fe3df27e6035c13530b13c69eff1feb5fc Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Fri, 26 Mar 2021 17:03:02 -0300 Subject: [PATCH 03/15] Add all static titles --- frontend/src/App.js | 31 +++++++++++++++++-------------- frontend/src/Page.js | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index 2899acf338..2f090ae829 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -120,74 +120,77 @@ export default function App() {
Loading...}> - + - + - + - + - + - + - + - + - + - + - + - + - + - +
diff --git a/frontend/src/Page.js b/frontend/src/Page.js index fd5addb22b..91ffec6fc3 100644 --- a/frontend/src/Page.js +++ b/frontend/src/Page.js @@ -4,7 +4,7 @@ import { string } from 'prop-types' import { useDocumentTitle } from './useDocumentTitle' export const Page = ({ title, ...props }) => { - useDocumentTitle(title) + useDocumentTitle(`${title} - Tracker`) return } From fdd015de108edc5387367fc8965cf4dca4ee86e3 Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Fri, 26 Mar 2021 17:15:09 -0300 Subject: [PATCH 04/15] Allow for translation of Tracker in page title --- frontend/src/Page.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/Page.js b/frontend/src/Page.js index 91ffec6fc3..40e9f92bce 100644 --- a/frontend/src/Page.js +++ b/frontend/src/Page.js @@ -1,10 +1,11 @@ import React from 'react' import { Route } from 'react-router-dom' import { string } from 'prop-types' +import { t } from '@lingui/macro' import { useDocumentTitle } from './useDocumentTitle' export const Page = ({ title, ...props }) => { - useDocumentTitle(`${title} - Tracker`) + useDocumentTitle(`${title} - ${t`Tracker`}`) return } From 520f04d2626c2b5fdcc031ab0412938818f3e99d Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Fri, 26 Mar 2021 17:16:01 -0300 Subject: [PATCH 05/15] Update locales --- frontend/src/locales/en.js | 39 ++-- frontend/src/locales/en.po | 421 ++++++++++++++++++++++--------------- frontend/src/locales/fr.js | 38 ++-- frontend/src/locales/fr.po | 421 ++++++++++++++++++++++--------------- 4 files changed, 554 insertions(+), 365 deletions(-) diff --git a/frontend/src/locales/en.js b/frontend/src/locales/en.js index 1e2368960c..d487b68fe0 100644 --- a/frontend/src/locales/en.js +++ b/frontend/src/locales/en.js @@ -1,9 +1,5 @@ /*eslint-disable*/ module.exports = { messages: { - '*All data represented is mocked for demonstration purposes': - '*All data represented is mocked for demonstration purposes', - "*search bars do not actively search databases currently. They are used to demonstrate the 'add' button feature": - "*search bars do not actively search databases currently. They are used to demonstrate the 'add' button feature", '3.2.2 Third Parties and DKIM': '3.2.2 Third Parties and DKIM', '404 - Page Not Found': '404 - Page Not Found', 'A-all': 'A-all', @@ -31,6 +27,7 @@ 'Account created.': 'Account created.', Acronym: 'Acronym', 'Add Domain': 'Add Domain', + Admin: 'Admin', 'Admin Portal': 'Admin Portal', 'Admin Profile': 'Admin Profile', 'An email was sent with a link to reset your password': @@ -56,6 +53,8 @@ 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.': 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.', August: 'August', + Authenticate: 'Authenticate', + 'Authentication QR Code': 'Authentication QR Code', 'B.1.1 SPF Records': 'B.1.1 SPF Records', 'B.1.3 DNS Lookup Limit': 'B.1.3 DNS Lookup Limit', 'B.2.1 DKIM Records': 'B.2.1 DKIM Records', @@ -67,8 +66,8 @@ 'CCCS added to Aggregate sender list', 'CCCS added to Forensic sender list': 'CCCS added to Forensic sender list', 'CNAME-DMARC': 'CNAME-DMARC', - 'Canadians rely on the Government of Canada to provide secure digital services. A new policy notice guides government websites to adopt good web security practices. Track how government sites are becoming more secure.': - 'Canadians rely on the Government of Canada to provide secure digital services. A new policy notice guides government websites to adopt good web security practices. Track how government sites are becoming more secure.', + 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.': + 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.', 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.': 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.', 'Certificate chain signed using SHA-256/SHA-384/AEAD': @@ -92,6 +91,7 @@ 'Confirm removal of domain:': 'Confirm removal of domain:', 'Contact 3rd party': 'Contact 3rd party', 'Create Account': 'Create Account', + 'Create an Account': 'Create an Account', 'Create an account by entering an email and password.': 'Create an account by entering an email and password.', 'Current Display Name:': 'Current Display Name:', @@ -120,6 +120,7 @@ 'DKIM-value-invalid': 'DKIM-value-invalid', 'DMARC Failure Table': 'DMARC Failure Table', 'DMARC Failures by IP Address': 'DMARC Failures by IP Address', + 'DMARC Implementation Phase: {0}': ['DMARC Implementation Phase: ', ['0']], 'DMARC Implementation Phase: {status}': [ 'DMARC Implementation Phase: ', ['status'], @@ -127,7 +128,6 @@ 'DMARC Messages': 'DMARC Messages', 'DMARC Not Implemented': 'DMARC Not Implemented', 'DMARC Report': 'DMARC Report', - 'DMARC Report <0/>': 'DMARC Report <0/>', 'DMARC fail': 'DMARC fail', 'DMARC pass': 'DMARC pass', 'DMARC-GC': 'DMARC-GC', @@ -139,6 +139,8 @@ 'Display name cannot be empty': 'Display name cannot be empty', Disposition: 'Disposition', Domain: 'Domain', + 'Domain DMARC Report': 'Domain DMARC Report', + 'Domain Details': 'Domain Details', 'Domain List': 'Domain List', 'Domain URL': 'Domain URL', 'Domain URL:': 'Domain URL:', @@ -192,6 +194,7 @@ 'For in-depth CCCS implementation guidance:', 'For technical implementation guidance:': 'For technical implementation guidance:', + 'Forgot Password': 'Forgot Password', 'Forgot your password?': 'Forgot your password?', 'Full Fail %': 'Full Fail %', 'Full Pass %': 'Full Pass %', @@ -203,7 +206,6 @@ Guidance: 'Guidance', 'Guidance Tags': 'Guidance Tags', 'Guidance:': 'Guidance:', - 'Guidance<0/>': 'Guidance<0/>', 'HSTS Age:': 'HSTS Age:', 'HSTS Status:': 'HSTS Status:', 'HSTS-missing': 'HSTS-missing', @@ -239,8 +241,12 @@ 'Implementation Status:': 'Implementation Status:', 'Incorrect authenticate.result typename.': 'Incorrect authenticate.result typename.', + 'Incorrect createDomain.result typename.': + 'Incorrect createDomain.result typename.', 'Incorrect inviteUserToOrg.result typename.': 'Incorrect inviteUserToOrg.result typename.', + 'Incorrect removeDomain.result typename.': + 'Incorrect removeDomain.result typename.', 'Incorrect resetPassword.result typename.': 'Incorrect resetPassword.result typename.', 'Incorrect send method received.': 'Incorrect send method received.', @@ -248,10 +254,14 @@ 'Incorrect setPhoneNumber.result typename.', 'Incorrect signIn.result typename.': 'Incorrect signIn.result typename.', 'Incorrect signUp.result typename.': 'Incorrect signUp.result typename.', + 'Incorrect updateDomain.result typename.': + 'Incorrect updateDomain.result typename.', 'Incorrect updateUserPassword.result typename.': 'Incorrect updateUserPassword.result typename.', 'Incorrect updateUserProfile.result typename.': 'Incorrect updateUserProfile.result typename.', + 'Incorrect updateUserRole.result typename.': + 'Incorrect updateUserRole.result typename.', 'Incorrect verifyPhoneNumber.result typename.': 'Incorrect verifyPhoneNumber.result typename.', 'Internet facing services': 'Internet facing services', @@ -321,7 +331,6 @@ 'One or more ciphers in use are not compliant with guidelines': 'One or more ciphers in use are not compliant with guidelines', 'Organization Details': 'Organization Details', - 'Organization Info': 'Organization Info', 'Organization:': 'Organization:', Organizations: 'Organizations', 'Owner has not configured Aggregate reporting.': @@ -363,7 +372,6 @@ 'Password must be at least 12 characters long', 'Password:': 'Password:', 'Passwords must match': 'Passwords must match', - 'Phase:': 'Phase:', Phone: 'Phone', 'Phone Number': 'Phone Number', 'Phone Number:': 'Phone Number:', @@ -411,6 +419,7 @@ 'RUF-none': 'RUF-none', 'Remove Domain': 'Remove Domain', 'Request a domain to be scanned:': 'Request a domain to be scanned:', + 'Reset Password': 'Reset Password', 'Result:': 'Result:', 'Results for scans of email technologies (DMARC, SPF, DKIM).': 'Results for scans of email technologies (DMARC, SPF, DKIM).', @@ -476,8 +485,6 @@ 'Source IP Address': 'Source IP Address', Submit: 'Submit', Summary: 'Summary', - 'Summary Cards': 'Summary Cards', - 'Summary:': 'Summary:', 'T-enabled': 'T-enabled', TBD: 'TBD', 'TFA Method:': 'TFA Method:', @@ -495,7 +502,8 @@ 'This service is being developed in the open', 'Total Messages': 'Total Messages', 'Total users': 'Total users', - 'Track Web Security Compliance': 'Track Web Security Compliance', + 'Track Digital Security': 'Track Digital Security', + Tracker: 'Tracker', 'Tracker Logo': 'Tracker Logo', 'Two Factor Authentication': 'Two Factor Authentication', USER: 'USER', @@ -503,9 +511,11 @@ 'Unable to change user role, please try again.', 'Unable to create account, please try again.': 'Unable to create account, please try again.', + 'Unable to create new domain.': 'Unable to create new domain.', 'Unable to create your account, please try again.': 'Unable to create your account, please try again.', 'Unable to invite user.': 'Unable to invite user.', + 'Unable to remove domain.': 'Unable to remove domain.', 'Unable to request scan, please try again.': 'Unable to request scan, please try again.', 'Unable to reset your password, please try again.': @@ -514,6 +524,7 @@ 'Unable to send password reset link to email.', 'Unable to sign in to your account, please try again.': 'Unable to sign in to your account, please try again.', + 'Unable to update domain.': 'Unable to update domain.', 'Unable to update password': 'Unable to update password', 'Unable to update to your TFA send method, please try again.': 'Unable to update to your TFA send method, please try again.', @@ -525,6 +536,7 @@ 'Unable to update to your preferred language, please try again.', 'Unable to update to your username, please try again.': 'Unable to update to your username, please try again.', + 'Unable to update user role.': 'Unable to update user role.', 'Unable to update your password, please try again.': 'Unable to update your password, please try again.', 'Unable to update your phone number, please try again.': @@ -589,6 +601,7 @@ 'You may now sign in with your new password', 'Your 2FA app will then have a valid code that you can use when you sign in.': 'Your 2FA app will then have a valid code that you can use when you sign in.', + 'Your Account': 'Your Account', 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322': 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322', 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23': diff --git a/frontend/src/locales/en.po b/frontend/src/locales/en.po index c950a7327b..2e159ffd67 100644 --- a/frontend/src/locales/en.po +++ b/frontend/src/locales/en.po @@ -53,8 +53,8 @@ msgstr "A.5 Maintain" msgid "A.5.3 Rotate DKIM Keys" msgstr "A.5.3 Rotate DKIM Keys" -#: src/UserList.js:244 -#: src/UserList.js:302 +#: src/UserList.js:266 +#: src/UserList.js:324 msgid "ADMIN" msgstr "ADMIN" @@ -90,7 +90,7 @@ msgstr "Accepted cipher list contains 3DES symmetric-key block cipher, as prohib msgid "Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01" msgstr "Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01" -#: src/App.js:83 +#: src/App.js:84 #: src/FloatingMenu.js:129 #: src/UserPage.js:35 msgid "Account Settings" @@ -100,19 +100,23 @@ msgstr "Account Settings" msgid "Account created." msgstr "Account created." -#: src/Organizations.js:132 +#: src/Organizations.js:129 msgid "Acronym" msgstr "Acronym" -#: src/AdminDomains.js:232 +#: src/AdminDomains.js:296 msgid "Add Domain" msgstr "Add Domain" +#: src/App.js:155 +msgid "Admin" +msgstr "Admin" + #: src/FloatingMenu.js:131 msgid "Admin Portal" msgstr "Admin Portal" -#: src/App.js:89 +#: src/App.js:90 msgid "Admin Profile" msgstr "Admin Profile" @@ -152,17 +156,17 @@ msgstr "An error occurred while updating your phone number." msgid "An error occurred while verifying your phone number." msgstr "An error occurred while verifying your phone number." -#: src/AdminDomains.js:91 -#: src/AdminDomains.js:123 -#: src/AdminDomains.js:154 -#: src/AdminDomains.js:212 +#: src/AdminDomains.js:92 +#: src/AdminDomains.js:145 +#: src/AdminDomains.js:197 +#: src/AdminDomains.js:276 #: src/TwoFactorAuthenticatePage.js:34 -#: src/UserList.js:94 -#: src/UserList.js:186 +#: src/UserList.js:116 +#: src/UserList.js:208 msgid "An error occurred." msgstr "An error occurred." -#: src/UserList.js:315 +#: src/UserList.js:337 msgid "Apply" msgstr "Apply" @@ -178,6 +182,14 @@ msgstr "As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat me msgid "August" msgstr "August" +#: src/App.js:136 +msgid "Authenticate" +msgstr "Authenticate" + +#: src/App.js:185 +msgid "Authentication QR Code" +msgstr "Authentication QR Code" + #: src/guidanceTagConstants.js:37 msgid "B.1.1 SPF Records" msgstr "B.1.1 SPF Records" @@ -277,8 +289,8 @@ msgstr "Code field must not be empty" msgid "Compliant TLS" msgstr "Compliant TLS" -#: src/AdminDomains.js:369 -#: src/AdminDomains.js:412 +#: src/AdminDomains.js:434 +#: src/AdminDomains.js:477 #: src/EditableUserDisplayName.js:177 #: src/EditableUserEmail.js:175 #: src/EditableUserPassword.js:198 @@ -299,7 +311,7 @@ msgstr "Confirm Password:" msgid "Confirm password" msgstr "Confirm password" -#: src/AdminDomains.js:392 +#: src/AdminDomains.js:457 msgid "Confirm removal of domain:" msgstr "Confirm removal of domain:" @@ -312,6 +324,10 @@ msgstr "Contact 3rd party" msgid "Create Account" msgstr "Create Account" +#: src/App.js:127 +msgid "Create an Account" +msgstr "Create an Account" + #: src/CreateUserPage.js:142 msgid "Create an account by entering an email and password." msgstr "Create an account by entering an email and password." @@ -320,7 +336,7 @@ msgstr "Create an account by entering an email and password." msgid "Current Display Name:" msgstr "Current Display Name:" -#: src/AdminDomains.js:327 +#: src/AdminDomains.js:392 msgid "Current Domain URL:" msgstr "Current Domain URL:" @@ -336,7 +352,7 @@ msgstr "Current Password:" msgid "Current Phone Number:" msgstr "Current Phone Number:" -#: src/DmarcReportPage.js:305 +#: src/DmarcReportPage.js:307 msgid "DKIM Aligned" msgstr "DKIM Aligned" @@ -344,16 +360,16 @@ msgstr "DKIM Aligned" msgid "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." msgstr "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." -#: src/DmarcReportPage.js:272 +#: src/DmarcReportPage.js:274 msgid "DKIM Domains" msgstr "DKIM Domains" -#: src/DmarcReportPage.js:327 +#: src/DmarcReportPage.js:329 msgid "DKIM Failure Table" msgstr "DKIM Failure Table" -#: src/DmarcReportPage.js:338 -#: src/DmarcReportPage.js:370 +#: src/DmarcReportPage.js:340 +#: src/DmarcReportPage.js:372 msgid "DKIM Failures by IP Address" msgstr "DKIM Failures by IP Address" @@ -361,11 +377,11 @@ msgstr "DKIM Failures by IP Address" msgid "DKIM Flag t" msgstr "DKIM Flag t" -#: src/DmarcReportPage.js:309 +#: src/DmarcReportPage.js:311 msgid "DKIM Results" msgstr "DKIM Results" -#: src/DmarcReportPage.js:276 +#: src/DmarcReportPage.js:278 msgid "DKIM Selectors" msgstr "DKIM Selectors" @@ -405,31 +421,36 @@ msgstr "DKIM-missing-mx-O365" msgid "DKIM-value-invalid" msgstr "DKIM-value-invalid" -#: src/DmarcReportPage.js:530 +#: src/DmarcReportPage.js:532 msgid "DMARC Failure Table" msgstr "DMARC Failure Table" -#: src/DmarcReportPage.js:541 -#: src/DmarcReportPage.js:570 +#: src/DmarcReportPage.js:543 +#: src/DmarcReportPage.js:572 msgid "DMARC Failures by IP Address" msgstr "DMARC Failures by IP Address" +#: src/ScanCard.js:48 +msgid "DMARC Implementation Phase: {0}" +msgstr "DMARC Implementation Phase: {0}" + #: src/ScanCard.js:61 -msgid "DMARC Implementation Phase: {status}" -msgstr "DMARC Implementation Phase: {status}" +#~ msgid "DMARC Implementation Phase: {status}" +#~ msgstr "DMARC Implementation Phase: {status}" -#: src/DmarcByDomainPage.js:124 -#: src/DmarcByDomainPage.js:228 +#: src/DmarcByDomainPage.js:121 +#: src/DmarcByDomainPage.js:226 msgid "DMARC Messages" msgstr "DMARC Messages" #: src/ScanCard.js:50 -msgid "DMARC Not Implemented" -msgstr "DMARC Not Implemented" +#~ msgid "DMARC Not Implemented" +#~ msgstr "DMARC Not Implemented" -#: src/App.js:77 -#: src/DmarcGuidancePage.js:60 -#: src/DomainCard.js:165 +#: src/App.js:78 +#: src/App.js:177 +#: src/DmarcGuidancePage.js:62 +#: src/DomainCard.js:167 msgid "DMARC Report" msgstr "DMARC Report" @@ -449,7 +470,7 @@ msgstr "DMARC-GC" msgid "DMARC-missing" msgstr "DMARC-missing" -#: src/DmarcReportPage.js:285 +#: src/DmarcReportPage.js:287 msgid "DNS Host" msgstr "DNS Host" @@ -470,16 +491,25 @@ msgstr "Display Name:" msgid "Display name cannot be empty" msgstr "Display name cannot be empty" -#: src/DmarcReportPage.js:313 +#: src/DmarcReportPage.js:315 msgid "Disposition" msgstr "Disposition" -#: src/DmarcByDomainPage.js:87 +#: src/DmarcByDomainPage.js:84 msgid "Domain" msgstr "Domain" -#: src/AdminDomains.js:184 -#: src/AdminDomains.js:192 +#: src/App.js:171 +#: src/App.js:189 +msgid "Domain DMARC Report" +msgstr "Domain DMARC Report" + +#: src/App.js:165 +msgid "Domain Details" +msgstr "Domain Details" + +#: src/AdminDomains.js:248 +#: src/AdminDomains.js:256 msgid "Domain List" msgstr "Domain List" @@ -491,7 +521,7 @@ msgstr "Domain URL" msgid "Domain URL:" msgstr "Domain URL:" -#: src/AdminDomains.js:101 +#: src/AdminDomains.js:103 msgid "Domain added" msgstr "Domain added" @@ -515,15 +545,15 @@ msgstr "Domain not pre-loaded by HSTS" msgid "Domain not pre-loaded by HSTS, but is pre-load ready" msgstr "Domain not pre-loaded by HSTS, but is pre-load ready" -#: src/AdminDomains.js:134 +#: src/AdminDomains.js:157 msgid "Domain removed" msgstr "Domain removed" -#: src/AdminDomains.js:135 +#: src/AdminDomains.js:158 msgid "Domain removed from {orgSlug}" msgstr "Domain removed from {orgSlug}" -#: src/AdminDomains.js:164 +#: src/AdminDomains.js:208 msgid "Domain updated" msgstr "Domain updated" @@ -536,19 +566,20 @@ msgid "Domain uses potentially-outsourced DMARC service" msgstr "Domain uses potentially-outsourced DMARC service" #: src/Domain.js:22 -#: src/DomainCard.js:44 +#: src/DomainCard.js:46 msgid "Domain:" msgstr "Domain:" -#: src/App.js:71 -#: src/DomainsPage.js:58 -#: src/DomainsPage.js:65 -#: src/OrganizationDetails.js:88 -#: src/OrganizationDomains.js:41 +#: src/App.js:72 +#: src/App.js:161 +#: src/DomainsPage.js:54 +#: src/DomainsPage.js:61 +#: src/OrganizationDetails.js:91 +#: src/OrganizationDomains.js:39 msgid "Domains" msgstr "Domains" -#: src/DmarcByDomainPage.js:59 +#: src/DmarcByDomainPage.js:56 msgid "Domains Table" msgstr "Domains Table" @@ -564,7 +595,7 @@ msgstr "Edit" msgid "Edit Display Name" msgstr "Edit Display Name" -#: src/AdminDomains.js:321 +#: src/AdminDomains.js:386 msgid "Edit Domain Details" msgstr "Edit Domain Details" @@ -599,7 +630,7 @@ msgstr "Email Validated" msgid "Email cannot be empty" msgstr "Email cannot be empty" -#: src/UserList.js:106 +#: src/UserList.js:128 msgid "Email invitation sent to {addedUserName}" msgstr "Email invitation sent to {addedUserName}" @@ -628,20 +659,20 @@ msgstr "Enter two factor code" msgid "Enter your user account's verified email address and we will send you a password reset link." msgstr "Enter your user account's verified email address and we will send you a password reset link." -#: src/DmarcReportPage.js:267 +#: src/DmarcReportPage.js:269 msgid "Envelope From" msgstr "Envelope From" -#: src/DmarcReportPage.js:224 +#: src/DmarcReportPage.js:226 #: src/fixtures/summaryListData.js:171 msgid "Fail" msgstr "Fail" -#: src/DmarcByDomainPage.js:103 +#: src/DmarcByDomainPage.js:100 msgid "Fail DKIM %" msgstr "Fail DKIM %" -#: src/DmarcByDomainPage.js:109 +#: src/DmarcByDomainPage.js:106 msgid "Fail SPF %" msgstr "Fail SPF %" @@ -675,24 +706,28 @@ msgstr "For in-depth CCCS implementation guidance:" msgid "For technical implementation guidance:" msgstr "For technical implementation guidance:" +#: src/App.js:139 +msgid "Forgot Password" +msgstr "Forgot Password" + #: src/SignInPage.js:142 msgid "Forgot your password?" msgstr "Forgot your password?" -#: src/DmarcByDomainPage.js:115 +#: src/DmarcByDomainPage.js:112 msgid "Full Fail %" msgstr "Full Fail %" -#: src/DmarcByDomainPage.js:97 +#: src/DmarcByDomainPage.js:94 msgid "Full Pass %" msgstr "Full Pass %" -#: src/DmarcReportPage.js:397 +#: src/DmarcReportPage.js:399 msgid "Fully Aligned Table" msgstr "Fully Aligned Table" -#: src/DmarcReportPage.js:408 -#: src/DmarcReportPage.js:435 +#: src/DmarcReportPage.js:410 +#: src/DmarcReportPage.js:437 msgid "Fully Aligned by IP Address" msgstr "Fully Aligned by IP Address" @@ -709,26 +744,26 @@ msgstr "Go to page:" msgid "Government of Canada domains subject to TBS guidelines" msgstr "Government of Canada domains subject to TBS guidelines" -#: src/DmarcReportPage.js:295 -#: src/DmarcReportPage.js:616 +#: src/DmarcReportPage.js:297 +#: src/DmarcReportPage.js:618 msgid "Guidance" msgstr "Guidance" -#: src/DmarcGuidancePage.js:33 +#: src/DmarcGuidancePage.js:35 msgid "Guidance Tags" msgstr "Guidance Tags" -#: src/GuidanceTagDetails.js:74 +#: src/GuidanceTagDetails.js:82 msgid "Guidance:" msgstr "Guidance:" #: src/PolicyComplianceDetails.js:36 -msgid "HSTS Age:" -msgstr "HSTS Age:" +#~ msgid "HSTS Age:" +#~ msgstr "HSTS Age:" #: src/PolicyComplianceDetails.js:29 -msgid "HSTS Status:" -msgstr "HSTS Status:" +#~ msgid "HSTS Status:" +#~ msgstr "HSTS Status:" #: src/guidanceTagConstants.js:528 msgid "HSTS-missing" @@ -810,11 +845,12 @@ msgstr "HTTPS-not-enforced" msgid "HTTPS-weakly-enforced" msgstr "HTTPS-weakly-enforced" -#: src/DmarcReportPage.js:291 +#: src/DmarcReportPage.js:293 msgid "Header From" msgstr "Header From" -#: src/App.js:60 +#: src/App.js:61 +#: src/App.js:123 #: src/FloatingMenu.js:127 msgid "Home" msgstr "Home" @@ -839,21 +875,32 @@ msgid "ITPIN Compliant" msgstr "ITPIN Compliant" #: src/PolicyComplianceDetails.js:17 -msgid "Implementation Status:" -msgstr "Implementation Status:" +#~ msgid "Implementation Status:" +#~ msgstr "Implementation Status:" #: src/TwoFactorAuthenticatePage.js:81 msgid "Incorrect authenticate.result typename." msgstr "Incorrect authenticate.result typename." -#: src/UserList.js:126 +#: src/AdminDomains.js:123 +msgid "Incorrect createDomain.result typename." +msgstr "Incorrect createDomain.result typename." + +#: src/UserList.js:148 msgid "Incorrect inviteUserToOrg.result typename." msgstr "Incorrect inviteUserToOrg.result typename." +#: src/AdminDomains.js:176 +msgid "Incorrect removeDomain.result typename." +msgstr "Incorrect removeDomain.result typename." + #: src/ResetPasswordPage.js:61 msgid "Incorrect resetPassword.result typename." msgstr "Incorrect resetPassword.result typename." +#: src/AdminDomains.js:122 +#: src/AdminDomains.js:175 +#: src/AdminDomains.js:227 #: src/CreateUserPage.js:92 #: src/EditableUserDisplayName.js:82 #: src/EditableUserEmail.js:80 @@ -865,7 +912,8 @@ msgstr "Incorrect resetPassword.result typename." #: src/ResetPasswordPage.js:60 #: src/SignInPage.js:98 #: src/TwoFactorAuthenticatePage.js:80 -#: src/UserList.js:125 +#: src/UserList.js:94 +#: src/UserList.js:147 msgid "Incorrect send method received." msgstr "Incorrect send method received." @@ -881,6 +929,10 @@ msgstr "Incorrect signIn.result typename." msgid "Incorrect signUp.result typename." msgstr "Incorrect signUp.result typename." +#: src/AdminDomains.js:228 +msgid "Incorrect updateDomain.result typename." +msgstr "Incorrect updateDomain.result typename." + #: src/EditableUserPassword.js:83 msgid "Incorrect updateUserPassword.result typename." msgstr "Incorrect updateUserPassword.result typename." @@ -892,6 +944,10 @@ msgstr "Incorrect updateUserPassword.result typename." msgid "Incorrect updateUserProfile.result typename." msgstr "Incorrect updateUserProfile.result typename." +#: src/UserList.js:95 +msgid "Incorrect updateUserRole.result typename." +msgstr "Incorrect updateUserRole.result typename." + #: src/EditableUserPhoneNumber.js:130 msgid "Incorrect verifyPhoneNumber.result typename." msgstr "Incorrect verifyPhoneNumber.result typename." @@ -917,7 +973,7 @@ msgstr "Invalid percent" msgid "Invalid public key" msgstr "Invalid public key" -#: src/UserList.js:258 +#: src/UserList.js:280 msgid "Invite User" msgstr "Invite User" @@ -942,19 +998,19 @@ msgstr "L-30-D" msgid "Language:" msgstr "Language:" -#: src/DmarcByDomainPage.js:189 -#: src/DmarcReportPage.js:138 +#: src/DmarcByDomainPage.js:187 +#: src/DmarcReportPage.js:140 msgid "Last 30 Days" msgstr "Last 30 Days" #: src/Domain.js:39 -#: src/DomainCard.js:53 +#: src/DomainCard.js:55 msgid "Last scanned:" msgstr "Last scanned:" #: src/PolicyComplianceDetails.js:23 -msgid "Level of Enforcment:" -msgstr "Level of Enforcment:" +#~ msgid "Level of Enforcment:" +#~ msgstr "Level of Enforcment:" #: src/LoadingMessage.js:12 msgid "Loading {children}..." @@ -1051,7 +1107,7 @@ msgstr "Missing from guide- need v1.1" msgid "More than 10 lookups - Follow implementation guide" msgstr "More than 10 lookups - Follow implementation guide" -#: src/Organizations.js:129 +#: src/Organizations.js:126 msgid "Name" msgstr "Name" @@ -1059,11 +1115,11 @@ msgstr "Name" msgid "New Display Name:" msgstr "New Display Name:" -#: src/AdminDomains.js:350 +#: src/AdminDomains.js:415 msgid "New Domain Url" msgstr "New Domain Url" -#: src/AdminDomains.js:344 +#: src/AdminDomains.js:409 msgid "New Domain Url:" msgstr "New Domain Url:" @@ -1079,24 +1135,21 @@ msgstr "New Password:" msgid "New Phone Number:" msgstr "New Phone Number:" -#: src/AdminDomains.js:213 +#: src/AdminDomains.js:277 msgid "New domain name cannot be empty" msgstr "New domain name cannot be empty" -#: src/DomainsPage.js:127 -#: src/OrganizationAffiliations.js:80 -#: src/OrganizationDomains.js:78 -#: src/RelayPaginationControls.js:61 +#: src/RelayPaginationControls.js:65 msgid "Next" msgstr "Next" -#: src/AdminDomains.js:242 -#: src/DomainsPage.js:93 -#: src/OrganizationDomains.js:51 +#: src/AdminDomains.js:306 +#: src/DomainsPage.js:89 +#: src/OrganizationDomains.js:49 msgid "No Domains" msgstr "No Domains" -#: src/Organizations.js:72 +#: src/Organizations.js:69 msgid "No Organizations" msgstr "No Organizations" @@ -1108,7 +1161,7 @@ msgstr "No RUAs defined" msgid "No RUFs defined" msgstr "No RUFs defined" -#: src/OrganizationAffiliations.js:51 +#: src/OrganizationAffiliations.js:50 msgid "No Users" msgstr "No Users" @@ -1116,27 +1169,27 @@ msgstr "No Users" msgid "No current phone number" msgstr "No current phone number" -#: src/DmarcReportPage.js:385 +#: src/DmarcReportPage.js:387 msgid "No data for the DKIM Failures by IP Address table" msgstr "No data for the DKIM Failures by IP Address table" -#: src/DmarcReportPage.js:585 +#: src/DmarcReportPage.js:587 msgid "No data for the DMARC Failures by IP Address table" msgstr "No data for the DMARC Failures by IP Address table" -#: src/DmarcByDomainPage.js:172 +#: src/DmarcByDomainPage.js:170 msgid "No data for the DMARC summary table" msgstr "No data for the DMARC summary table" -#: src/DmarcReportPage.js:256 +#: src/DmarcReportPage.js:258 msgid "No data for the DMARC yearly report graph" msgstr "No data for the DMARC yearly report graph" -#: src/DmarcReportPage.js:450 +#: src/DmarcReportPage.js:452 msgid "No data for the Fully Aligned by IP Address table" msgstr "No data for the Fully Aligned by IP Address table" -#: src/DmarcReportPage.js:518 +#: src/DmarcReportPage.js:520 msgid "No data for the SPF Failures by IP Address table" msgstr "No data for the SPF Failures by IP Address table" @@ -1148,7 +1201,7 @@ msgstr "No domains scanned yet." msgid "No scan data for this organization." msgstr "No scan data for this organization." -#: src/UserList.js:266 +#: src/UserList.js:288 msgid "No users in this organization" msgstr "No users in this organization" @@ -1161,7 +1214,7 @@ msgid "None" msgstr "None" #: src/Domain.js:50 -#: src/DomainCard.js:59 +#: src/DomainCard.js:61 msgid "Not scanned yet." msgstr "Not scanned yet." @@ -1177,7 +1230,8 @@ msgstr "October" msgid "One or more ciphers in use are not compliant with guidelines" msgstr "One or more ciphers in use are not compliant with guidelines" -#: src/OrganizationDetails.js:60 +#: src/App.js:151 +#: src/OrganizationDetails.js:63 msgid "Organization Details" msgstr "Organization Details" @@ -1185,9 +1239,10 @@ msgstr "Organization Details" msgid "Organization:" msgstr "Organization:" -#: src/App.js:65 -#: src/Organizations.js:65 -#: src/Organizations.js:100 +#: src/App.js:66 +#: src/App.js:147 +#: src/Organizations.js:62 +#: src/Organizations.js:97 msgid "Organizations" msgstr "Organizations" @@ -1280,7 +1335,7 @@ msgstr "PCT-xx" msgid "Page" msgstr "Page" -#: src/RelayPaginationControls.js:30 +#: src/RelayPaginationControls.js:31 msgid "Page Size:" msgstr "Page Size:" @@ -1288,22 +1343,22 @@ msgstr "Page Size:" msgid "Page {0} of {1}" msgstr "Page {0} of {1}" -#: src/DmarcReportPage.js:206 +#: src/DmarcReportPage.js:208 #: src/fixtures/summaryListData.js:155 msgid "Pass" msgstr "Pass" -#: src/DmarcReportPage.js:218 +#: src/DmarcReportPage.js:220 #: src/fixtures/summaryListData.js:165 msgid "Pass Only DKIM" msgstr "Pass Only DKIM" -#: src/DmarcReportPage.js:212 +#: src/DmarcReportPage.js:214 #: src/fixtures/summaryListData.js:161 msgid "Pass Only SPF" msgstr "Pass Only SPF" -#: src/DmarcByDomainPage.js:150 +#: src/DmarcByDomainPage.js:148 msgid "Pass/Fail Ratios by Domain" msgstr "Pass/Fail Ratios by Domain" @@ -1391,27 +1446,24 @@ msgstr "Policy applies to no part of mailflow - irregular config" msgid "Policy applies to percentage of mailflow" msgstr "Policy applies to percentage of mailflow" -#: src/App.js:52 +#: src/App.js:53 msgid "Pre-Alpha" msgstr "Pre-Alpha" #: src/PolicyComplianceDetails.js:43 -msgid "Preloaded Status:" -msgstr "Preloaded Status:" +#~ msgid "Preloaded Status:" +#~ msgstr "Preloaded Status:" -#: src/DomainsPage.js:119 -#: src/OrganizationAffiliations.js:76 -#: src/OrganizationDomains.js:74 -#: src/RelayPaginationControls.js:52 +#: src/RelayPaginationControls.js:55 msgid "Previous" msgstr "Previous" -#: src/App.js:202 +#: src/App.js:206 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Privacy" -#: src/GuidanceTagList.js:29 +#: src/GuidanceTagList.js:73 msgid "Properly configured!" msgstr "Properly configured!" @@ -1479,7 +1531,7 @@ msgstr "RUF-CCCS" msgid "RUF-none" msgstr "RUF-none" -#: src/AdminDomains.js:386 +#: src/AdminDomains.js:451 msgid "Remove Domain" msgstr "Remove Domain" @@ -1487,7 +1539,11 @@ msgstr "Remove Domain" msgid "Request a domain to be scanned:" msgstr "Request a domain to be scanned:" -#: src/GuidanceTagDetails.js:68 +#: src/App.js:144 +msgid "Reset Password" +msgstr "Reset Password" + +#: src/GuidanceTagDetails.js:76 msgid "Result:" msgstr "Result:" @@ -1499,11 +1555,11 @@ msgstr "Results for scans of email technologies (DMARC, SPF, DKIM)." msgid "Results for scans of web technologies (SSL, HTTPS)." msgstr "Results for scans of web technologies (SSL, HTTPS)." -#: src/UserList.js:74 +#: src/UserList.js:76 msgid "Role updated" msgstr "Role updated" -#: src/UserList.js:286 +#: src/UserList.js:308 msgid "Role:" msgstr "Role:" @@ -1529,24 +1585,24 @@ msgstr "SP-quarantine" msgid "SP-reject" msgstr "SP-reject" -#: src/DmarcReportPage.js:297 +#: src/DmarcReportPage.js:299 msgid "SPF Aligned" msgstr "SPF Aligned" -#: src/DmarcReportPage.js:287 +#: src/DmarcReportPage.js:289 msgid "SPF Domains" msgstr "SPF Domains" -#: src/DmarcReportPage.js:462 +#: src/DmarcReportPage.js:464 msgid "SPF Failure Table" msgstr "SPF Failure Table" -#: src/DmarcReportPage.js:473 -#: src/DmarcReportPage.js:503 +#: src/DmarcReportPage.js:475 +#: src/DmarcReportPage.js:505 msgid "SPF Failures by IP Address" msgstr "SPF Failures by IP Address" -#: src/DmarcReportPage.js:301 +#: src/DmarcReportPage.js:303 msgid "SPF Results" msgstr "SPF Results" @@ -1590,7 +1646,7 @@ msgstr "SSL-missing" msgid "SSL-rc4" msgstr "SSL-rc4" -#: src/UserList.js:306 +#: src/UserList.js:328 msgid "SUPER_ADMIN" msgstr "SUPER_ADMIN" @@ -1602,7 +1658,7 @@ msgstr "Save Language" msgid "Save TFA Method" msgstr "Save TFA Method" -#: src/DomainsPage.js:74 +#: src/DomainsPage.js:70 msgid "Scan" msgstr "Scan" @@ -1622,24 +1678,24 @@ msgstr "Scan of domain successfully requested" msgid "Scan this QR code with a 2FA app like Authy or Google Authenticator" msgstr "Scan this QR code with a 2FA app like Authy or Google Authenticator" -#: src/DomainsPage.js:71 +#: src/DomainsPage.js:67 msgid "Search" msgstr "Search" -#: src/AdminDomains.js:200 -#: src/DomainsPage.js:88 +#: src/AdminDomains.js:264 +#: src/DomainsPage.js:84 msgid "Search for a domain" msgstr "Search for a domain" -#: src/UserList.js:231 +#: src/UserList.js:253 msgid "Search for a user" msgstr "Search for a user" -#: src/Organizations.js:112 +#: src/Organizations.js:109 msgid "Search for an organization" msgstr "Search for an organization" -#: src/DomainsPage.js:81 +#: src/DomainsPage.js:77 msgid "Search for any Government of Canada tracked domain:" msgstr "Search for any Government of Canada tracked domain:" @@ -1663,7 +1719,7 @@ msgstr "Select an organization to view admin options" msgid "September" msgstr "September" -#: src/Organizations.js:135 +#: src/Organizations.js:132 msgid "Services" msgstr "Services" @@ -1675,12 +1731,13 @@ msgstr "Services: {domainCount}" msgid "Show {pageSize}" msgstr "Show {pageSize}" -#: src/DmarcByDomainPage.js:233 -#: src/DmarcReportPage.js:625 +#: src/DmarcByDomainPage.js:231 +#: src/DmarcReportPage.js:627 msgid "Showing data for period:" msgstr "Showing data for period:" -#: src/App.js:113 +#: src/App.js:114 +#: src/App.js:131 #: src/FloatingMenu.js:158 #: src/SignInPage.js:153 msgid "Sign In" @@ -1691,12 +1748,12 @@ msgstr "Sign In" msgid "Sign In." msgstr "Sign In." -#: src/App.js:109 +#: src/App.js:110 #: src/FloatingMenu.js:144 msgid "Sign Out" msgstr "Sign Out" -#: src/App.js:99 +#: src/App.js:100 #: src/FloatingMenu.js:148 msgid "Sign Out." msgstr "Sign Out." @@ -1705,15 +1762,15 @@ msgstr "Sign Out." msgid "Sign in with your username and password." msgstr "Sign in with your username and password." -#: src/App.js:50 +#: src/App.js:51 msgid "Skip to main content" msgstr "Skip to main content" -#: src/Organizations.js:116 +#: src/Organizations.js:113 msgid "Sort by:" msgstr "Sort by:" -#: src/DmarcReportPage.js:262 +#: src/DmarcReportPage.js:264 msgid "Source IP Address" msgstr "Source IP Address" @@ -1722,7 +1779,7 @@ msgstr "Source IP Address" msgid "Submit" msgstr "Submit" -#: src/OrganizationDetails.js:85 +#: src/OrganizationDetails.js:88 msgid "Summary" msgstr "Summary" @@ -1746,7 +1803,7 @@ msgstr "TXT-DMARC-enabled" msgid "TXT-DMARC-missing" msgstr "TXT-DMARC-missing" -#: src/App.js:212 +#: src/App.js:216 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Terms & conditions" @@ -1759,7 +1816,7 @@ msgstr "Textual Representation" msgid "The page you are looking for has moved or does not exist." msgstr "The page you are looking for has moved or does not exist." -#: src/UserList.js:75 +#: src/UserList.js:77 msgid "The user's role has been successfully updated" msgstr "The user's role has been successfully updated" @@ -1767,12 +1824,12 @@ msgstr "The user's role has been successfully updated" msgid "This component is currently unavailable. Try reloading the page." msgstr "This component is currently unavailable. Try reloading the page." -#: src/App.js:53 +#: src/App.js:54 msgid "This service is being developed in the open" msgstr "This service is being developed in the open" -#: src/DmarcByDomainPage.js:91 -#: src/DmarcReportPage.js:280 +#: src/DmarcByDomainPage.js:88 +#: src/DmarcReportPage.js:282 msgid "Total Messages" msgstr "Total Messages" @@ -1784,6 +1841,10 @@ msgstr "Total users" msgid "Track Digital Security" msgstr "Track Digital Security" +#: src/Page.js:8 +msgid "Tracker" +msgstr "Tracker" + #: src/TopBanner.js:36 msgid "Tracker Logo" msgstr "Tracker Logo" @@ -1792,12 +1853,12 @@ msgstr "Tracker Logo" msgid "Two Factor Authentication" msgstr "Two Factor Authentication" -#: src/UserList.js:243 -#: src/UserList.js:299 +#: src/UserList.js:265 +#: src/UserList.js:321 msgid "USER" msgstr "USER" -#: src/UserList.js:65 +#: src/UserList.js:66 msgid "Unable to change user role, please try again." msgstr "Unable to change user role, please try again." @@ -1805,14 +1866,22 @@ msgstr "Unable to change user role, please try again." msgid "Unable to create account, please try again." msgstr "Unable to create account, please try again." +#: src/AdminDomains.js:113 +msgid "Unable to create new domain." +msgstr "Unable to create new domain." + #: src/CreateUserPage.js:54 msgid "Unable to create your account, please try again." msgstr "Unable to create your account, please try again." -#: src/UserList.js:116 +#: src/UserList.js:138 msgid "Unable to invite user." msgstr "Unable to invite user." +#: src/AdminDomains.js:166 +msgid "Unable to remove domain." +msgstr "Unable to remove domain." + #: src/ScanDomain.js:32 msgid "Unable to request scan, please try again." msgstr "Unable to request scan, please try again." @@ -1832,6 +1901,10 @@ msgstr "Unable to send password reset link to email." msgid "Unable to sign in to your account, please try again." msgstr "Unable to sign in to your account, please try again." +#: src/AdminDomains.js:218 +msgid "Unable to update domain." +msgstr "Unable to update domain." + #: src/ResetPasswordPage.js:31 msgid "Unable to update password" msgstr "Unable to update password" @@ -1856,6 +1929,10 @@ msgstr "Unable to update to your preferred language, please try again." msgid "Unable to update to your username, please try again." msgstr "Unable to update to your username, please try again." +#: src/UserList.js:85 +msgid "Unable to update user role." +msgstr "Unable to update user role." + #: src/EditableUserPassword.js:73 msgid "Unable to update your password, please try again." msgstr "Unable to update your password, please try again." @@ -1873,12 +1950,12 @@ msgid "Use DKIM to validate outbound email sent from your custom domain" msgstr "Use DKIM to validate outbound email sent from your custom domain" #: src/AdminPage.js:42 -#: src/OrganizationAffiliations.js:41 +#: src/OrganizationAffiliations.js:39 msgid "User Affiliations" msgstr "User Affiliations" -#: src/UserList.js:141 -#: src/UserList.js:197 +#: src/UserList.js:163 +#: src/UserList.js:219 msgid "User List" msgstr "User List" @@ -1887,11 +1964,11 @@ msgstr "User List" #~ msgid "User Profile" #~ msgstr "User Profile" -#: src/UserList.js:105 +#: src/UserList.js:127 msgid "User invited" msgstr "User invited" -#: src/OrganizationDetails.js:91 +#: src/OrganizationDetails.js:94 msgid "Users" msgstr "Users" @@ -1911,7 +1988,7 @@ msgstr "Verification TXT records for some/all 3rd party senders missing" msgid "Verification code must only contains numbers" msgstr "Verification code must only contains numbers" -#: src/Organizations.js:138 +#: src/Organizations.js:135 msgid "Verified" msgstr "Verified" @@ -1973,7 +2050,7 @@ msgstr "Welcome, you are successfully signed in to your new account!" msgid "Welcome, you are successfully signed in!" msgstr "Welcome, you are successfully signed in!" -#: src/DmarcReportPage.js:192 +#: src/DmarcReportPage.js:194 msgid "Yearly DMARC Graph" msgstr "Yearly DMARC Graph" @@ -1985,7 +2062,7 @@ msgstr "You do not have admin permissions in any organization" msgid "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA." msgstr "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA." -#: src/App.js:100 +#: src/App.js:101 #: src/FloatingMenu.js:149 msgid "You have successfully been signed out." msgstr "You have successfully been signed out." @@ -2022,6 +2099,10 @@ msgstr "You may now sign in with your new password" msgid "Your 2FA app will then have a valid code that you can use when you sign in." msgstr "Your 2FA app will then have a valid code that you can use when you sign in." +#: src/App.js:181 +msgid "Your Account" +msgstr "Your Account" + #: src/guidanceTagConstants.js:6 msgid "https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322" msgstr "https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322" @@ -2106,7 +2187,7 @@ msgstr "of" msgid "pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)" msgstr "pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)" -#: src/AdminDomains.js:102 +#: src/AdminDomains.js:104 msgid "{0} was added to {orgSlug}" msgstr "{0} was added to {orgSlug}" @@ -2114,10 +2195,10 @@ msgstr "{0} was added to {orgSlug}" msgid "{count} records..." msgstr "{count} records..." -#: src/AdminDomains.js:165 +#: src/AdminDomains.js:209 msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}" msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}" -#: src/OrganizationDetails.js:76 +#: src/OrganizationDetails.js:79 msgid "{orgName}" msgstr "{orgName}" diff --git a/frontend/src/locales/fr.js b/frontend/src/locales/fr.js index 3d5d2fcdf4..965b644ab1 100644 --- a/frontend/src/locales/fr.js +++ b/frontend/src/locales/fr.js @@ -1,9 +1,5 @@ /*eslint-disable*/ module.exports = { messages: { - '*All data represented is mocked for demonstration purposes': - '*Toutes les données représentées sont simulées à des fins de démonstration', - "*search bars do not actively search databases currently. They are used to demonstrate the 'add' button feature": - "*Les barres de recherche ne recherchent pas activement les bases de données actuellement. Elles sont utilisées pour démontrer la fonction du bouton 'Ajouter'", '3.2.2 Third Parties and DKIM': '3.2.2 Expéditeurs tiers et DKIM', '404 - Page Not Found': '404 - Page non trouvée', 'A-all': 'A-all', @@ -33,6 +29,7 @@ 'Account created.': 'Compte créé', Acronym: 'Acronyme', 'Add Domain': 'Ajouter un domaine', + Admin: 'Administrateur', 'Admin Portal': 'Portail Admin', 'Admin Profile': "Profil de l'administrateur", 'An email was sent with a link to reset your password': @@ -58,6 +55,8 @@ 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.': "Conformément à la section 3.6.1 du RFC, l'indicateur de test t=y signifie que les vérificateurs DOIVENT traiter les messages comme non signés (c'est-à-dire que DKIM n'est pas activé), donc cet indicateur ne doit pas être activé.", August: 'Août', + Authenticate: 'Authentifier', + 'Authentication QR Code': "Code QR d'authentification", 'B.1.1 SPF Records': 'B.1.1 Enregistrements SPF', 'B.1.3 DNS Lookup Limit': 'B.1.3 Limite de recherches DNS', 'B.2.1 DKIM Records': 'B.2.1 Enregistrements DKIM', @@ -71,8 +70,8 @@ 'CCCS added to Forensic sender list': 'Le CCCS ajouté à la liste des expéditeurs de la police scientifique', 'CNAME-DMARC': 'CNAME-DMARC', - 'Canadians rely on the Government of Canada to provide secure digital services. A new policy notice guides government websites to adopt good web security practices. Track how government sites are becoming more secure.': - "Les Canadiens s'attendent à ce que le gouvernement du Canada leur offre des services en ligne sécurisés. Un nouvel avis de politique vise à assurer que les sites gouvernementaux soient conformes aux bonnes pratiques en matière de sécurité Web. Voyez comment les sites gouvernementaux deviennent plus sécuritaires.", + 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.': + "Les Canadiens comptent sur le gouvernement du Canada pour fournir des services numériques sécurisés. La Politique sur les services et le numérique guide les services en ligne du gouvernement pour qu'ils adoptent de bonnes pratiques de sécurité pour le courrier électronique et les services Web. Suivez l'évolution de la sécurisation des sites gouvernementaux.", 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.': 'Le CCCS ajouté à la liste des expéditeurs de la police scientifique', 'Certificate chain signed using SHA-256/SHA-384/AEAD': @@ -98,6 +97,7 @@ 'Confirm removal of domain:': 'Confirmer la suppression du domaine :', 'Contact 3rd party': 'Contacter une tierce partie', 'Create Account': 'Créer un compte', + 'Create an Account': 'Créer un compte', 'Create an account by entering an email and password.': 'Créez un compte en entrant un courriel et un mot de passe.', 'Current Display Name:': "Nom de l'affichage actuel :", @@ -126,6 +126,7 @@ 'DKIM-value-invalid': 'DKIM-value-invalid', 'DMARC Failure Table': 'Tableau des échecs de la DMARC', 'DMARC Failures by IP Address': 'Défaillances du DMARC par adresse IP', + 'DMARC Implementation Phase: {0}': ['DMARC Implementation Phase: ', ['0']], 'DMARC Implementation Phase: {status}': [ 'Phase de mise en œuvre de la DMARC: ', ['status'], @@ -144,6 +145,8 @@ 'Display name cannot be empty': "Le nom d'affichage ne peut pas être vide", Disposition: 'Disposition', Domain: 'Domaine', + 'Domain DMARC Report': 'Rapport DMARC de domaine', + 'Domain Details': 'Détails du domaine', 'Domain List': 'Liste des domaines', 'Domain URL': 'URL du domaine', 'Domain URL:': 'URL du domaine:', @@ -198,6 +201,7 @@ 'Pour des conseils approfondis sur la mise en œuvre du CCCS :', 'For technical implementation guidance:': 'Pour des conseils de mise en œuvre technique :', + 'Forgot Password': 'Mot de passe oublié', 'Forgot your password?': 'Oublié votre mot de passe?', 'Full Fail %': 'Échec total %', 'Full Pass %': 'Passage complet %', @@ -245,8 +249,12 @@ 'Implementation Status:': "État d'avancement de la mise en œuvre:", 'Incorrect authenticate.result typename.': 'Incorrect authenticate.result typename.', + 'Incorrect createDomain.result typename.': + 'Incorrect createDomain.result typename.', 'Incorrect inviteUserToOrg.result typename.': 'Incorrect inviteUserToOrg.result typename.', + 'Incorrect removeDomain.result typename.': + 'Incorrect removeDomain.result typename.', 'Incorrect resetPassword.result typename.': 'Incorrect resetPassword.result typename.', 'Incorrect send method received.': "Méthode d'envoi incorrecte reçue.", @@ -255,10 +263,14 @@ 'Incorrect signIn.result typename.': "Nom d'utilisateur incorrect signIn.result.", 'Incorrect signUp.result typename.': 'Incorrect signUp.result typename.', + 'Incorrect updateDomain.result typename.': + 'Incorrect updateDomain.result typename.', 'Incorrect updateUserPassword.result typename.': 'Incorrect updateUserPassword.result typename.', 'Incorrect updateUserProfile.result typename.': 'Incorrect updateUserProfile.result typename.', + 'Incorrect updateUserRole.result typename.': + 'Incorrect updateUserRole.result typename.', 'Incorrect verifyPhoneNumber.result typename.': "Une erreur s'est produite lors de la vérification de votre numéro de téléphone.", 'Internet facing services': "Services d'accès à Internet", @@ -330,7 +342,6 @@ 'One or more ciphers in use are not compliant with guidelines': 'Un ou plusieurs chiffres utilisés ne sont pas conformes aux lignes directrices', 'Organization Details': "Détails de l'organisation", - 'Organization Info': "Informations sur l'organisation", 'Organization:': 'Organisation:', Organizations: 'Organisations', 'Owner has not configured Aggregate reporting.': @@ -372,7 +383,6 @@ 'Le mot de passe doit comporter au moins 12 caractères', 'Password:': 'Mot de passe :', 'Passwords must match': 'Les mots de passe doivent correspondre', - 'Phase:': 'Phase:', Phone: 'Téléphone', 'Phone Number': 'Numéro de téléphone', 'Phone Number:': 'Numéro de téléphone:', @@ -425,6 +435,7 @@ 'RUF-none': 'RUF-none', 'Remove Domain': 'Supprimer un domaine', 'Request a domain to be scanned:': "Demander qu'un domaine soit scanné:", + 'Reset Password': 'Réinitialiser le mot de passe', 'Result:': 'Résultat', 'Results for scans of email technologies (DMARC, SPF, DKIM).': 'Résultats des analyses des technologies du courrier électronique (DMARC, SPF, DKIM).', @@ -490,8 +501,6 @@ 'Source IP Address': 'Adresse IP source', Submit: 'Soumettre', Summary: 'Résumé', - 'Summary Cards': 'Fiches de synthèse', - 'Summary:': 'Résumé:', 'T-enabled': 'T-enabled', TBD: 'TBD', 'TFA Method:': 'Méthode TFA:', @@ -509,8 +518,8 @@ 'Ce service est développé de façon ouverte', 'Total Messages': 'Total des messages', 'Total users': 'total des utilisateurs', - 'Track Web Security Compliance': - 'Suivre la conformité de la sécurité du Web', + 'Track Digital Security': 'Track Digital Security', + Tracker: 'Suivi', 'Tracker Logo': 'Logo du Tracker', 'Two Factor Authentication': 'Authentification à deux facteurs', USER: 'UTILISATEUR', @@ -518,9 +527,11 @@ "Impossible de modifier le rôle de l'utilisateur, veuillez réessayer.", 'Unable to create account, please try again.': 'Unable to create account, please try again.', + 'Unable to create new domain.': 'Unable to create new domain.', 'Unable to create your account, please try again.': 'Impossible de créer votre compte, veuillez réessayer', 'Unable to invite user.': 'Unable to invite user.', + 'Unable to remove domain.': 'Unable to remove domain.', 'Unable to request scan, please try again.': 'Impossible de demander un balayage, veuillez réessayer.', 'Unable to reset your password, please try again.': @@ -529,6 +540,7 @@ "Impossible d'envoyer le lien de réinitialisation du mot de passe par courriel.", 'Unable to sign in to your account, please try again.': 'Impossible de vous connecter à votre compte, veuillez réessayer.', + 'Unable to update domain.': 'Unable to update domain.', 'Unable to update password': 'Impossible de mettre à jour le mot de passe', 'Unable to update to your TFA send method, please try again.': "Impossible de mettre à jour votre méthode d'envoi TFA, veuillez réessayer.", @@ -540,6 +552,7 @@ 'Impossible de mettre à jour votre langue préférée, veuillez réessayer.', 'Unable to update to your username, please try again.': "Impossible de mettre à jour votre nom d'utilisateur, veuillez réessayer.", + 'Unable to update user role.': 'Unable to update user role.', 'Unable to update your password, please try again.': 'Impossible de mettre à jour votre mot de passe, veuillez réessayer.', 'Unable to update your phone number, please try again.': @@ -605,6 +618,7 @@ 'Vous pouvez maintenant vous connecter avec votre nouveau mot de passe', 'Your 2FA app will then have a valid code that you can use when you sign in.': "Votre application 2FA disposera alors d'un code valide que vous pourrez utiliser lorsque vous vous connecterez.", + 'Your Account': 'Votre compte', 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322': 'https://cyber.gc.ca/fr/orientation/directives-de-mise-en-oeuvre-protection-du-domaine-de-courrier#a322', 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23': diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po index 7767e6dfce..6f59a889ba 100644 --- a/frontend/src/locales/fr.po +++ b/frontend/src/locales/fr.po @@ -53,8 +53,8 @@ msgstr "A.5 Tenir les éléments à jour" msgid "A.5.3 Rotate DKIM Keys" msgstr "A.5.3 Assurer la rotation des clés DKIM" -#: src/UserList.js:244 -#: src/UserList.js:302 +#: src/UserList.js:266 +#: src/UserList.js:324 msgid "ADMIN" msgstr "ADMIN" @@ -90,7 +90,7 @@ msgstr "La liste de chiffrement acceptée contient le chiffrement 3DES à blocs msgid "Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01" msgstr "La liste de chiffrement acceptée contient le chiffrement de flux RC4, tel qu'interdit par le BOD 18-01" -#: src/App.js:83 +#: src/App.js:84 #: src/FloatingMenu.js:129 #: src/UserPage.js:35 msgid "Account Settings" @@ -100,19 +100,23 @@ msgstr "Paramètres du compte" msgid "Account created." msgstr "Compte créé" -#: src/Organizations.js:132 +#: src/Organizations.js:129 msgid "Acronym" msgstr "Acronyme" -#: src/AdminDomains.js:232 +#: src/AdminDomains.js:296 msgid "Add Domain" msgstr "Ajouter un domaine" +#: src/App.js:155 +msgid "Admin" +msgstr "Administrateur" + #: src/FloatingMenu.js:131 msgid "Admin Portal" msgstr "Portail Admin" -#: src/App.js:89 +#: src/App.js:90 msgid "Admin Profile" msgstr "Profil de l'administrateur" @@ -152,17 +156,17 @@ msgstr "Une erreur s'est produite lors de la mise à jour de votre numéro de t msgid "An error occurred while verifying your phone number." msgstr "Une erreur s'est produite lors de la mise à jour de votre numéro de téléphone." -#: src/AdminDomains.js:91 -#: src/AdminDomains.js:123 -#: src/AdminDomains.js:154 -#: src/AdminDomains.js:212 +#: src/AdminDomains.js:92 +#: src/AdminDomains.js:145 +#: src/AdminDomains.js:197 +#: src/AdminDomains.js:276 #: src/TwoFactorAuthenticatePage.js:34 -#: src/UserList.js:94 -#: src/UserList.js:186 +#: src/UserList.js:116 +#: src/UserList.js:208 msgid "An error occurred." msgstr "Une erreur s'est produite." -#: src/UserList.js:315 +#: src/UserList.js:337 msgid "Apply" msgstr "Appliquer" @@ -178,6 +182,14 @@ msgstr "Conformément à la section 3.6.1 du RFC, l'indicateur de test t=y signi msgid "August" msgstr "Août" +#: src/App.js:136 +msgid "Authenticate" +msgstr "Authentifier" + +#: src/App.js:185 +msgid "Authentication QR Code" +msgstr "Code QR d'authentification" + #: src/guidanceTagConstants.js:37 msgid "B.1.1 SPF Records" msgstr "B.1.1 Enregistrements SPF" @@ -277,8 +289,8 @@ msgstr "Le champ de code ne doit pas être vide" msgid "Compliant TLS" msgstr "TLS conformant" -#: src/AdminDomains.js:369 -#: src/AdminDomains.js:412 +#: src/AdminDomains.js:434 +#: src/AdminDomains.js:477 #: src/EditableUserDisplayName.js:177 #: src/EditableUserEmail.js:175 #: src/EditableUserPassword.js:198 @@ -299,7 +311,7 @@ msgstr "Confirmez le mot de passe :" msgid "Confirm password" msgstr "Confirmer le mot de passe" -#: src/AdminDomains.js:392 +#: src/AdminDomains.js:457 msgid "Confirm removal of domain:" msgstr "Confirmer la suppression du domaine :" @@ -312,6 +324,10 @@ msgstr "Contacter une tierce partie" msgid "Create Account" msgstr "Créer un compte" +#: src/App.js:127 +msgid "Create an Account" +msgstr "Créer un compte" + #: src/CreateUserPage.js:142 msgid "Create an account by entering an email and password." msgstr "Créez un compte en entrant un courriel et un mot de passe." @@ -320,7 +336,7 @@ msgstr "Créez un compte en entrant un courriel et un mot de passe." msgid "Current Display Name:" msgstr "Nom de l'affichage actuel :" -#: src/AdminDomains.js:327 +#: src/AdminDomains.js:392 msgid "Current Domain URL:" msgstr "URL du domaine actuel :" @@ -336,7 +352,7 @@ msgstr "Mot de passe actuel :" msgid "Current Phone Number:" msgstr "Numéro de téléphone actuel:" -#: src/DmarcReportPage.js:305 +#: src/DmarcReportPage.js:307 msgid "DKIM Aligned" msgstr "DKIM Aligné" @@ -344,16 +360,16 @@ msgstr "DKIM Aligné" msgid "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." msgstr "Les CNAME DKIM n'existent pas, mais MX pointe vers *.onmicrosoft.com et l'enregistrement SPF inclut O365." -#: src/DmarcReportPage.js:272 +#: src/DmarcReportPage.js:274 msgid "DKIM Domains" msgstr "Domaines DKIM" -#: src/DmarcReportPage.js:327 +#: src/DmarcReportPage.js:329 msgid "DKIM Failure Table" msgstr "Tableau des échecs DKIM" -#: src/DmarcReportPage.js:338 -#: src/DmarcReportPage.js:370 +#: src/DmarcReportPage.js:340 +#: src/DmarcReportPage.js:372 msgid "DKIM Failures by IP Address" msgstr "Défaillances DKIM par adresse IP" @@ -361,11 +377,11 @@ msgstr "Défaillances DKIM par adresse IP" msgid "DKIM Flag t" msgstr "DKIM Flag t" -#: src/DmarcReportPage.js:309 +#: src/DmarcReportPage.js:311 msgid "DKIM Results" msgstr "Résultats DKIM" -#: src/DmarcReportPage.js:276 +#: src/DmarcReportPage.js:278 msgid "DKIM Selectors" msgstr "Sélecteurs DKIM" @@ -405,31 +421,36 @@ msgstr "DKIM-missing-mx-O365" msgid "DKIM-value-invalid" msgstr "DKIM-value-invalid" -#: src/DmarcReportPage.js:530 +#: src/DmarcReportPage.js:532 msgid "DMARC Failure Table" msgstr "Tableau des échecs de la DMARC" -#: src/DmarcReportPage.js:541 -#: src/DmarcReportPage.js:570 +#: src/DmarcReportPage.js:543 +#: src/DmarcReportPage.js:572 msgid "DMARC Failures by IP Address" msgstr "Défaillances du DMARC par adresse IP" +#: src/ScanCard.js:48 +msgid "DMARC Implementation Phase: {0}" +msgstr "" + #: src/ScanCard.js:61 -msgid "DMARC Implementation Phase: {status}" -msgstr "Phase de mise en œuvre de la DMARC: {status}" +#~ msgid "DMARC Implementation Phase: {status}" +#~ msgstr "Phase de mise en œuvre de la DMARC: {status}" -#: src/DmarcByDomainPage.js:124 -#: src/DmarcByDomainPage.js:228 +#: src/DmarcByDomainPage.js:121 +#: src/DmarcByDomainPage.js:226 msgid "DMARC Messages" msgstr "Messages de la DMARC" #: src/ScanCard.js:50 -msgid "DMARC Not Implemented" -msgstr "La DMARC n'est pas mise en œuvre" +#~ msgid "DMARC Not Implemented" +#~ msgstr "La DMARC n'est pas mise en œuvre" -#: src/App.js:77 -#: src/DmarcGuidancePage.js:60 -#: src/DomainCard.js:165 +#: src/App.js:78 +#: src/App.js:177 +#: src/DmarcGuidancePage.js:62 +#: src/DomainCard.js:167 msgid "DMARC Report" msgstr "Rapport de la DMARC" @@ -449,7 +470,7 @@ msgstr "DMARC-GC" msgid "DMARC-missing" msgstr "DMARC-missing" -#: src/DmarcReportPage.js:285 +#: src/DmarcReportPage.js:287 msgid "DNS Host" msgstr "Hôte DNS" @@ -470,16 +491,25 @@ msgstr "Nom d'affichage :" msgid "Display name cannot be empty" msgstr "Le nom d'affichage ne peut pas être vide" -#: src/DmarcReportPage.js:313 +#: src/DmarcReportPage.js:315 msgid "Disposition" msgstr "Disposition" -#: src/DmarcByDomainPage.js:87 +#: src/DmarcByDomainPage.js:84 msgid "Domain" msgstr "Domaine" -#: src/AdminDomains.js:184 -#: src/AdminDomains.js:192 +#: src/App.js:171 +#: src/App.js:189 +msgid "Domain DMARC Report" +msgstr "Rapport DMARC de domaine" + +#: src/App.js:165 +msgid "Domain Details" +msgstr "Détails du domaine" + +#: src/AdminDomains.js:248 +#: src/AdminDomains.js:256 msgid "Domain List" msgstr "Liste des domaines" @@ -491,7 +521,7 @@ msgstr "URL du domaine" msgid "Domain URL:" msgstr "URL du domaine:" -#: src/AdminDomains.js:101 +#: src/AdminDomains.js:103 msgid "Domain added" msgstr "Domaine ajouté" @@ -515,15 +545,15 @@ msgstr "Domaine non préchargé par le HSTS" msgid "Domain not pre-loaded by HSTS, but is pre-load ready" msgstr "Le domaine n'est pas préchargé par le HSTS, mais est prêt à être préchargé" -#: src/AdminDomains.js:134 +#: src/AdminDomains.js:157 msgid "Domain removed" msgstr "Domaine supprimé" -#: src/AdminDomains.js:135 +#: src/AdminDomains.js:158 msgid "Domain removed from {orgSlug}" msgstr "Domaine supprimé de {orgSlug}" -#: src/AdminDomains.js:164 +#: src/AdminDomains.js:208 msgid "Domain updated" msgstr "Domaine mis à jour" @@ -536,19 +566,20 @@ msgid "Domain uses potentially-outsourced DMARC service" msgstr "Le domaine utilise un service DMARC potentiellement externalisé" #: src/Domain.js:22 -#: src/DomainCard.js:44 +#: src/DomainCard.js:46 msgid "Domain:" msgstr "Domaine:" -#: src/App.js:71 -#: src/DomainsPage.js:58 -#: src/DomainsPage.js:65 -#: src/OrganizationDetails.js:88 -#: src/OrganizationDomains.js:41 +#: src/App.js:72 +#: src/App.js:161 +#: src/DomainsPage.js:54 +#: src/DomainsPage.js:61 +#: src/OrganizationDetails.js:91 +#: src/OrganizationDomains.js:39 msgid "Domains" msgstr "Domaines" -#: src/DmarcByDomainPage.js:59 +#: src/DmarcByDomainPage.js:56 msgid "Domains Table" msgstr "Tableau des domaines" @@ -564,7 +595,7 @@ msgstr "Edit" msgid "Edit Display Name" msgstr "Modifier le nom d'affichage" -#: src/AdminDomains.js:321 +#: src/AdminDomains.js:386 msgid "Edit Domain Details" msgstr "Modifier les détails d'un domaine" @@ -599,7 +630,7 @@ msgstr "Courriel validé" msgid "Email cannot be empty" msgstr "Le courriel ne peut être vide" -#: src/UserList.js:106 +#: src/UserList.js:128 msgid "Email invitation sent to {addedUserName}" msgstr "Invitation par courrier électronique envoyée à jim@hotmail.com" @@ -628,20 +659,20 @@ msgstr "Entrez le code à deux facteurs" msgid "Enter your user account's verified email address and we will send you a password reset link." msgstr "Saisissez l'adresse électronique vérifiée de votre compte d'utilisateur et nous vous enverrons un lien pour réinitialiser votre mot de passe." -#: src/DmarcReportPage.js:267 +#: src/DmarcReportPage.js:269 msgid "Envelope From" msgstr "Enveloppe De" -#: src/DmarcReportPage.js:224 +#: src/DmarcReportPage.js:226 #: src/fixtures/summaryListData.js:171 msgid "Fail" msgstr "Échec" -#: src/DmarcByDomainPage.js:103 +#: src/DmarcByDomainPage.js:100 msgid "Fail DKIM %" msgstr "Échec DKIM %" -#: src/DmarcByDomainPage.js:109 +#: src/DmarcByDomainPage.js:106 msgid "Fail SPF %" msgstr "Échec du SPF %" @@ -675,24 +706,28 @@ msgstr "Pour des conseils approfondis sur la mise en œuvre du CCCS :" msgid "For technical implementation guidance:" msgstr "Pour des conseils de mise en œuvre technique :" +#: src/App.js:139 +msgid "Forgot Password" +msgstr "Mot de passe oublié" + #: src/SignInPage.js:142 msgid "Forgot your password?" msgstr "Oublié votre mot de passe?" -#: src/DmarcByDomainPage.js:115 +#: src/DmarcByDomainPage.js:112 msgid "Full Fail %" msgstr "Échec total %" -#: src/DmarcByDomainPage.js:97 +#: src/DmarcByDomainPage.js:94 msgid "Full Pass %" msgstr "Passage complet %" -#: src/DmarcReportPage.js:397 +#: src/DmarcReportPage.js:399 msgid "Fully Aligned Table" msgstr "Tableau entièrement aligné" -#: src/DmarcReportPage.js:408 -#: src/DmarcReportPage.js:435 +#: src/DmarcReportPage.js:410 +#: src/DmarcReportPage.js:437 msgid "Fully Aligned by IP Address" msgstr "Entièrement aligné par adresse IP" @@ -709,26 +744,26 @@ msgstr "Aller à la page" msgid "Government of Canada domains subject to TBS guidelines" msgstr "Les domaines du gouvernement du Canada sont soumis aux directives du SCT" -#: src/DmarcReportPage.js:295 -#: src/DmarcReportPage.js:616 +#: src/DmarcReportPage.js:297 +#: src/DmarcReportPage.js:618 msgid "Guidance" msgstr "Conseils" -#: src/DmarcGuidancePage.js:33 +#: src/DmarcGuidancePage.js:35 msgid "Guidance Tags" msgstr "Étiquettes d'orientation" -#: src/GuidanceTagDetails.js:74 +#: src/GuidanceTagDetails.js:82 msgid "Guidance:" msgstr "Orientation :" #: src/PolicyComplianceDetails.js:36 -msgid "HSTS Age:" -msgstr "Âge du HSTS:" +#~ msgid "HSTS Age:" +#~ msgstr "Âge du HSTS:" #: src/PolicyComplianceDetails.js:29 -msgid "HSTS Status:" -msgstr "Statut du HSTS:" +#~ msgid "HSTS Status:" +#~ msgstr "Statut du HSTS:" #: src/guidanceTagConstants.js:528 msgid "HSTS-missing" @@ -810,11 +845,12 @@ msgstr "" msgid "HTTPS-weakly-enforced" msgstr "" -#: src/DmarcReportPage.js:291 +#: src/DmarcReportPage.js:293 msgid "Header From" msgstr "En-tête De" -#: src/App.js:60 +#: src/App.js:61 +#: src/App.js:123 #: src/FloatingMenu.js:127 msgid "Home" msgstr "Accueil" @@ -839,21 +875,32 @@ msgid "ITPIN Compliant" msgstr "Conforme à l'ITPIN" #: src/PolicyComplianceDetails.js:17 -msgid "Implementation Status:" -msgstr "État d'avancement de la mise en œuvre:" +#~ msgid "Implementation Status:" +#~ msgstr "État d'avancement de la mise en œuvre:" #: src/TwoFactorAuthenticatePage.js:81 msgid "Incorrect authenticate.result typename." msgstr "" -#: src/UserList.js:126 +#: src/AdminDomains.js:123 +msgid "Incorrect createDomain.result typename." +msgstr "" + +#: src/UserList.js:148 msgid "Incorrect inviteUserToOrg.result typename." msgstr "" +#: src/AdminDomains.js:176 +msgid "Incorrect removeDomain.result typename." +msgstr "" + #: src/ResetPasswordPage.js:61 msgid "Incorrect resetPassword.result typename." msgstr "" +#: src/AdminDomains.js:122 +#: src/AdminDomains.js:175 +#: src/AdminDomains.js:227 #: src/CreateUserPage.js:92 #: src/EditableUserDisplayName.js:82 #: src/EditableUserEmail.js:80 @@ -865,7 +912,8 @@ msgstr "" #: src/ResetPasswordPage.js:60 #: src/SignInPage.js:98 #: src/TwoFactorAuthenticatePage.js:80 -#: src/UserList.js:125 +#: src/UserList.js:94 +#: src/UserList.js:147 msgid "Incorrect send method received." msgstr "Méthode d'envoi incorrecte reçue." @@ -881,6 +929,10 @@ msgstr "Nom d'utilisateur incorrect signIn.result." msgid "Incorrect signUp.result typename." msgstr "" +#: src/AdminDomains.js:228 +msgid "Incorrect updateDomain.result typename." +msgstr "" + #: src/EditableUserPassword.js:83 msgid "Incorrect updateUserPassword.result typename." msgstr "" @@ -892,6 +944,10 @@ msgstr "" msgid "Incorrect updateUserProfile.result typename." msgstr "" +#: src/UserList.js:95 +msgid "Incorrect updateUserRole.result typename." +msgstr "" + #: src/EditableUserPhoneNumber.js:130 msgid "Incorrect verifyPhoneNumber.result typename." msgstr "Une erreur s'est produite lors de la vérification de votre numéro de téléphone." @@ -917,7 +973,7 @@ msgstr "Pourcentage non valable" msgid "Invalid public key" msgstr "Clé publique invalide" -#: src/UserList.js:258 +#: src/UserList.js:280 msgid "Invite User" msgstr "Inviter l'utilisateur" @@ -942,19 +998,19 @@ msgstr "" msgid "Language:" msgstr "La langue:" -#: src/DmarcByDomainPage.js:189 -#: src/DmarcReportPage.js:138 +#: src/DmarcByDomainPage.js:187 +#: src/DmarcReportPage.js:140 msgid "Last 30 Days" msgstr "Les 30 derniers jours" #: src/Domain.js:39 -#: src/DomainCard.js:53 +#: src/DomainCard.js:55 msgid "Last scanned:" msgstr "Dernier scan:" #: src/PolicyComplianceDetails.js:23 -msgid "Level of Enforcment:" -msgstr "Niveau d'application:" +#~ msgid "Level of Enforcment:" +#~ msgstr "Niveau d'application:" #: src/LoadingMessage.js:12 msgid "Loading {children}..." @@ -1051,7 +1107,7 @@ msgstr "Absent du guide - besoin v1.1" msgid "More than 10 lookups - Follow implementation guide" msgstr "Plus de 10 consultations - Suivez le guide de mise en œuvre" -#: src/Organizations.js:129 +#: src/Organizations.js:126 msgid "Name" msgstr "Nom" @@ -1059,11 +1115,11 @@ msgstr "Nom" msgid "New Display Name:" msgstr "Nouveau nom d'affichage :" -#: src/AdminDomains.js:350 +#: src/AdminDomains.js:415 msgid "New Domain Url" msgstr "Nouvel Url de domaine" -#: src/AdminDomains.js:344 +#: src/AdminDomains.js:409 msgid "New Domain Url:" msgstr "Nouvelle URL de domaine :" @@ -1079,24 +1135,21 @@ msgstr "Nouveau mot de passe :" msgid "New Phone Number:" msgstr "Nouveau numéro de téléphone:" -#: src/AdminDomains.js:213 +#: src/AdminDomains.js:277 msgid "New domain name cannot be empty" msgstr "Un nouveau nom de domaine ne peut pas être vide" -#: src/DomainsPage.js:127 -#: src/OrganizationAffiliations.js:80 -#: src/OrganizationDomains.js:78 -#: src/RelayPaginationControls.js:61 +#: src/RelayPaginationControls.js:65 msgid "Next" msgstr "Suivant" -#: src/AdminDomains.js:242 -#: src/DomainsPage.js:93 -#: src/OrganizationDomains.js:51 +#: src/AdminDomains.js:306 +#: src/DomainsPage.js:89 +#: src/OrganizationDomains.js:49 msgid "No Domains" msgstr "Aucun domaine" -#: src/Organizations.js:72 +#: src/Organizations.js:69 msgid "No Organizations" msgstr "Aucune organisation" @@ -1108,7 +1161,7 @@ msgstr "Pas de RUA définis" msgid "No RUFs defined" msgstr "Pas de RUF définis" -#: src/OrganizationAffiliations.js:51 +#: src/OrganizationAffiliations.js:50 msgid "No Users" msgstr "Pas d'utilisateurs" @@ -1116,27 +1169,27 @@ msgstr "Pas d'utilisateurs" msgid "No current phone number" msgstr "Pas de numéro de téléphone actuel" -#: src/DmarcReportPage.js:385 +#: src/DmarcReportPage.js:387 msgid "No data for the DKIM Failures by IP Address table" msgstr "Aucune donnée pour le tableau des défaillances DKIM par adresse IP" -#: src/DmarcReportPage.js:585 +#: src/DmarcReportPage.js:587 msgid "No data for the DMARC Failures by IP Address table" msgstr "Pas de données pour le tableau des défaillances DMARC par adresse IP" -#: src/DmarcByDomainPage.js:172 +#: src/DmarcByDomainPage.js:170 msgid "No data for the DMARC summary table" msgstr "Pas de données pour le tableau récapitulatif de la DMARC" -#: src/DmarcReportPage.js:256 +#: src/DmarcReportPage.js:258 msgid "No data for the DMARC yearly report graph" msgstr "Pas de données pour le graphique du rapport annuel de la DMARC" -#: src/DmarcReportPage.js:450 +#: src/DmarcReportPage.js:452 msgid "No data for the Fully Aligned by IP Address table" msgstr "Pas de données pour le tableau Entièrement aligné par adresse IP" -#: src/DmarcReportPage.js:518 +#: src/DmarcReportPage.js:520 msgid "No data for the SPF Failures by IP Address table" msgstr "Aucune donnée pour le tableau des défaillances du SPF par adresse IP" @@ -1148,7 +1201,7 @@ msgstr "Aucun domaine n'a encore été scanné." msgid "No scan data for this organization." msgstr "Aucune donnée d'analyse pour cette organisation." -#: src/UserList.js:266 +#: src/UserList.js:288 msgid "No users in this organization" msgstr "Aucun utilisateur dans cette organisation" @@ -1161,7 +1214,7 @@ msgid "None" msgstr "Aucune" #: src/Domain.js:50 -#: src/DomainCard.js:59 +#: src/DomainCard.js:61 msgid "Not scanned yet." msgstr "Pas encore scanné." @@ -1177,7 +1230,8 @@ msgstr "Octobre" msgid "One or more ciphers in use are not compliant with guidelines" msgstr "Un ou plusieurs chiffres utilisés ne sont pas conformes aux lignes directrices" -#: src/OrganizationDetails.js:60 +#: src/App.js:151 +#: src/OrganizationDetails.js:63 msgid "Organization Details" msgstr "Détails de l'organisation" @@ -1185,9 +1239,10 @@ msgstr "Détails de l'organisation" msgid "Organization:" msgstr "Organisation:" -#: src/App.js:65 -#: src/Organizations.js:65 -#: src/Organizations.js:100 +#: src/App.js:66 +#: src/App.js:147 +#: src/Organizations.js:62 +#: src/Organizations.js:97 msgid "Organizations" msgstr "Organisations" @@ -1280,7 +1335,7 @@ msgstr "" msgid "Page" msgstr "Page" -#: src/RelayPaginationControls.js:30 +#: src/RelayPaginationControls.js:31 msgid "Page Size:" msgstr "Taille de la page :" @@ -1288,22 +1343,22 @@ msgstr "Taille de la page :" msgid "Page {0} of {1}" msgstr "Page {0} de {1}" -#: src/DmarcReportPage.js:206 +#: src/DmarcReportPage.js:208 #: src/fixtures/summaryListData.js:155 msgid "Pass" msgstr "Passez" -#: src/DmarcReportPage.js:218 +#: src/DmarcReportPage.js:220 #: src/fixtures/summaryListData.js:165 msgid "Pass Only DKIM" msgstr "Passez seulement DKIM" -#: src/DmarcReportPage.js:212 +#: src/DmarcReportPage.js:214 #: src/fixtures/summaryListData.js:161 msgid "Pass Only SPF" msgstr "Passez seulement SPF" -#: src/DmarcByDomainPage.js:150 +#: src/DmarcByDomainPage.js:148 msgid "Pass/Fail Ratios by Domain" msgstr "Ratios succès/échec par domaine" @@ -1391,27 +1446,24 @@ msgstr "La politique ne s'applique à aucune partie du flux de courrier - config msgid "Policy applies to percentage of mailflow" msgstr "La politique s'applique au pourcentage du flux de courrier" -#: src/App.js:52 +#: src/App.js:53 msgid "Pre-Alpha" msgstr "préalpha" #: src/PolicyComplianceDetails.js:43 -msgid "Preloaded Status:" -msgstr "Statut préchargé:" +#~ msgid "Preloaded Status:" +#~ msgstr "Statut préchargé:" -#: src/DomainsPage.js:119 -#: src/OrganizationAffiliations.js:76 -#: src/OrganizationDomains.js:74 -#: src/RelayPaginationControls.js:52 +#: src/RelayPaginationControls.js:55 msgid "Previous" msgstr "Précédent" -#: src/App.js:202 +#: src/App.js:206 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Confidentialité" -#: src/GuidanceTagList.js:29 +#: src/GuidanceTagList.js:73 msgid "Properly configured!" msgstr "Bien configuré !" @@ -1479,7 +1531,7 @@ msgstr "" msgid "RUF-none" msgstr "" -#: src/AdminDomains.js:386 +#: src/AdminDomains.js:451 msgid "Remove Domain" msgstr "Supprimer un domaine" @@ -1487,7 +1539,11 @@ msgstr "Supprimer un domaine" msgid "Request a domain to be scanned:" msgstr "Demander qu'un domaine soit scanné:" -#: src/GuidanceTagDetails.js:68 +#: src/App.js:144 +msgid "Reset Password" +msgstr "Réinitialiser le mot de passe" + +#: src/GuidanceTagDetails.js:76 msgid "Result:" msgstr "Résultat" @@ -1499,11 +1555,11 @@ msgstr "Résultats des analyses des technologies du courrier électronique (DMAR msgid "Results for scans of web technologies (SSL, HTTPS)." msgstr "Résultats des analyses des technologies du web (SSL, HTTPS)." -#: src/UserList.js:74 +#: src/UserList.js:76 msgid "Role updated" msgstr "Rôle mis à jour" -#: src/UserList.js:286 +#: src/UserList.js:308 msgid "Role:" msgstr "Fonction:" @@ -1529,24 +1585,24 @@ msgstr "" msgid "SP-reject" msgstr "" -#: src/DmarcReportPage.js:297 +#: src/DmarcReportPage.js:299 msgid "SPF Aligned" msgstr "Alignement du SPF" -#: src/DmarcReportPage.js:287 +#: src/DmarcReportPage.js:289 msgid "SPF Domains" msgstr "Domaine SPF" -#: src/DmarcReportPage.js:462 +#: src/DmarcReportPage.js:464 msgid "SPF Failure Table" msgstr "Tableau des échecs du SPF" -#: src/DmarcReportPage.js:473 -#: src/DmarcReportPage.js:503 +#: src/DmarcReportPage.js:475 +#: src/DmarcReportPage.js:505 msgid "SPF Failures by IP Address" msgstr "Défaillances du SPF par adresse IP" -#: src/DmarcReportPage.js:301 +#: src/DmarcReportPage.js:303 msgid "SPF Results" msgstr "Résultats du SPF" @@ -1590,7 +1646,7 @@ msgstr "" msgid "SSL-rc4" msgstr "" -#: src/UserList.js:306 +#: src/UserList.js:328 msgid "SUPER_ADMIN" msgstr "SUPER_ADMIN" @@ -1602,7 +1658,7 @@ msgstr "Sauvegarder la langue" msgid "Save TFA Method" msgstr "Méthode Save TFA" -#: src/DomainsPage.js:74 +#: src/DomainsPage.js:70 msgid "Scan" msgstr "Scanner" @@ -1622,24 +1678,24 @@ msgstr "Scan du domaine demandé avec succès" msgid "Scan this QR code with a 2FA app like Authy or Google Authenticator" msgstr "Scannez ce code QR avec une application 2FA comme Authy ou Google Authenticator" -#: src/DomainsPage.js:71 +#: src/DomainsPage.js:67 msgid "Search" msgstr "Recherchez" -#: src/AdminDomains.js:200 -#: src/DomainsPage.js:88 +#: src/AdminDomains.js:264 +#: src/DomainsPage.js:84 msgid "Search for a domain" msgstr "Rechercher un domaine" -#: src/UserList.js:231 +#: src/UserList.js:253 msgid "Search for a user" msgstr "Rechercher un utilisateur" -#: src/Organizations.js:112 +#: src/Organizations.js:109 msgid "Search for an organization" msgstr "Rechercher une organisation" -#: src/DomainsPage.js:81 +#: src/DomainsPage.js:77 msgid "Search for any Government of Canada tracked domain:" msgstr "Recherchez n'importe quel domaine suivi par le Gouvernement du Canada:" @@ -1663,7 +1719,7 @@ msgstr "Sélectionnez une organisation pour voir les options d'administration" msgid "September" msgstr "Septembre" -#: src/Organizations.js:135 +#: src/Organizations.js:132 msgid "Services" msgstr "Services" @@ -1675,12 +1731,13 @@ msgstr "Services: {domainCount}" msgid "Show {pageSize}" msgstr "Voir {pageSize}" -#: src/DmarcByDomainPage.js:233 -#: src/DmarcReportPage.js:625 +#: src/DmarcByDomainPage.js:231 +#: src/DmarcReportPage.js:627 msgid "Showing data for period:" msgstr "Affichage des données pour la période :" -#: src/App.js:113 +#: src/App.js:114 +#: src/App.js:131 #: src/FloatingMenu.js:158 #: src/SignInPage.js:153 msgid "Sign In" @@ -1691,12 +1748,12 @@ msgstr "Se connecter" msgid "Sign In." msgstr "Se connecter." -#: src/App.js:109 +#: src/App.js:110 #: src/FloatingMenu.js:144 msgid "Sign Out" msgstr "Déconnexion" -#: src/App.js:99 +#: src/App.js:100 #: src/FloatingMenu.js:148 msgid "Sign Out." msgstr "Déconnexion." @@ -1705,15 +1762,15 @@ msgstr "Déconnexion." msgid "Sign in with your username and password." msgstr "Connectez-vous avec votre nom d'utilisateur et votre mot de passe." -#: src/App.js:50 +#: src/App.js:51 msgid "Skip to main content" msgstr "Passer au contenu principal" -#: src/Organizations.js:116 +#: src/Organizations.js:113 msgid "Sort by:" msgstr "Trier par:" -#: src/DmarcReportPage.js:262 +#: src/DmarcReportPage.js:264 msgid "Source IP Address" msgstr "Adresse IP source" @@ -1722,7 +1779,7 @@ msgstr "Adresse IP source" msgid "Submit" msgstr "Soumettre" -#: src/OrganizationDetails.js:85 +#: src/OrganizationDetails.js:88 msgid "Summary" msgstr "Résumé" @@ -1746,7 +1803,7 @@ msgstr "" msgid "TXT-DMARC-missing" msgstr "" -#: src/App.js:212 +#: src/App.js:216 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Avis" @@ -1759,7 +1816,7 @@ msgstr "Représentation textuelle" msgid "The page you are looking for has moved or does not exist." msgstr "La page que vous recherchez a été déplacée ou n'existe pas." -#: src/UserList.js:75 +#: src/UserList.js:77 msgid "The user's role has been successfully updated" msgstr "Le rôle de l'utilisateur a été mis à jour avec succès" @@ -1767,12 +1824,12 @@ msgstr "Le rôle de l'utilisateur a été mis à jour avec succès" msgid "This component is currently unavailable. Try reloading the page." msgstr "Ce composant n'est pas disponible actuellement. Essayez de recharger la page." -#: src/App.js:53 +#: src/App.js:54 msgid "This service is being developed in the open" msgstr "Ce service est développé de façon ouverte" -#: src/DmarcByDomainPage.js:91 -#: src/DmarcReportPage.js:280 +#: src/DmarcByDomainPage.js:88 +#: src/DmarcReportPage.js:282 msgid "Total Messages" msgstr "Total des messages" @@ -1784,6 +1841,10 @@ msgstr "total des utilisateurs" msgid "Track Digital Security" msgstr "" +#: src/Page.js:8 +msgid "Tracker" +msgstr "Suivi" + #: src/TopBanner.js:36 msgid "Tracker Logo" msgstr "Logo du Tracker" @@ -1792,12 +1853,12 @@ msgstr "Logo du Tracker" msgid "Two Factor Authentication" msgstr "Authentification à deux facteurs" -#: src/UserList.js:243 -#: src/UserList.js:299 +#: src/UserList.js:265 +#: src/UserList.js:321 msgid "USER" msgstr "UTILISATEUR" -#: src/UserList.js:65 +#: src/UserList.js:66 msgid "Unable to change user role, please try again." msgstr "Impossible de modifier le rôle de l'utilisateur, veuillez réessayer." @@ -1805,14 +1866,22 @@ msgstr "Impossible de modifier le rôle de l'utilisateur, veuillez réessayer." msgid "Unable to create account, please try again." msgstr "" +#: src/AdminDomains.js:113 +msgid "Unable to create new domain." +msgstr "" + #: src/CreateUserPage.js:54 msgid "Unable to create your account, please try again." msgstr "Impossible de créer votre compte, veuillez réessayer" -#: src/UserList.js:116 +#: src/UserList.js:138 msgid "Unable to invite user." msgstr "" +#: src/AdminDomains.js:166 +msgid "Unable to remove domain." +msgstr "" + #: src/ScanDomain.js:32 msgid "Unable to request scan, please try again." msgstr "Impossible de demander un balayage, veuillez réessayer." @@ -1832,6 +1901,10 @@ msgstr "Impossible d'envoyer le lien de réinitialisation du mot de passe par co msgid "Unable to sign in to your account, please try again." msgstr "Impossible de vous connecter à votre compte, veuillez réessayer." +#: src/AdminDomains.js:218 +msgid "Unable to update domain." +msgstr "" + #: src/ResetPasswordPage.js:31 msgid "Unable to update password" msgstr "Impossible de mettre à jour le mot de passe" @@ -1856,6 +1929,10 @@ msgstr "Impossible de mettre à jour votre langue préférée, veuillez réessay msgid "Unable to update to your username, please try again." msgstr "Impossible de mettre à jour votre nom d'utilisateur, veuillez réessayer." +#: src/UserList.js:85 +msgid "Unable to update user role." +msgstr "" + #: src/EditableUserPassword.js:73 msgid "Unable to update your password, please try again." msgstr "Impossible de mettre à jour votre mot de passe, veuillez réessayer." @@ -1873,12 +1950,12 @@ msgid "Use DKIM to validate outbound email sent from your custom domain" msgstr "Utilisez DKIM pour valider le courrier électronique sortant envoyé depuis votre domaine personnalisé" #: src/AdminPage.js:42 -#: src/OrganizationAffiliations.js:41 +#: src/OrganizationAffiliations.js:39 msgid "User Affiliations" msgstr "Affiliations des utilisateurs" -#: src/UserList.js:141 -#: src/UserList.js:197 +#: src/UserList.js:163 +#: src/UserList.js:219 msgid "User List" msgstr "Liste des utilisateurs" @@ -1887,11 +1964,11 @@ msgstr "Liste des utilisateurs" #~ msgid "User Profile" #~ msgstr "Profil de l'utilisateur" -#: src/UserList.js:105 +#: src/UserList.js:127 msgid "User invited" msgstr "Utilisateur invité" -#: src/OrganizationDetails.js:91 +#: src/OrganizationDetails.js:94 msgid "Users" msgstr "Utilisateurs" @@ -1911,7 +1988,7 @@ msgstr "Vérification des enregistrements TXT pour certains/toutes les expédite msgid "Verification code must only contains numbers" msgstr "Le code de vérification ne doit contenir que des chiffres" -#: src/Organizations.js:138 +#: src/Organizations.js:135 msgid "Verified" msgstr "Vérifié" @@ -1973,7 +2050,7 @@ msgstr "Veuillez choisir votre langue préférée" msgid "Welcome, you are successfully signed in!" msgstr "Bienvenue, vous êtes connecté avec succès!" -#: src/DmarcReportPage.js:192 +#: src/DmarcReportPage.js:194 msgid "Yearly DMARC Graph" msgstr "Graphique annuel du DMARC" @@ -1985,7 +2062,7 @@ msgstr "Vous n'avez pas d'autorisations administratives dans une organisation" msgid "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA." msgstr "Vous n'avez pas activé l'authentification à deux facteurs. Pour maximiser la sécurité de votre compte, <0>veuillez activer l'authentification à deux facteurs." -#: src/App.js:100 +#: src/App.js:101 #: src/FloatingMenu.js:149 msgid "You have successfully been signed out." msgstr "Vous avez été déconnecté avec succès." @@ -2022,6 +2099,10 @@ msgstr "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe" msgid "Your 2FA app will then have a valid code that you can use when you sign in." msgstr "Votre application 2FA disposera alors d'un code valide que vous pourrez utiliser lorsque vous vous connecterez." +#: src/App.js:181 +msgid "Your Account" +msgstr "Votre compte" + #: src/guidanceTagConstants.js:6 msgid "https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322" msgstr "https://cyber.gc.ca/fr/orientation/directives-de-mise-en-oeuvre-protection-du-domaine-de-courrier#a322" @@ -2106,7 +2187,7 @@ msgstr "de" msgid "pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)" msgstr "" -#: src/AdminDomains.js:102 +#: src/AdminDomains.js:104 msgid "{0} was added to {orgSlug}" msgstr "{0} a été ajouté à {orgSlug}" @@ -2114,10 +2195,10 @@ msgstr "{0} a été ajouté à {orgSlug}" msgid "{count} records..." msgstr "{count} enregistrements..." -#: src/AdminDomains.js:165 +#: src/AdminDomains.js:209 msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}" msgstr "{editingDomainUrl} de {orgSlug} mis à jour avec succès à {0}" -#: src/OrganizationDetails.js:76 +#: src/OrganizationDetails.js:79 msgid "{orgName}" msgstr "" From e1a88387483fbd9e52a66feceb78ef2ca525abfe Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Fri, 26 Mar 2021 17:32:22 -0300 Subject: [PATCH 06/15] Update locales after merge --- frontend/src/locales/en.js | 660 +------------------------------------ frontend/src/locales/en.po | 56 ++-- frontend/src/locales/fr.js | 7 + frontend/src/locales/fr.po | 55 ++-- 4 files changed, 68 insertions(+), 710 deletions(-) diff --git a/frontend/src/locales/en.js b/frontend/src/locales/en.js index 74ec300535..f55a1c4ac5 100644 --- a/frontend/src/locales/en.js +++ b/frontend/src/locales/en.js @@ -1,659 +1 @@ -/*eslint-disable*/ module.exports = { - messages: { - '3.2.2 Third Parties and DKIM': '3.2.2 Third Parties and DKIM', - '404 - Page Not Found': '404 - Page Not Found', - 'A-all': 'A-all', - 'A.2.3 Deploy Initial DMARC record': 'A.2.3 Deploy Initial DMARC record', - 'A.3.3 Deploy SPF for All Domains': 'A.3.3 Deploy SPF for All Domains', - 'A.3.4 Deploy DKIM for All Domains and Senders': - 'A.3.4 Deploy DKIM for All Domains and Senders', - 'A.3.5 Monitor DMARC Reports and Correct Misconfigurations': - 'A.3.5 Monitor DMARC Reports and Correct Misconfigurations', - 'A.4 Enforce': 'A.4 Enforce', - 'A.5 Maintain': 'A.5 Maintain', - 'A.5.3 Rotate DKIM Keys': 'A.5.3 Rotate DKIM Keys', - ADMIN: 'ADMIN', - 'ALL-allow': 'ALL-allow', - 'ALL-hardfail': 'ALL-hardfail', - 'ALL-missing': 'ALL-missing', - 'ALL-neutral': 'ALL-neutral', - 'ALL-redirect': 'ALL-redirect', - 'ALL-softfail': 'ALL-softfail', - 'Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01': - 'Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01', - 'Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01': - 'Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01', - 'Account Settings': 'Account Settings', - 'Account created.': 'Account created.', - Acronym: 'Acronym', - 'Add Domain': 'Add Domain', - Admin: 'Admin', - 'Admin Portal': 'Admin Portal', - 'Admin Profile': 'Admin Profile', - 'An email was sent with a link to reset your password': - 'An email was sent with a link to reset your password', - 'An error has occurred.': 'An error has occurred.', - 'An error occurred while updating your TFA send method.': - 'An error occurred while updating your TFA send method.', - 'An error occurred while updating your display name.': - 'An error occurred while updating your display name.', - 'An error occurred while updating your email address.': - 'An error occurred while updating your email address.', - 'An error occurred while updating your language.': - 'An error occurred while updating your language.', - 'An error occurred while updating your password.': - 'An error occurred while updating your password.', - 'An error occurred while updating your phone number.': - 'An error occurred while updating your phone number.', - 'An error occurred while verifying your phone number.': - 'An error occurred while verifying your phone number.', - 'An error occurred.': 'An error occurred.', - Apply: 'Apply', - April: 'April', - 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.': - 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.', - August: 'August', - Authenticate: 'Authenticate', - 'Authentication QR Code': 'Authentication QR Code', - 'B.1.1 SPF Records': 'B.1.1 SPF Records', - 'B.1.3 DNS Lookup Limit': 'B.1.3 DNS Lookup Limit', - 'B.2.1 DKIM Records': 'B.2.1 DKIM Records', - 'B.2.2 Cryptographic Considerations': 'B.2.2 Cryptographic Considerations', - 'B.3.1 DMARC Records': 'B.3.1 DMARC Records', - Back: 'Back', - 'Based in:': 'Based in:', - 'CCCS added to Aggregate sender list': - 'CCCS added to Aggregate sender list', - 'CCCS added to Forensic sender list': 'CCCS added to Forensic sender list', - 'CNAME-DMARC': 'CNAME-DMARC', - 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.': - 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.', - 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.': - 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.', - 'Certificate chain signed using SHA-256/SHA-384/AEAD': - 'Certificate chain signed using SHA-256/SHA-384/AEAD', - 'Change Password': 'Change Password', - 'Changed TFA Send Method': 'Changed TFA Send Method', - 'Changed User Display Name': 'Changed User Display Name', - 'Changed User Email': 'Changed User Email', - 'Changed User Language': 'Changed User Language', - 'Changed User Password': 'Changed User Password', - 'Changed User Phone Number': 'Changed User Phone Number', - 'Changes Required for ITPIN Compliance': - 'Changes Required for ITPIN Compliance', - Close: 'Close', - 'Code field must not be empty': 'Code field must not be empty', - 'Compliant TLS': 'Compliant TLS', - Confirm: 'Confirm', - 'Confirm New Password:': 'Confirm New Password:', - 'Confirm Password:': 'Confirm Password:', - 'Confirm password': 'Confirm password', - 'Confirm removal of domain:': 'Confirm removal of domain:', - 'Contact 3rd party': 'Contact 3rd party', - 'Create Account': 'Create Account', - 'Create an Account': 'Create an Account', - 'Create an account by entering an email and password.': - 'Create an account by entering an email and password.', - 'Current Display Name:': 'Current Display Name:', - 'Current Domain URL:': 'Current Domain URL:', - 'Current Email:': 'Current Email:', - 'Current Password:': 'Current Password:', - 'Current Phone Number:': 'Current Phone Number:', - 'DKIM Aligned': 'DKIM Aligned', - 'DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.': - 'DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.', - 'DKIM Domains': 'DKIM Domains', - 'DKIM Failure Table': 'DKIM Failure Table', - 'DKIM Failures by IP Address': 'DKIM Failures by IP Address', - 'DKIM Flag t': 'DKIM Flag t', - 'DKIM Results': 'DKIM Results', - 'DKIM Selectors': 'DKIM Selectors', - 'DKIM TXT record invalid': 'DKIM TXT record invalid', - 'DKIM key does not use RSA': 'DKIM key does not use RSA', - 'DKIM record missing but MX uses O365. Follow cloud-specific guidance': - 'DKIM record missing but MX uses O365. Follow cloud-specific guidance', - 'DKIM-GC': 'DKIM-GC', - 'DKIM-invalid-crypto': 'DKIM-invalid-crypto', - 'DKIM-missing': 'DKIM-missing', - 'DKIM-missing-O365-misconfigured': 'DKIM-missing-O365-misconfigured', - 'DKIM-missing-mx-O365': 'DKIM-missing-mx-O365', - 'DKIM-value-invalid': 'DKIM-value-invalid', - 'DMARC Failure Table': 'DMARC Failure Table', - 'DMARC Failures by IP Address': 'DMARC Failures by IP Address', - 'DMARC Implementation Phase: {0}': ['DMARC Implementation Phase: ', ['0']], - 'DMARC Implementation Phase: {status}': [ - 'DMARC Implementation Phase: ', - ['status'], - ], - 'DMARC Messages': 'DMARC Messages', - 'DMARC Not Implemented': 'DMARC Not Implemented', - 'DMARC Report': 'DMARC Report', - 'DMARC fail': 'DMARC fail', - 'DMARC pass': 'DMARC pass', - 'DMARC-GC': 'DMARC-GC', - 'DMARC-missing': 'DMARC-missing', - 'DNS Host': 'DNS Host', - December: 'December', - 'Display Name': 'Display Name', - 'Display Name:': 'Display Name:', - 'Display name cannot be empty': 'Display name cannot be empty', - Disposition: 'Disposition', - Domain: 'Domain', - 'Domain DMARC Report': 'Domain DMARC Report', - 'Domain Details': 'Domain Details', - 'Domain List': 'Domain List', - 'Domain URL': 'Domain URL', - 'Domain URL:': 'Domain URL:', - 'Domain added': 'Domain added', - 'Domain defaults to HTTPS, but eventually redirects to HTTP': - 'Domain defaults to HTTPS, but eventually redirects to HTTP', - 'Domain does not default to HTTPS': 'Domain does not default to HTTPS', - 'Domain does not enforce HTTPS': 'Domain does not enforce HTTPS', - 'Domain not pre-loaded by HSTS': 'Domain not pre-loaded by HSTS', - 'Domain not pre-loaded by HSTS, but is pre-load ready': - 'Domain not pre-loaded by HSTS, but is pre-load ready', - 'Domain removed': 'Domain removed', - 'Domain removed from {orgSlug}': ['Domain removed from ', ['orgSlug']], - 'Domain updated': 'Domain updated', - 'Domain url field must not be empty': 'Domain url field must not be empty', - 'Domain uses potentially-outsourced DMARC service': - 'Domain uses potentially-outsourced DMARC service', - 'Domain:': 'Domain:', - Domains: 'Domains', - 'Domains Table': 'Domains Table', - Edit: 'Edit', - 'Edit Display Name': 'Edit Display Name', - 'Edit Domain Details': 'Edit Domain Details', - 'Edit Email': 'Edit Email', - Email: 'Email', - 'Email Configuration': 'Email Configuration', - 'Email Scan Results': 'Email Scan Results', - 'Email Sent': 'Email Sent', - 'Email Validated': 'Email Validated', - 'Email cannot be empty': 'Email cannot be empty', - 'Email invitation sent to {addedUserName}': [ - 'Email invitation sent to ', - ['addedUserName'], - ], - 'Email security settings summary': 'Email security settings summary', - 'Email:': 'Email:', - 'Enter and confirm your new password below:': - 'Enter and confirm your new password below:', - 'Enter and confirm your new password.': - 'Enter and confirm your new password.', - 'Enter two factor code': 'Enter two factor code', - "Enter your user account's verified email address and we will send you a password reset link.": - "Enter your user account's verified email address and we will send you a password reset link.", - 'Envelope From': 'Envelope From', - Fail: 'Fail', - 'Fail DKIM %': 'Fail DKIM %', - 'Fail SPF %': 'Fail SPF %', - February: 'February', - 'Follow implementation guide': 'Follow implementation guide', - 'For in-depth CCCS implementation guidance:': - 'For in-depth CCCS implementation guidance:', - 'For technical implementation guidance:': - 'For technical implementation guidance:', - 'Forgot Password': 'Forgot Password', - 'Forgot your password?': 'Forgot your password?', - 'Full Fail %': 'Full Fail %', - 'Full Pass %': 'Full Pass %', - 'Fully Aligned Table': 'Fully Aligned Table', - 'Fully Aligned by IP Address': 'Fully Aligned by IP Address', - 'Go to page:': 'Go to page:', - 'Government of Canada domains subject to TBS guidelines': - 'Government of Canada domains subject to TBS guidelines', - Guidance: 'Guidance', - 'Guidance Tags': 'Guidance Tags', - 'Guidance:': 'Guidance:', - 'HSTS Age:': 'HSTS Age:', - 'HSTS Status:': 'HSTS Status:', - 'HSTS-missing': 'HSTS-missing', - 'HSTS-not-preloaded': 'HSTS-not-preloaded', - 'HSTS-preload-ready': 'HSTS-preload-ready', - 'HSTS-short-age': 'HSTS-short-age', - 'HTTP Strict Transport Security (HSTS) not implemented': - 'HTTP Strict Transport Security (HSTS) not implemented', - 'HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year': - 'HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year', - 'HTTPS certificate chain is invalid': 'HTTPS certificate chain is invalid', - 'HTTPS certificate is expired': 'HTTPS certificate is expired', - 'HTTPS certificate is self-signed': 'HTTPS certificate is self-signed', - 'HTTPS endpoint failed hostname validation': - 'HTTPS endpoint failed hostname validation', - 'HTTPS-GC': 'HTTPS-GC', - 'HTTPS-bad-chain': 'HTTPS-bad-chain', - 'HTTPS-bad-hostname': 'HTTPS-bad-hostname', - 'HTTPS-certificate-expired': 'HTTPS-certificate-expired', - 'HTTPS-certificate-self-signed': 'HTTPS-certificate-self-signed', - 'HTTPS-downgraded': 'HTTPS-downgraded', - 'HTTPS-missing': 'HTTPS-missing', - 'HTTPS-moderately-enforced': 'HTTPS-moderately-enforced', - 'HTTPS-not-enforced': 'HTTPS-not-enforced', - 'HTTPS-weakly-enforced': 'HTTPS-weakly-enforced', - 'Header From': 'Header From', - Home: 'Home', - 'INCLUDE-limit': 'INCLUDE-limit', - 'IT PIN': 'IT PIN', - 'IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.': - 'IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.', - 'ITPIN Compliant': 'ITPIN Compliant', - 'Implementation Status:': 'Implementation Status:', - 'Incorrect authenticate.result typename.': - 'Incorrect authenticate.result typename.', - 'Incorrect createDomain.result typename.': - 'Incorrect createDomain.result typename.', - 'Incorrect inviteUserToOrg.result typename.': - 'Incorrect inviteUserToOrg.result typename.', - 'Incorrect removeDomain.result typename.': - 'Incorrect removeDomain.result typename.', - 'Incorrect resetPassword.result typename.': - 'Incorrect resetPassword.result typename.', - 'Incorrect send method received.': 'Incorrect send method received.', - 'Incorrect setPhoneNumber.result typename.': - 'Incorrect setPhoneNumber.result typename.', - 'Incorrect signIn.result typename.': 'Incorrect signIn.result typename.', - 'Incorrect signUp.result typename.': 'Incorrect signUp.result typename.', - 'Incorrect updateDomain.result typename.': - 'Incorrect updateDomain.result typename.', - 'Incorrect updateUserPassword.result typename.': - 'Incorrect updateUserPassword.result typename.', - 'Incorrect updateUserProfile.result typename.': - 'Incorrect updateUserProfile.result typename.', - 'Incorrect updateUserRole.result typename.': - 'Incorrect updateUserRole.result typename.', - 'Incorrect verifyPhoneNumber.result typename.': - 'Incorrect verifyPhoneNumber.result typename.', - 'Internet facing services': 'Internet facing services', - 'Internet facing services: {domainCount}': [ - 'Internet facing services: ', - ['domainCount'], - ], - 'Invalid email': 'Invalid email', - 'Invalid percent': 'Invalid percent', - 'Invalid public key': 'Invalid public key', - 'Invite User': 'Invite User', - 'Invite a user': 'Invite a user', - January: 'January', - July: 'July', - June: 'June', - 'L-30-D': 'L-30-D', - 'Language:': 'Language:', - 'Last 30 Days': 'Last 30 Days', - 'Last scanned:': 'Last scanned:', - 'Level of Enforcment:': 'Level of Enforcment:', - 'Loading {children}...': ['Loading ', ['children'], '...'], - 'Loading...': 'Loading...', - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.': - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.', - 'Maintain deployment': 'Maintain deployment', - March: 'March', - May: 'May', - Menu: 'Menu', - 'Missing from guide- need v1.1': 'Missing from guide- need v1.1', - 'More than 10 lookups - Follow implementation guide': - 'More than 10 lookups - Follow implementation guide', - Name: 'Name', - 'New Display Name:': 'New Display Name:', - 'New Domain Url': 'New Domain Url', - 'New Domain Url:': 'New Domain Url:', - 'New Email Address:': 'New Email Address:', - 'New Password:': 'New Password:', - 'New Phone Number:': 'New Phone Number:', - 'New domain name cannot be empty': 'New domain name cannot be empty', - Next: 'Next', - 'No Domains': 'No Domains', - 'No Organizations': 'No Organizations', - 'No RUAs defined': 'No RUAs defined', - 'No RUFs defined': 'No RUFs defined', - 'No Users': 'No Users', - 'No current phone number': 'No current phone number', - 'No data for the DKIM Failures by IP Address table': - 'No data for the DKIM Failures by IP Address table', - 'No data for the DMARC Failures by IP Address table': - 'No data for the DMARC Failures by IP Address table', - 'No data for the DMARC summary table': - 'No data for the DMARC summary table', - 'No data for the DMARC yearly report graph': - 'No data for the DMARC yearly report graph', - 'No data for the Fully Aligned by IP Address table': - 'No data for the Fully Aligned by IP Address table', - 'No data for the SPF Failures by IP Address table': - 'No data for the SPF Failures by IP Address table', - 'No domains scanned yet.': 'No domains scanned yet.', - 'No scan data for this organization.': - 'No scan data for this organization.', - 'No users in this organization': 'No users in this organization', - 'Non-compliant TLS': 'Non-compliant TLS', - None: 'None', - 'Not scanned yet.': 'Not scanned yet.', - November: 'November', - October: 'October', - 'One or more ciphers in use are not compliant with guidelines': - 'One or more ciphers in use are not compliant with guidelines', - 'Organization Details': 'Organization Details', - 'Organization:': 'Organization:', - Organizations: 'Organizations', - 'Owner has not configured Aggregate reporting.': - 'Owner has not configured Aggregate reporting.', - 'Owner has not configured Forensic reporting. Missing from guide- need v1.1': - 'Owner has not configured Forensic reporting. Missing from guide- need v1.1', - P: 'P', - 'P-1024': 'P-1024', - 'P-2048': 'P-2048', - 'P-4096': 'P-4096', - 'P-invalid': 'P-invalid', - 'P-missing': 'P-missing', - 'P-none': 'P-none', - 'P-quarantine': 'P-quarantine', - 'P-reject': 'P-reject', - 'P-sub1024': 'P-sub1024', - 'P-update-recommended': 'P-update-recommended', - PCT: 'PCT', - 'PCT should be 100, or not included, if p=none': - 'PCT should be 100, or not included, if p=none', - 'PCT-0': 'PCT-0', - 'PCT-100': 'PCT-100', - 'PCT-invalid': 'PCT-invalid', - 'PCT-none-exists': 'PCT-none-exists', - 'PCT-xx': 'PCT-xx', - Page: 'Page', - 'Page Size:': 'Page Size:', - 'Page {0} of {1}': ['Page ', ['0'], ' of ', ['1']], - Pass: 'Pass', - 'Pass Only DKIM': 'Pass Only DKIM', - 'Pass Only SPF': 'Pass Only SPF', - 'Pass/Fail Ratios by Domain': 'Pass/Fail Ratios by Domain', - Password: 'Password', - 'Password Updated': 'Password Updated', - 'Password cannot be empty': 'Password cannot be empty', - 'Password confirmation cannot be empty': - 'Password confirmation cannot be empty', - 'Password must be at least 12 characters long': - 'Password must be at least 12 characters long', - 'Password:': 'Password:', - 'Passwords must match': 'Passwords must match', - Phone: 'Phone', - 'Phone Number': 'Phone Number', - 'Phone Number:': 'Phone Number:', - 'Phone Validated': 'Phone Validated', - 'Phone number field must not be empty': - 'Phone number field must not be empty', - 'Phone number must be a valid phone number of the form +17895551234 (10-15 digits)': - 'Phone number must be a valid phone number of the form +17895551234 (10-15 digits)', - 'Please choose your preferred language': - 'Please choose your preferred language', - 'Please enter your current password.': - 'Please enter your current password.', - 'Please enter your two factor code below.': - 'Please enter your two factor code below.', - 'Policy applies to all of mailflow': 'Policy applies to all of mailflow', - 'Policy applies to no part of mailflow - irregular config': - 'Policy applies to no part of mailflow - irregular config', - 'Policy applies to percentage of mailflow': - 'Policy applies to percentage of mailflow', - 'Pre-Alpha': 'Pre-Alpha', - 'Preloaded Status:': 'Preloaded Status:', - Previous: 'Previous', - Privacy: 'Privacy', - 'Properly configured!': 'Properly configured!', - 'Public key RSA and key length 1024': 'Public key RSA and key length 1024', - 'Public key RSA and key length 2048': 'Public key RSA and key length 2048', - 'Public key RSA and key length 4096 or higher': - 'Public key RSA and key length 4096 or higher', - 'Public key RSA and key length <1024': - 'Public key RSA and key length <1024', - 'Public key in use for longer than 1 year': - 'Public key in use for longer than 1 year', - 'QR Code': 'QR Code', - 'RFC 4.6.4. DNS Lookup Limits': 'RFC 4.6.4. DNS Lookup Limits', - 'RFC 6.1. redirect: Redirected Query': - 'RFC 6.1. redirect: Redirected Query', - 'RFC 6.3. General Record Format': 'RFC 6.3. General Record Format', - 'RFC 7.1. Verifying External Destinations': - 'RFC 7.1. Verifying External Destinations', - RUA: 'RUA', - 'RUA-CCCS': 'RUA-CCCS', - 'RUA-none': 'RUA-none', - RUF: 'RUF', - 'RUF-CCCS': 'RUF-CCCS', - 'RUF-none': 'RUF-none', - 'Remove Domain': 'Remove Domain', - 'Report an Issue': 'Report an Issue', - 'Request a domain to be scanned:': 'Request a domain to be scanned:', - 'Reset Password': 'Reset Password', - 'Result:': 'Result:', - 'Results for scans of email technologies (DMARC, SPF, DKIM).': - 'Results for scans of email technologies (DMARC, SPF, DKIM).', - 'Results for scans of web technologies (SSL, HTTPS).': - 'Results for scans of web technologies (SSL, HTTPS).', - 'Role updated': 'Role updated', - 'Role:': 'Role:', - SP: 'SP', - 'SP-missing': 'SP-missing', - 'SP-none': 'SP-none', - 'SP-quarantine': 'SP-quarantine', - 'SP-reject': 'SP-reject', - 'SPF Aligned': 'SPF Aligned', - 'SPF Domains': 'SPF Domains', - 'SPF Failure Table': 'SPF Failure Table', - 'SPF Failures by IP Address': 'SPF Failures by IP Address', - 'SPF Results': 'SPF Results', - 'SPF implemented in incorrect subdomain': - 'SPF implemented in incorrect subdomain', - 'SPF-GC': 'SPF-GC', - 'SPF-bad-path': 'SPF-bad-path', - 'SPF-missing': 'SPF-missing', - 'SSL-3des': 'SSL-3des', - 'SSL-GC': 'SSL-GC', - 'SSL-acceptable-certificate': 'SSL-acceptable-certificate', - 'SSL-invalid-cipher': 'SSL-invalid-cipher', - 'SSL-missing': 'SSL-missing', - 'SSL-rc4': 'SSL-rc4', - SUPER_ADMIN: 'SUPER_ADMIN', - 'Save Language': 'Save Language', - 'Save TFA Method': 'Save TFA Method', - Scan: 'Scan', - 'Scan Domain': 'Scan Domain', - 'Scan Request': 'Scan Request', - 'Scan of domain successfully requested': - 'Scan of domain successfully requested', - 'Scan this QR code with a 2FA app like Authy or Google Authenticator': - 'Scan this QR code with a 2FA app like Authy or Google Authenticator', - Search: 'Search', - 'Search for a domain': 'Search for a domain', - 'Search for a user': 'Search for a user', - 'Search for an organization': 'Search for an organization', - 'Search for any Government of Canada tracked domain:': - 'Search for any Government of Canada tracked domain:', - 'Search:': 'Search:', - 'Select Preferred Language': 'Select Preferred Language', - 'Select an organization': 'Select an organization', - 'Select an organization to view admin options': - 'Select an organization to view admin options', - September: 'September', - Services: 'Services', - 'Services: {domainCount}': ['Services: ', ['domainCount']], - 'Show {pageSize}': ['Show ', ['pageSize']], - 'Showing data for period:': 'Showing data for period:', - 'Sign In': 'Sign In', - 'Sign In.': 'Sign In.', - 'Sign Out': 'Sign Out', - 'Sign Out.': 'Sign Out.', - 'Sign in with your username and password.': - 'Sign in with your username and password.', - 'Skip to main content': 'Skip to main content', - 'Sort by:': 'Sort by:', - 'Source IP Address': 'Source IP Address', - Submit: 'Submit', - Summary: 'Summary', - 'T-enabled': 'T-enabled', - TBD: 'TBD', - 'TFA Method:': 'TFA Method:', - 'TXT-DMARC-enabled': 'TXT-DMARC-enabled', - 'TXT-DMARC-missing': 'TXT-DMARC-missing', - 'Terms & conditions': 'Terms & conditions', - 'Textual Representation': 'Textual Representation', - 'The page you are looking for has moved or does not exist.': - 'The page you are looking for has moved or does not exist.', - "The user's role has been successfully updated": - "The user's role has been successfully updated", - 'This component is currently unavailable. Try reloading the page.': - 'This component is currently unavailable. Try reloading the page.', - 'This service is being developed in the open': - 'This service is being developed in the open', - 'Total Messages': 'Total Messages', - 'Total users': 'Total users', - 'Track Digital Security': 'Track Digital Security', - Tracker: 'Tracker', - 'Tracker Logo': 'Tracker Logo', - 'Two Factor Authentication': 'Two Factor Authentication', - USER: 'USER', - 'Unable to change user role, please try again.': - 'Unable to change user role, please try again.', - 'Unable to create account, please try again.': - 'Unable to create account, please try again.', - 'Unable to create new domain.': 'Unable to create new domain.', - 'Unable to create your account, please try again.': - 'Unable to create your account, please try again.', - 'Unable to invite user.': 'Unable to invite user.', - 'Unable to remove domain.': 'Unable to remove domain.', - 'Unable to request scan, please try again.': - 'Unable to request scan, please try again.', - 'Unable to reset your password, please try again.': - 'Unable to reset your password, please try again.', - 'Unable to send password reset link to email.': - 'Unable to send password reset link to email.', - 'Unable to sign in to your account, please try again.': - 'Unable to sign in to your account, please try again.', - 'Unable to update domain.': 'Unable to update domain.', - 'Unable to update password': 'Unable to update password', - 'Unable to update to your TFA send method, please try again.': - 'Unable to update to your TFA send method, please try again.', - 'Unable to update to your display name, please try again.': - 'Unable to update to your display name, please try again.', - 'Unable to update to your phone number, please try again.': - 'Unable to update to your phone number, please try again.', - 'Unable to update to your preferred language, please try again.': - 'Unable to update to your preferred language, please try again.', - 'Unable to update to your username, please try again.': - 'Unable to update to your username, please try again.', - 'Unable to update user role.': 'Unable to update user role.', - 'Unable to update your password, please try again.': - 'Unable to update your password, please try again.', - 'Unable to update your phone number, please try again.': - 'Unable to update your phone number, please try again.', - 'Unable to verify your phone number, please try again.': - 'Unable to verify your phone number, please try again.', - 'Use DKIM to validate outbound email sent from your custom domain': - 'Use DKIM to validate outbound email sent from your custom domain', - 'User Affiliations': 'User Affiliations', - 'User List': 'User List', - 'User Profile': 'User Profile', - 'User invited': 'User invited', - Users: 'Users', - 'Uses redirect tag with All': 'Uses redirect tag with All', - 'Verification TXT records for all 3rd party senders exist': - 'Verification TXT records for all 3rd party senders exist', - 'Verification TXT records for some/all 3rd party senders missing': - 'Verification TXT records for some/all 3rd party senders missing', - 'Verification code must only contains numbers': - 'Verification code must only contains numbers', - Verified: 'Verified', - Verify: 'Verify', - 'Vulnerability-ccs-injection': 'Vulnerability-ccs-injection', - 'Vulnerability-heartbleed': 'Vulnerability-heartbleed', - 'Vulnerable to Heartbleed bug': 'Vulnerable to Heartbleed bug', - 'Vulnerable to OpenSSL CCS Injection': - 'Vulnerable to OpenSSL CCS Injection', - "We've sent an SMS to your new phone number with an authentication code to confirm this change.": - "We've sent an SMS to your new phone number with an authentication code to confirm this change.", - "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.": - "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.", - "We've sent you an email with an authentication code to sign into Tracker.": - "We've sent you an email with an authentication code to sign into Tracker.", - 'Web Configuration': 'Web Configuration', - 'Web Scan Results': 'Web Scan Results', - 'Web encryption settings summary': 'Web encryption settings summary', - 'Welcome, Admin': 'Welcome, Admin', - 'Welcome, you are successfully signed in to your new account!': - 'Welcome, you are successfully signed in to your new account!', - 'Welcome, you are successfully signed in!': - 'Welcome, you are successfully signed in!', - 'Yearly DMARC Graph': 'Yearly DMARC Graph', - 'You do not have admin permissions in any organization': - 'You do not have admin permissions in any organization', - "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.": - "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.", - 'You have successfully been signed out.': - 'You have successfully been signed out.', - 'You have successfully updated your TFA send method.': - 'You have successfully updated your TFA send method.', - 'You have successfully updated your display name.': - 'You have successfully updated your display name.', - 'You have successfully updated your email.': - 'You have successfully updated your email.', - 'You have successfully updated your password.': - 'You have successfully updated your password.', - 'You have successfully updated your phone number.': - 'You have successfully updated your phone number.', - 'You have successfully updated your preferred language.': - 'You have successfully updated your preferred language.', - 'You may now sign in with your new password': - 'You may now sign in with your new password', - 'Your 2FA app will then have a valid code that you can use when you sign in.': - 'Your 2FA app will then have a valid code that you can use when you sign in.', - 'Your Account': 'Your Account', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22', - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31': - 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31', - 'https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide': - 'https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide', - 'https://tools.ietf.org/html/rfc6376#section-3.6.1': - 'https://tools.ietf.org/html/rfc6376#section-3.6.1', - 'https://tools.ietf.org/html/rfc7208#section-4.6.4': - 'https://tools.ietf.org/html/rfc7208#section-4.6.4', - 'https://tools.ietf.org/html/rfc7208#section-6.1': - 'https://tools.ietf.org/html/rfc7208#section-6.1', - 'https://tools.ietf.org/html/rfc7489#section-6.3': - 'https://tools.ietf.org/html/rfc7489#section-6.3', - 'https://tools.ietf.org/html/rfc7489#section-7.1': - 'https://tools.ietf.org/html/rfc7489#section-7.1', - of: 'of', - 'pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)': - 'pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)', - '{0} was added to {orgSlug}': [['0'], ' was added to ', ['orgSlug']], - '{count} records...': [['count'], ' records...'], - '{editingDomainUrl} from {orgSlug} successfully updated to {0}': [ - ['editingDomainUrl'], - ' from ', - ['orgSlug'], - ' successfully updated to ', - ['0'], - ], - '{orgName}': [['orgName']], - }, -} +/*eslint-disable*/module.exports={messages:{"3.2.2 Third Parties and DKIM":"3.2.2 Third Parties and DKIM","404 - Page Not Found":"404 - Page Not Found","A-all":"A-all","A.2.3 Deploy Initial DMARC record":"A.2.3 Deploy Initial DMARC record","A.3.3 Deploy SPF for All Domains":"A.3.3 Deploy SPF for All Domains","A.3.4 Deploy DKIM for All Domains and Senders":"A.3.4 Deploy DKIM for All Domains and Senders","A.3.5 Monitor DMARC Reports and Correct Misconfigurations":"A.3.5 Monitor DMARC Reports and Correct Misconfigurations","A.4 Enforce":"A.4 Enforce","A.5 Maintain":"A.5 Maintain","A.5.3 Rotate DKIM Keys":"A.5.3 Rotate DKIM Keys","ADMIN":"ADMIN","ALL-allow":"ALL-allow","ALL-hardfail":"ALL-hardfail","ALL-missing":"ALL-missing","ALL-neutral":"ALL-neutral","ALL-redirect":"ALL-redirect","ALL-softfail":"ALL-softfail","Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01":"Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01","Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01":"Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01","Account Settings":"Account Settings","Account created.":"Account created.","Acronym":"Acronym","Add Domain":"Add Domain","Add a domain":"Add a domain","Admin":"Admin","Admin Portal":"Admin Portal","Admin Profile":"Admin Profile","An email was sent with a link to reset your password":"An email was sent with a link to reset your password","An error has occurred.":"An error has occurred.","An error occurred while updating your TFA send method.":"An error occurred while updating your TFA send method.","An error occurred while updating your display name.":"An error occurred while updating your display name.","An error occurred while updating your email address.":"An error occurred while updating your email address.","An error occurred while updating your language.":"An error occurred while updating your language.","An error occurred while updating your password.":"An error occurred while updating your password.","An error occurred while updating your phone number.":"An error occurred while updating your phone number.","An error occurred while verifying your phone number.":"An error occurred while verifying your phone number.","An error occurred.":"An error occurred.","Apply":"Apply","April":"April","As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.":"As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.","August":"August","Authenticate":"Authenticate","Authentication QR Code":"Authentication QR Code","B.1.1 SPF Records":"B.1.1 SPF Records","B.1.3 DNS Lookup Limit":"B.1.3 DNS Lookup Limit","B.2.1 DKIM Records":"B.2.1 DKIM Records","B.2.2 Cryptographic Considerations":"B.2.2 Cryptographic Considerations","B.3.1 DMARC Records":"B.3.1 DMARC Records","Back":"Back","Based in:":"Based in:","CCCS added to Aggregate sender list":"CCCS added to Aggregate sender list","CCCS added to Forensic sender list":"CCCS added to Forensic sender list","CNAME-DMARC":"CNAME-DMARC","Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.":"Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.","Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.":"Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.","Certificate chain signed using SHA-256/SHA-384/AEAD":"Certificate chain signed using SHA-256/SHA-384/AEAD","Change Password":"Change Password","Changed TFA Send Method":"Changed TFA Send Method","Changed User Display Name":"Changed User Display Name","Changed User Email":"Changed User Email","Changed User Language":"Changed User Language","Changed User Password":"Changed User Password","Changed User Phone Number":"Changed User Phone Number","Changes Required for ITPIN Compliance":"Changes Required for ITPIN Compliance","Close":"Close","Code field must not be empty":"Code field must not be empty","Compliant TLS":"Compliant TLS","Confirm":"Confirm","Confirm New Password:":"Confirm New Password:","Confirm Password:":"Confirm Password:","Confirm password":"Confirm password","Confirm removal of domain:":"Confirm removal of domain:","Contact 3rd party":"Contact 3rd party","Create Account":"Create Account","Create an Account":"Create an Account","Create an account by entering an email and password.":"Create an account by entering an email and password.","Current Display Name:":"Current Display Name:","Current Domain URL:":"Current Domain URL:","Current Email:":"Current Email:","Current Password:":"Current Password:","Current Phone Number:":"Current Phone Number:","DKIM Aligned":"DKIM Aligned","DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.":"DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.","DKIM Domains":"DKIM Domains","DKIM Failure Table":"DKIM Failure Table","DKIM Failures by IP Address":"DKIM Failures by IP Address","DKIM Flag t":"DKIM Flag t","DKIM Results":"DKIM Results","DKIM Selectors":"DKIM Selectors","DKIM Status":"DKIM Status","DKIM TXT record invalid":"DKIM TXT record invalid","DKIM key does not use RSA":"DKIM key does not use RSA","DKIM record missing but MX uses O365. Follow cloud-specific guidance":"DKIM record missing but MX uses O365. Follow cloud-specific guidance","DKIM-GC":"DKIM-GC","DKIM-invalid-crypto":"DKIM-invalid-crypto","DKIM-missing":"DKIM-missing","DKIM-missing-O365-misconfigured":"DKIM-missing-O365-misconfigured","DKIM-missing-mx-O365":"DKIM-missing-mx-O365","DKIM-value-invalid":"DKIM-value-invalid","DMARC Failure Table":"DMARC Failure Table","DMARC Failures by IP Address":"DMARC Failures by IP Address","DMARC Implementation Phase: {0}":["DMARC Implementation Phase: ",["0"]],"DMARC Implementation Phase: {status}":["DMARC Implementation Phase: ",["status"]],"DMARC Messages":"DMARC Messages","DMARC Not Implemented":"DMARC Not Implemented","DMARC Report":"DMARC Report","DMARC Status":"DMARC Status","DMARC fail":"DMARC fail","DMARC pass":"DMARC pass","DMARC-GC":"DMARC-GC","DMARC-missing":"DMARC-missing","DNS Host":"DNS Host","December":"December","Display Name":"Display Name","Display Name:":"Display Name:","Display name cannot be empty":"Display name cannot be empty","Disposition":"Disposition","Domain":"Domain","Domain DMARC Report":"Domain DMARC Report","Domain Details":"Domain Details","Domain List":"Domain List","Domain URL":"Domain URL","Domain URL:":"Domain URL:","Domain added":"Domain added","Domain defaults to HTTPS, but eventually redirects to HTTP":"Domain defaults to HTTPS, but eventually redirects to HTTP","Domain does not default to HTTPS":"Domain does not default to HTTPS","Domain does not enforce HTTPS":"Domain does not enforce HTTPS","Domain not pre-loaded by HSTS":"Domain not pre-loaded by HSTS","Domain not pre-loaded by HSTS, but is pre-load ready":"Domain not pre-loaded by HSTS, but is pre-load ready","Domain removed":"Domain removed","Domain removed from {orgSlug}":["Domain removed from ",["orgSlug"]],"Domain updated":"Domain updated","Domain url field must not be empty":"Domain url field must not be empty","Domain uses potentially-outsourced DMARC service":"Domain uses potentially-outsourced DMARC service","Domain:":"Domain:","Domains":"Domains","Domains Table":"Domains Table","Edit":"Edit","Edit Display Name":"Edit Display Name","Edit Domain Details":"Edit Domain Details","Edit Email":"Edit Email","Email":"Email","Email Configuration":"Email Configuration","Email Scan Results":"Email Scan Results","Email Sent":"Email Sent","Email Validated":"Email Validated","Email cannot be empty":"Email cannot be empty","Email invitation sent to {addedUserName}":["Email invitation sent to ",["addedUserName"]],"Email security settings summary":"Email security settings summary","Email:":"Email:","Enter and confirm your new password below:":"Enter and confirm your new password below:","Enter and confirm your new password.":"Enter and confirm your new password.","Enter two factor code":"Enter two factor code","Enter your user account's verified email address and we will send you a password reset link.":"Enter your user account's verified email address and we will send you a password reset link.","Envelope From":"Envelope From","Fail":"Fail","Fail DKIM %":"Fail DKIM %","Fail SPF %":"Fail SPF %","February":"February","Follow implementation guide":"Follow implementation guide","For in-depth CCCS implementation guidance:":"For in-depth CCCS implementation guidance:","For technical implementation guidance:":"For technical implementation guidance:","Forgot Password":"Forgot Password","Forgot your password?":"Forgot your password?","Full Fail %":"Full Fail %","Full Pass %":"Full Pass %","Fully Aligned Table":"Fully Aligned Table","Fully Aligned by IP Address":"Fully Aligned by IP Address","Go to page:":"Go to page:","Government of Canada domains subject to TBS guidelines":"Government of Canada domains subject to TBS guidelines","Guidance":"Guidance","Guidance Tags":"Guidance Tags","Guidance:":"Guidance:","HSTS Age:":"HSTS Age:","HSTS Status:":"HSTS Status:","HSTS-missing":"HSTS-missing","HSTS-not-preloaded":"HSTS-not-preloaded","HSTS-preload-ready":"HSTS-preload-ready","HSTS-short-age":"HSTS-short-age","HTTP Strict Transport Security (HSTS) not implemented":"HTTP Strict Transport Security (HSTS) not implemented","HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year":"HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year","HTTPS Status":"HTTPS Status","HTTPS certificate chain is invalid":"HTTPS certificate chain is invalid","HTTPS certificate is expired":"HTTPS certificate is expired","HTTPS certificate is self-signed":"HTTPS certificate is self-signed","HTTPS endpoint failed hostname validation":"HTTPS endpoint failed hostname validation","HTTPS-GC":"HTTPS-GC","HTTPS-bad-chain":"HTTPS-bad-chain","HTTPS-bad-hostname":"HTTPS-bad-hostname","HTTPS-certificate-expired":"HTTPS-certificate-expired","HTTPS-certificate-self-signed":"HTTPS-certificate-self-signed","HTTPS-downgraded":"HTTPS-downgraded","HTTPS-missing":"HTTPS-missing","HTTPS-moderately-enforced":"HTTPS-moderately-enforced","HTTPS-not-enforced":"HTTPS-not-enforced","HTTPS-weakly-enforced":"HTTPS-weakly-enforced","Header From":"Header From","Home":"Home","INCLUDE-limit":"INCLUDE-limit","IT PIN":"IT PIN","IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.":"IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.","ITPIN Compliant":"ITPIN Compliant","Implementation Status:":"Implementation Status:","Incorrect authenticate.result typename.":"Incorrect authenticate.result typename.","Incorrect createDomain.result typename.":"Incorrect createDomain.result typename.","Incorrect inviteUserToOrg.result typename.":"Incorrect inviteUserToOrg.result typename.","Incorrect removeDomain.result typename.":"Incorrect removeDomain.result typename.","Incorrect resetPassword.result typename.":"Incorrect resetPassword.result typename.","Incorrect send method received.":"Incorrect send method received.","Incorrect setPhoneNumber.result typename.":"Incorrect setPhoneNumber.result typename.","Incorrect signIn.result typename.":"Incorrect signIn.result typename.","Incorrect signUp.result typename.":"Incorrect signUp.result typename.","Incorrect updateDomain.result typename.":"Incorrect updateDomain.result typename.","Incorrect updateUserPassword.result typename.":"Incorrect updateUserPassword.result typename.","Incorrect updateUserProfile.result typename.":"Incorrect updateUserProfile.result typename.","Incorrect updateUserRole.result typename.":"Incorrect updateUserRole.result typename.","Incorrect verifyPhoneNumber.result typename.":"Incorrect verifyPhoneNumber.result typename.","Internet facing services":"Internet facing services","Internet facing services: {domainCount}":["Internet facing services: ",["domainCount"]],"Invalid email":"Invalid email","Invalid percent":"Invalid percent","Invalid public key":"Invalid public key","Invite User":"Invite User","Invite a user":"Invite a user","January":"January","July":"July","June":"June","L-30-D":"L-30-D","Language:":"Language:","Last 30 Days":"Last 30 Days","Last Scanned":"Last Scanned","Last scanned:":"Last scanned:","Level of Enforcment:":"Level of Enforcment:","Loading {children}...":["Loading ",["children"],"..."],"Loading...":"Loading...","Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.","Maintain deployment":"Maintain deployment","March":"March","May":"May","Menu":"Menu","Missing from guide- need v1.1":"Missing from guide- need v1.1","More than 10 lookups - Follow implementation guide":"More than 10 lookups - Follow implementation guide","Name":"Name","New Display Name:":"New Display Name:","New Domain Url":"New Domain Url","New Domain Url:":"New Domain Url:","New Email Address:":"New Email Address:","New Password:":"New Password:","New Phone Number:":"New Phone Number:","New domain name cannot be empty":"New domain name cannot be empty","Next":"Next","No Domains":"No Domains","No Organizations":"No Organizations","No RUAs defined":"No RUAs defined","No RUFs defined":"No RUFs defined","No Users":"No Users","No current phone number":"No current phone number","No data for the DKIM Failures by IP Address table":"No data for the DKIM Failures by IP Address table","No data for the DMARC Failures by IP Address table":"No data for the DMARC Failures by IP Address table","No data for the DMARC summary table":"No data for the DMARC summary table","No data for the DMARC yearly report graph":"No data for the DMARC yearly report graph","No data for the Fully Aligned by IP Address table":"No data for the Fully Aligned by IP Address table","No data for the SPF Failures by IP Address table":"No data for the SPF Failures by IP Address table","No domains scanned yet.":"No domains scanned yet.","No scan data for this organization.":"No scan data for this organization.","No users in this organization":"No users in this organization","Non-compliant TLS":"Non-compliant TLS","None":"None","Not scanned yet.":"Not scanned yet.","November":"November","October":"October","One or more ciphers in use are not compliant with guidelines":"One or more ciphers in use are not compliant with guidelines","Organization Details":"Organization Details","Organization:":"Organization:","Organizations":"Organizations","Owner has not configured Aggregate reporting.":"Owner has not configured Aggregate reporting.","Owner has not configured Forensic reporting. Missing from guide- need v1.1":"Owner has not configured Forensic reporting. Missing from guide- need v1.1","P":"P","P-1024":"P-1024","P-2048":"P-2048","P-4096":"P-4096","P-invalid":"P-invalid","P-missing":"P-missing","P-none":"P-none","P-quarantine":"P-quarantine","P-reject":"P-reject","P-sub1024":"P-sub1024","P-update-recommended":"P-update-recommended","PCT":"PCT","PCT should be 100, or not included, if p=none":"PCT should be 100, or not included, if p=none","PCT-0":"PCT-0","PCT-100":"PCT-100","PCT-invalid":"PCT-invalid","PCT-none-exists":"PCT-none-exists","PCT-xx":"PCT-xx","Page":"Page","Page Size:":"Page Size:","Page {0} of {1}":["Page ",["0"]," of ",["1"]],"Pass":"Pass","Pass Only DKIM":"Pass Only DKIM","Pass Only SPF":"Pass Only SPF","Pass/Fail Ratios by Domain":"Pass/Fail Ratios by Domain","Password":"Password","Password Updated":"Password Updated","Password cannot be empty":"Password cannot be empty","Password confirmation cannot be empty":"Password confirmation cannot be empty","Password must be at least 12 characters long":"Password must be at least 12 characters long","Password:":"Password:","Passwords must match":"Passwords must match","Phone":"Phone","Phone Number":"Phone Number","Phone Number:":"Phone Number:","Phone Validated":"Phone Validated","Phone number field must not be empty":"Phone number field must not be empty","Phone number must be a valid phone number of the form +17895551234 (10-15 digits)":"Phone number must be a valid phone number of the form +17895551234 (10-15 digits)","Please choose your preferred language":"Please choose your preferred language","Please enter your current password.":"Please enter your current password.","Please enter your two factor code below.":"Please enter your two factor code below.","Policy applies to all of mailflow":"Policy applies to all of mailflow","Policy applies to no part of mailflow - irregular config":"Policy applies to no part of mailflow - irregular config","Policy applies to percentage of mailflow":"Policy applies to percentage of mailflow","Pre-Alpha":"Pre-Alpha","Preloaded Status:":"Preloaded Status:","Previous":"Previous","Privacy":"Privacy","Properly configured!":"Properly configured!","Public key RSA and key length 1024":"Public key RSA and key length 1024","Public key RSA and key length 2048":"Public key RSA and key length 2048","Public key RSA and key length 4096 or higher":"Public key RSA and key length 4096 or higher","Public key RSA and key length <1024":"Public key RSA and key length <1024","Public key in use for longer than 1 year":"Public key in use for longer than 1 year","QR Code":"QR Code","RFC 4.6.4. DNS Lookup Limits":"RFC 4.6.4. DNS Lookup Limits","RFC 6.1. redirect: Redirected Query":"RFC 6.1. redirect: Redirected Query","RFC 6.3. General Record Format":"RFC 6.3. General Record Format","RFC 7.1. Verifying External Destinations":"RFC 7.1. Verifying External Destinations","RUA":"RUA","RUA-CCCS":"RUA-CCCS","RUA-none":"RUA-none","RUF":"RUF","RUF-CCCS":"RUF-CCCS","RUF-none":"RUF-none","Remove Domain":"Remove Domain","Report an Issue":"Report an Issue","Request a domain to be scanned:":"Request a domain to be scanned:","Reset Password":"Reset Password","Result:":"Result:","Results for scans of email technologies (DMARC, SPF, DKIM).":"Results for scans of email technologies (DMARC, SPF, DKIM).","Results for scans of web technologies (SSL, HTTPS).":"Results for scans of web technologies (SSL, HTTPS).","Role updated":"Role updated","Role:":"Role:","SP":"SP","SP-missing":"SP-missing","SP-none":"SP-none","SP-quarantine":"SP-quarantine","SP-reject":"SP-reject","SPF Aligned":"SPF Aligned","SPF Domains":"SPF Domains","SPF Failure Table":"SPF Failure Table","SPF Failures by IP Address":"SPF Failures by IP Address","SPF Results":"SPF Results","SPF Status":"SPF Status","SPF implemented in incorrect subdomain":"SPF implemented in incorrect subdomain","SPF-GC":"SPF-GC","SPF-bad-path":"SPF-bad-path","SPF-missing":"SPF-missing","SSL Status":"SSL Status","SSL-3des":"SSL-3des","SSL-GC":"SSL-GC","SSL-acceptable-certificate":"SSL-acceptable-certificate","SSL-invalid-cipher":"SSL-invalid-cipher","SSL-missing":"SSL-missing","SSL-rc4":"SSL-rc4","SUPER_ADMIN":"SUPER_ADMIN","Save Language":"Save Language","Save TFA Method":"Save TFA Method","Scan":"Scan","Scan Domain":"Scan Domain","Scan Request":"Scan Request","Scan of domain successfully requested":"Scan of domain successfully requested","Scan this QR code with a 2FA app like Authy or Google Authenticator":"Scan this QR code with a 2FA app like Authy or Google Authenticator","Search":"Search","Search for a domain":"Search for a domain","Search for a user":"Search for a user","Search for an organization":"Search for an organization","Search for any Government of Canada tracked domain:":"Search for any Government of Canada tracked domain:","Search:":"Search:","Select Preferred Language":"Select Preferred Language","Select an organization":"Select an organization","Select an organization to view admin options":"Select an organization to view admin options","September":"September","Services":"Services","Services: {domainCount}":["Services: ",["domainCount"]],"Show {pageSize}":["Show ",["pageSize"]],"Showing data for period:":"Showing data for period:","Sign In":"Sign In","Sign In.":"Sign In.","Sign Out":"Sign Out","Sign Out.":"Sign Out.","Sign in with your username and password.":"Sign in with your username and password.","Skip to main content":"Skip to main content","Sort by:":"Sort by:","Source IP Address":"Source IP Address","Submit":"Submit","Summary":"Summary","T-enabled":"T-enabled","TBD":"TBD","TFA Method:":"TFA Method:","TXT-DMARC-enabled":"TXT-DMARC-enabled","TXT-DMARC-missing":"TXT-DMARC-missing","Terms & conditions":"Terms & conditions","Textual Representation":"Textual Representation","The page you are looking for has moved or does not exist.":"The page you are looking for has moved or does not exist.","The user's role has been successfully updated":"The user's role has been successfully updated","This component is currently unavailable. Try reloading the page.":"This component is currently unavailable. Try reloading the page.","This service is being developed in the open":"This service is being developed in the open","Total Messages":"Total Messages","Total users":"Total users","Track Digital Security":"Track Digital Security","Tracker":"Tracker","Tracker Logo":"Tracker Logo","Two Factor Authentication":"Two Factor Authentication","USER":"USER","Unable to change user role, please try again.":"Unable to change user role, please try again.","Unable to create account, please try again.":"Unable to create account, please try again.","Unable to create new domain.":"Unable to create new domain.","Unable to create your account, please try again.":"Unable to create your account, please try again.","Unable to invite user.":"Unable to invite user.","Unable to remove domain.":"Unable to remove domain.","Unable to request scan, please try again.":"Unable to request scan, please try again.","Unable to reset your password, please try again.":"Unable to reset your password, please try again.","Unable to send password reset link to email.":"Unable to send password reset link to email.","Unable to sign in to your account, please try again.":"Unable to sign in to your account, please try again.","Unable to update domain.":"Unable to update domain.","Unable to update password":"Unable to update password","Unable to update to your TFA send method, please try again.":"Unable to update to your TFA send method, please try again.","Unable to update to your display name, please try again.":"Unable to update to your display name, please try again.","Unable to update to your phone number, please try again.":"Unable to update to your phone number, please try again.","Unable to update to your preferred language, please try again.":"Unable to update to your preferred language, please try again.","Unable to update to your username, please try again.":"Unable to update to your username, please try again.","Unable to update user role.":"Unable to update user role.","Unable to update your password, please try again.":"Unable to update your password, please try again.","Unable to update your phone number, please try again.":"Unable to update your phone number, please try again.","Unable to verify your phone number, please try again.":"Unable to verify your phone number, please try again.","Use DKIM to validate outbound email sent from your custom domain":"Use DKIM to validate outbound email sent from your custom domain","User Affiliations":"User Affiliations","User List":"User List","User Profile":"User Profile","User invited":"User invited","Users":"Users","Uses redirect tag with All":"Uses redirect tag with All","Verification TXT records for all 3rd party senders exist":"Verification TXT records for all 3rd party senders exist","Verification TXT records for some/all 3rd party senders missing":"Verification TXT records for some/all 3rd party senders missing","Verification code must only contains numbers":"Verification code must only contains numbers","Verified":"Verified","Verify":"Verify","Vulnerability-ccs-injection":"Vulnerability-ccs-injection","Vulnerability-heartbleed":"Vulnerability-heartbleed","Vulnerable to Heartbleed bug":"Vulnerable to Heartbleed bug","Vulnerable to OpenSSL CCS Injection":"Vulnerable to OpenSSL CCS Injection","We've sent an SMS to your new phone number with an authentication code to confirm this change.":"We've sent an SMS to your new phone number with an authentication code to confirm this change.","We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.":"We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.","We've sent you an email with an authentication code to sign into Tracker.":"We've sent you an email with an authentication code to sign into Tracker.","Web Configuration":"Web Configuration","Web Scan Results":"Web Scan Results","Web encryption settings summary":"Web encryption settings summary","Welcome, Admin":"Welcome, Admin","Welcome, you are successfully signed in to your new account!":"Welcome, you are successfully signed in to your new account!","Welcome, you are successfully signed in!":"Welcome, you are successfully signed in!","Yearly DMARC Graph":"Yearly DMARC Graph","You do not have admin permissions in any organization":"You do not have admin permissions in any organization","You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.":"You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.","You have successfully been signed out.":"You have successfully been signed out.","You have successfully updated your TFA send method.":"You have successfully updated your TFA send method.","You have successfully updated your display name.":"You have successfully updated your display name.","You have successfully updated your email.":"You have successfully updated your email.","You have successfully updated your password.":"You have successfully updated your password.","You have successfully updated your phone number.":"You have successfully updated your phone number.","You have successfully updated your preferred language.":"You have successfully updated your preferred language.","You may now sign in with your new password":"You may now sign in with your new password","Your 2FA app will then have a valid code that you can use when you sign in.":"Your 2FA app will then have a valid code that you can use when you sign in.","Your Account":"Your Account","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31","https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide":"https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide","https://tools.ietf.org/html/rfc6376#section-3.6.1":"https://tools.ietf.org/html/rfc6376#section-3.6.1","https://tools.ietf.org/html/rfc7208#section-4.6.4":"https://tools.ietf.org/html/rfc7208#section-4.6.4","https://tools.ietf.org/html/rfc7208#section-6.1":"https://tools.ietf.org/html/rfc7208#section-6.1","https://tools.ietf.org/html/rfc7489#section-6.3":"https://tools.ietf.org/html/rfc7489#section-6.3","https://tools.ietf.org/html/rfc7489#section-7.1":"https://tools.ietf.org/html/rfc7489#section-7.1","of":"of","pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)":"pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)","{0} was added to {orgSlug}":[["0"]," was added to ",["orgSlug"]],"{count} records...":[["count"]," records..."],"{editingDomainUrl} from {orgSlug} successfully updated to {0}":[["editingDomainUrl"]," from ",["orgSlug"]," successfully updated to ",["0"]],"{orgName}":[["orgName"]]}}; \ No newline at end of file diff --git a/frontend/src/locales/en.po b/frontend/src/locales/en.po index 10b64c0276..1e16c5b047 100644 --- a/frontend/src/locales/en.po +++ b/frontend/src/locales/en.po @@ -104,10 +104,14 @@ msgstr "Account created." msgid "Acronym" msgstr "Acronym" -#: src/AdminDomains.js:296 +#: src/AdminDomains.js:295 msgid "Add Domain" msgstr "Add Domain" +#: src/AdminDomains.js:264 +msgid "Add a domain" +msgstr "Add a domain" + #: src/App.js:155 msgid "Admin" msgstr "Admin" @@ -159,7 +163,7 @@ msgstr "An error occurred while verifying your phone number." #: src/AdminDomains.js:92 #: src/AdminDomains.js:145 #: src/AdminDomains.js:197 -#: src/AdminDomains.js:276 +#: src/AdminDomains.js:275 #: src/TwoFactorAuthenticatePage.js:34 #: src/UserList.js:116 #: src/UserList.js:208 @@ -289,8 +293,8 @@ msgstr "Code field must not be empty" msgid "Compliant TLS" msgstr "Compliant TLS" -#: src/AdminDomains.js:434 -#: src/AdminDomains.js:477 +#: src/AdminDomains.js:433 +#: src/AdminDomains.js:476 #: src/EditableUserDisplayName.js:177 #: src/EditableUserEmail.js:175 #: src/EditableUserPassword.js:198 @@ -311,7 +315,7 @@ msgstr "Confirm Password:" msgid "Confirm password" msgstr "Confirm password" -#: src/AdminDomains.js:457 +#: src/AdminDomains.js:456 msgid "Confirm removal of domain:" msgstr "Confirm removal of domain:" @@ -336,7 +340,7 @@ msgstr "Create an account by entering an email and password." msgid "Current Display Name:" msgstr "Current Display Name:" -#: src/AdminDomains.js:392 +#: src/AdminDomains.js:391 msgid "Current Domain URL:" msgstr "Current Domain URL:" @@ -504,6 +508,7 @@ msgid "Disposition" msgstr "Disposition" #: src/DmarcByDomainPage.js:84 +#: src/DomainsPage.js:130 msgid "Domain" msgstr "Domain" @@ -580,8 +585,8 @@ msgstr "Domain:" #: src/App.js:72 #: src/App.js:161 -#: src/DomainsPage.js:54 -#: src/DomainsPage.js:61 +#: src/DomainsPage.js:64 +#: src/DomainsPage.js:85 #: src/OrganizationDetails.js:91 #: src/OrganizationDomains.js:39 msgid "Domains" @@ -603,7 +608,7 @@ msgstr "Edit" msgid "Edit Display Name" msgstr "Edit Display Name" -#: src/AdminDomains.js:386 +#: src/AdminDomains.js:385 msgid "Edit Domain Details" msgstr "Edit Domain Details" @@ -1135,11 +1140,11 @@ msgstr "Name" msgid "New Display Name:" msgstr "New Display Name:" -#: src/AdminDomains.js:415 +#: src/AdminDomains.js:414 msgid "New Domain Url" msgstr "New Domain Url" -#: src/AdminDomains.js:409 +#: src/AdminDomains.js:408 msgid "New Domain Url:" msgstr "New Domain Url:" @@ -1155,7 +1160,7 @@ msgstr "New Password:" msgid "New Phone Number:" msgstr "New Phone Number:" -#: src/AdminDomains.js:277 +#: src/AdminDomains.js:276 msgid "New domain name cannot be empty" msgstr "New domain name cannot be empty" @@ -1163,8 +1168,8 @@ msgstr "New domain name cannot be empty" msgid "Next" msgstr "Next" -#: src/AdminDomains.js:306 -#: src/DomainsPage.js:89 +#: src/AdminDomains.js:305 +#: src/DomainsPage.js:67 #: src/OrganizationDomains.js:49 msgid "No Domains" msgstr "No Domains" @@ -1478,8 +1483,7 @@ msgstr "Pre-Alpha" msgid "Previous" msgstr "Previous" -#: src/App.js:206 -#: src/App.js:203 +#: src/App.js:207 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Privacy" @@ -1552,11 +1556,11 @@ msgstr "RUF-CCCS" msgid "RUF-none" msgstr "RUF-none" -#: src/AdminDomains.js:451 +#: src/AdminDomains.js:450 msgid "Remove Domain" msgstr "Remove Domain" -#: src/App.js:221 +#: src/App.js:225 msgid "Report an Issue" msgstr "Report an Issue" @@ -1691,7 +1695,7 @@ msgstr "Save Language" msgid "Save TFA Method" msgstr "Save TFA Method" -#: src/DomainsPage.js:70 +#: src/DomainsPage.js:94 msgid "Scan" msgstr "Scan" @@ -1711,24 +1715,23 @@ msgstr "Scan of domain successfully requested" msgid "Scan this QR code with a 2FA app like Authy or Google Authenticator" msgstr "Scan this QR code with a 2FA app like Authy or Google Authenticator" -#: src/DomainsPage.js:67 +#: src/DomainsPage.js:91 msgid "Search" msgstr "Search" -#: src/AdminDomains.js:264 -#: src/DomainsPage.js:84 +#: src/DomainsPage.js:113 msgid "Search for a domain" msgstr "Search for a domain" #: src/UserList.js:253 -msgid "Search for a user" -msgstr "Search for a user" +#~ msgid "Search for a user" +#~ msgstr "Search for a user" #: src/Organizations.js:109 msgid "Search for an organization" msgstr "Search for an organization" -#: src/DomainsPage.js:77 +#: src/DomainsPage.js:101 msgid "Search for any Government of Canada tracked domain:" msgstr "Search for any Government of Canada tracked domain:" @@ -1799,6 +1802,7 @@ msgstr "Sign in with your username and password." msgid "Skip to main content" msgstr "Skip to main content" +#: src/DomainsPage.js:118 #: src/Organizations.js:113 msgid "Sort by:" msgstr "Sort by:" @@ -1836,7 +1840,7 @@ msgstr "TXT-DMARC-enabled" msgid "TXT-DMARC-missing" msgstr "TXT-DMARC-missing" -#: src/App.js:216 +#: src/App.js:218 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Terms & conditions" diff --git a/frontend/src/locales/fr.js b/frontend/src/locales/fr.js index ea9e6fc1cb..afce12c489 100644 --- a/frontend/src/locales/fr.js +++ b/frontend/src/locales/fr.js @@ -29,6 +29,7 @@ 'Account created.': 'Compte créé', Acronym: 'Acronyme', 'Add Domain': 'Ajouter un domaine', + 'Add a domain': 'Add a domain', Admin: 'Administrateur', 'Admin Portal': 'Portail Admin', 'Admin Profile': "Profil de l'administrateur", @@ -114,6 +115,7 @@ 'DKIM Flag t': 'DKIM Flag t', 'DKIM Results': 'Résultats DKIM', 'DKIM Selectors': 'Sélecteurs DKIM', + 'DKIM Status': 'Statut DKIM', 'DKIM TXT record invalid': 'Enregistrement DKIM TXT non valable', 'DKIM key does not use RSA': "La clé DKIM n'utilise pas le RSA", 'DKIM record missing but MX uses O365. Follow cloud-specific guidance': @@ -134,6 +136,7 @@ 'DMARC Messages': 'Messages de la DMARC', 'DMARC Not Implemented': "La DMARC n'est pas mise en œuvre", 'DMARC Report': 'Rapport de la DMARC', + 'DMARC Status': 'Statut DMARC', 'DMARC fail': 'DMARC échoue', 'DMARC pass': 'Passe DMARC', 'DMARC-GC': 'DMARC-GC', @@ -223,6 +226,7 @@ 'HTTP Strict Transport Security (HSTS) non mis en œuvre', 'HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year': "L'âge maximum de la politique de sécurité stricte des transports HTTP (HSTS) est inférieur à un an", + 'HTTPS Status': 'Statut HTTPS', 'HTTPS certificate chain is invalid': "La chaîne de certificats HTTPS n'est pas valable", 'HTTPS certificate is expired': 'Le certificat HTTPS est expiré', @@ -289,6 +293,7 @@ 'L-30-D': 'L-30-D', 'Language:': 'La langue:', 'Last 30 Days': 'Les 30 derniers jours', + 'Last Scanned': 'Dernière numérisation', 'Last scanned:': 'Dernier scan:', 'Level of Enforcment:': "Niveau d'application:", 'Loading {children}...': ['Chargement ', ['children'], '...'], @@ -455,11 +460,13 @@ 'SPF Failure Table': 'Tableau des échecs du SPF', 'SPF Failures by IP Address': 'Défaillances du SPF par adresse IP', 'SPF Results': 'Résultats du SPF', + 'SPF Status': 'Statut SPF', 'SPF implemented in incorrect subdomain': 'SPF implémenté dans un sous-domaine incorrect', 'SPF-GC': 'SPF-GC', 'SPF-bad-path': 'SPF-bad-path', 'SPF-missing': 'SPF-missing', + 'SSL Status': 'Statut SSL', 'SSL-3des': 'SSL-3des', 'SSL-GC': 'SSL-GC', 'SSL-acceptable-certificate': 'SSL-acceptable-certificate', diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po index 3c7c90bb84..ad07133b9e 100644 --- a/frontend/src/locales/fr.po +++ b/frontend/src/locales/fr.po @@ -104,10 +104,14 @@ msgstr "Compte créé" msgid "Acronym" msgstr "Acronyme" -#: src/AdminDomains.js:296 +#: src/AdminDomains.js:295 msgid "Add Domain" msgstr "Ajouter un domaine" +#: src/AdminDomains.js:264 +msgid "Add a domain" +msgstr "" + #: src/App.js:155 msgid "Admin" msgstr "Administrateur" @@ -159,7 +163,7 @@ msgstr "Une erreur s'est produite lors de la mise à jour de votre numéro de t #: src/AdminDomains.js:92 #: src/AdminDomains.js:145 #: src/AdminDomains.js:197 -#: src/AdminDomains.js:276 +#: src/AdminDomains.js:275 #: src/TwoFactorAuthenticatePage.js:34 #: src/UserList.js:116 #: src/UserList.js:208 @@ -289,8 +293,8 @@ msgstr "Le champ de code ne doit pas être vide" msgid "Compliant TLS" msgstr "TLS conformant" -#: src/AdminDomains.js:434 -#: src/AdminDomains.js:477 +#: src/AdminDomains.js:433 +#: src/AdminDomains.js:476 #: src/EditableUserDisplayName.js:177 #: src/EditableUserEmail.js:175 #: src/EditableUserPassword.js:198 @@ -311,7 +315,7 @@ msgstr "Confirmez le mot de passe :" msgid "Confirm password" msgstr "Confirmer le mot de passe" -#: src/AdminDomains.js:457 +#: src/AdminDomains.js:456 msgid "Confirm removal of domain:" msgstr "Confirmer la suppression du domaine :" @@ -336,7 +340,7 @@ msgstr "Créez un compte en entrant un courriel et un mot de passe." msgid "Current Display Name:" msgstr "Nom de l'affichage actuel :" -#: src/AdminDomains.js:392 +#: src/AdminDomains.js:391 msgid "Current Domain URL:" msgstr "URL du domaine actuel :" @@ -504,6 +508,7 @@ msgid "Disposition" msgstr "Disposition" #: src/DmarcByDomainPage.js:84 +#: src/DomainsPage.js:130 msgid "Domain" msgstr "Domaine" @@ -580,8 +585,8 @@ msgstr "Domaine:" #: src/App.js:72 #: src/App.js:161 -#: src/DomainsPage.js:54 -#: src/DomainsPage.js:61 +#: src/DomainsPage.js:64 +#: src/DomainsPage.js:85 #: src/OrganizationDetails.js:91 #: src/OrganizationDomains.js:39 msgid "Domains" @@ -603,7 +608,7 @@ msgstr "Edit" msgid "Edit Display Name" msgstr "Modifier le nom d'affichage" -#: src/AdminDomains.js:386 +#: src/AdminDomains.js:385 msgid "Edit Domain Details" msgstr "Modifier les détails d'un domaine" @@ -1135,11 +1140,11 @@ msgstr "Nom" msgid "New Display Name:" msgstr "Nouveau nom d'affichage :" -#: src/AdminDomains.js:415 +#: src/AdminDomains.js:414 msgid "New Domain Url" msgstr "Nouvel Url de domaine" -#: src/AdminDomains.js:409 +#: src/AdminDomains.js:408 msgid "New Domain Url:" msgstr "Nouvelle URL de domaine :" @@ -1155,7 +1160,7 @@ msgstr "Nouveau mot de passe :" msgid "New Phone Number:" msgstr "Nouveau numéro de téléphone:" -#: src/AdminDomains.js:277 +#: src/AdminDomains.js:276 msgid "New domain name cannot be empty" msgstr "Un nouveau nom de domaine ne peut pas être vide" @@ -1163,8 +1168,8 @@ msgstr "Un nouveau nom de domaine ne peut pas être vide" msgid "Next" msgstr "Suivant" -#: src/AdminDomains.js:306 -#: src/DomainsPage.js:89 +#: src/AdminDomains.js:305 +#: src/DomainsPage.js:67 #: src/OrganizationDomains.js:49 msgid "No Domains" msgstr "Aucun domaine" @@ -1478,7 +1483,7 @@ msgstr "préalpha" msgid "Previous" msgstr "Précédent" -#: src/App.js:206 +#: src/App.js:207 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Confidentialité" @@ -1551,11 +1556,11 @@ msgstr "" msgid "RUF-none" msgstr "" -#: src/AdminDomains.js:451 +#: src/AdminDomains.js:450 msgid "Remove Domain" msgstr "Supprimer un domaine" -#: src/App.js:221 +#: src/App.js:225 msgid "Report an Issue" msgstr "Signaler un problème" @@ -1690,7 +1695,7 @@ msgstr "Sauvegarder la langue" msgid "Save TFA Method" msgstr "Méthode Save TFA" -#: src/DomainsPage.js:70 +#: src/DomainsPage.js:94 msgid "Scan" msgstr "Scanner" @@ -1710,24 +1715,23 @@ msgstr "Scan du domaine demandé avec succès" msgid "Scan this QR code with a 2FA app like Authy or Google Authenticator" msgstr "Scannez ce code QR avec une application 2FA comme Authy ou Google Authenticator" -#: src/DomainsPage.js:67 +#: src/DomainsPage.js:91 msgid "Search" msgstr "Recherchez" -#: src/AdminDomains.js:264 -#: src/DomainsPage.js:84 +#: src/DomainsPage.js:113 msgid "Search for a domain" msgstr "Rechercher un domaine" #: src/UserList.js:253 -msgid "Search for a user" -msgstr "Rechercher un utilisateur" +#~ msgid "Search for a user" +#~ msgstr "Rechercher un utilisateur" #: src/Organizations.js:109 msgid "Search for an organization" msgstr "Rechercher une organisation" -#: src/DomainsPage.js:77 +#: src/DomainsPage.js:101 msgid "Search for any Government of Canada tracked domain:" msgstr "Recherchez n'importe quel domaine suivi par le Gouvernement du Canada:" @@ -1798,6 +1802,7 @@ msgstr "Connectez-vous avec votre nom d'utilisateur et votre mot de passe." msgid "Skip to main content" msgstr "Passer au contenu principal" +#: src/DomainsPage.js:118 #: src/Organizations.js:113 msgid "Sort by:" msgstr "Trier par:" @@ -1835,7 +1840,7 @@ msgstr "" msgid "TXT-DMARC-missing" msgstr "" -#: src/App.js:216 +#: src/App.js:218 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Avis" From 87c410b5ab8c97393586130f169208edd00fc443 Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 19:09:28 -0300 Subject: [PATCH 07/15] Fix document title from resetting for dynamic titles --- frontend/src/App.js | 4 ++-- frontend/src/DmarcGuidancePage.js | 1 + frontend/src/Page.js | 7 ++++--- frontend/src/PrivatePage.js | 11 +++++------ frontend/src/useDocumentTitle.js | 6 +++--- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index 2899acf338..9289eb6feb 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -156,11 +156,11 @@ export default function App() { - + - + diff --git a/frontend/src/DmarcGuidancePage.js b/frontend/src/DmarcGuidancePage.js index 66fd2a9167..6d1ad63153 100644 --- a/frontend/src/DmarcGuidancePage.js +++ b/frontend/src/DmarcGuidancePage.js @@ -14,6 +14,7 @@ import { useDocumentTitle } from './useDocumentTitle' export default function DmarcGuidancePage() { const { currentUser } = useUserState() const { domainSlug } = useParams() + useDocumentTitle(`Tracker | ${domainSlug}`) const { loading, error, data } = useQuery(GET_GUIDANCE_TAGS_OF_DOMAIN, { diff --git a/frontend/src/Page.js b/frontend/src/Page.js index fd5addb22b..6e7bb0e600 100644 --- a/frontend/src/Page.js +++ b/frontend/src/Page.js @@ -1,14 +1,15 @@ import React from 'react' import { Route } from 'react-router-dom' -import { string } from 'prop-types' +import { bool, string } from 'prop-types' import { useDocumentTitle } from './useDocumentTitle' -export const Page = ({ title, ...props }) => { - useDocumentTitle(title) +export const Page = ({ title, setTitle, ...props }) => { + useDocumentTitle(title, setTitle) return } Page.propTypes = { title: string, + setTitle: bool, } diff --git a/frontend/src/PrivatePage.js b/frontend/src/PrivatePage.js index 375359bf12..a7e22468a7 100644 --- a/frontend/src/PrivatePage.js +++ b/frontend/src/PrivatePage.js @@ -1,19 +1,18 @@ -// From https://reactrouter.com/web/example/auth-workflow - import React from 'react' -import { node, string } from 'prop-types' +import { node } from 'prop-types' import { Redirect, useLocation } from 'react-router-dom' import { useUserState } from './UserState' import { Page } from './Page' -// A wrapper for that redirects to the login +// A wrapper for that redirects to the login // screen if you're not yet authenticated. -export default function PrivatePage({ children, title, ...rest }) { +export default function PrivatePage({ children, title, setTitle, ...rest }) { const { isLoggedIn } = useUserState() const location = useLocation() return ( isLoggedIn() ? ( @@ -33,5 +32,5 @@ export default function PrivatePage({ children, title, ...rest }) { PrivatePage.propTypes = { children: node, - title: string, + ...Page.propTypes, } diff --git a/frontend/src/useDocumentTitle.js b/frontend/src/useDocumentTitle.js index 85baf47f0a..6b130340c3 100644 --- a/frontend/src/useDocumentTitle.js +++ b/frontend/src/useDocumentTitle.js @@ -1,7 +1,7 @@ import { useEffect } from 'react' -export const useDocumentTitle = (title) => { +export const useDocumentTitle = (title, setTitle = true) => { useEffect(() => { - document.title = title || 'Tracker' - }, [title]) + if (setTitle) document.title = title || 'Tracker' + }) } From 43e9192aa6c139fea1dbf4882b4fd0564a1cc9c1 Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:28:59 -0300 Subject: [PATCH 08/15] Re-add dynamic document titles to Domains and Organizations --- frontend/src/App.js | 35 +++++++++++++++++++++++------ frontend/src/OrganizationDetails.js | 5 +++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index f7ee3cadb0..3b3fd7c454 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -124,7 +124,10 @@ export default function App() { - + @@ -136,7 +139,11 @@ export default function App() { title={t`Authenticate`} /> - + - + @@ -174,7 +185,11 @@ export default function App() { - + @@ -182,11 +197,17 @@ export default function App() { - + - + @@ -219,7 +240,7 @@ export default function App() { Report an Issue diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index 1ed578e351..ade6226e66 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -23,14 +23,15 @@ import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { LoadingMessage } from './LoadingMessage' import { OrganizationDomains } from './OrganizationDomains' import { OrganizationAffiliations } from './OrganizationAffiliations' -// import { useDocumentTitle } from './useDocumentTitle' +import { useDocumentTitle } from './useDocumentTitle' export default function OrganizationDetails() { const { orgSlug } = useParams() const { currentUser } = useUserState() const toast = useToast() const history = useHistory() - // useDocumentTitle(`${orgSlug} - Tracker`) + + useDocumentTitle(`Tracker | ${orgSlug}`) const { loading, _error, data } = useQuery(ORG_DETAILS_PAGE, { variables: { slug: orgSlug }, From 7c591a7aaa295ebfb641d57f8a24466975f4e0d5 Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:31:55 -0300 Subject: [PATCH 09/15] Update favicons --- frontend/src/browserconfig.xml | 9 ++ frontend/src/html.js | 35 ++-- .../src/images/android-chrome-192x192.png | Bin 0 -> 12077 bytes .../src/images/android-chrome-512x512.png | Bin 0 -> 37502 bytes frontend/src/images/apple-touch-icon.png | Bin 2988 -> 11529 bytes frontend/src/images/favicon-16x16.png | Bin 727 -> 1129 bytes frontend/src/images/favicon-32x32.png | Bin 1131 -> 2141 bytes frontend/src/images/favicon.ico | Bin 15086 -> 15086 bytes frontend/src/images/https.svg | 1 + frontend/src/images/mstile-150x150.png | Bin 0 -> 10218 bytes frontend/src/images/safari-pinned-tab.svg | 150 +++++++++++++++--- frontend/src/manifest.json | 29 ++-- 12 files changed, 163 insertions(+), 61 deletions(-) create mode 100644 frontend/src/browserconfig.xml create mode 100644 frontend/src/images/android-chrome-192x192.png create mode 100644 frontend/src/images/android-chrome-512x512.png create mode 100755 frontend/src/images/https.svg create mode 100644 frontend/src/images/mstile-150x150.png diff --git a/frontend/src/browserconfig.xml b/frontend/src/browserconfig.xml new file mode 100644 index 0000000000..c987d4ae9f --- /dev/null +++ b/frontend/src/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #2e2e40 + + + diff --git a/frontend/src/html.js b/frontend/src/html.js index ce495a0fd6..8e369ca8fd 100644 --- a/frontend/src/html.js +++ b/frontend/src/html.js @@ -1,4 +1,3 @@ -import './images/favicon.ico' import './images/apple-touch-icon.png' import './images/favicon-32x32.png' import './images/favicon-16x16.png' @@ -12,37 +11,25 @@ export default () => ` - - - - - - - + + + + + + + + + + + - - Tracker diff --git a/frontend/src/images/android-chrome-192x192.png b/frontend/src/images/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..08931a5bf90b3eaf44b72017af058722dc490777 GIT binary patch literal 12077 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 EKV5DXkpKVy literal 0 HcmV?d00001 diff --git a/frontend/src/images/android-chrome-512x512.png b/frontend/src/images/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..5d466baef0bc63abc7000a78d7ee4e2c850bf975 GIT binary patch literal 37502 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 literal 0 HcmV?d00001 diff --git a/frontend/src/images/apple-touch-icon.png b/frontend/src/images/apple-touch-icon.png index a4f96659020f30b9cf35f1ea2767b2c507ede37e..e5f42ec2329fcab8238aced906942fd5512d1b66 100644 GIT binary patch literal 11529 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 JM%*O$e*nj>TO$Af delta 2838 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 VH(x0wGp!Q0j;QwNl*t)P`2eAYN4@|6 delta 536 zcmaFKah-KSd_BXo0G|+71_p+!+HwPc>T%op|Nnpad>;C@aZfuRrVYKy*n8+^Z1=P!!2LE4?; z;GD^?=l*Tb_;7w+b-~Uf-OZ;(&{pDE^dDlZh&OrC8 zmbgZgq$HN4S|t~y0x1R~10w@n0~1|C%Me3TD+3EFQwwbaBP#=gzc);#plHa=PsvQH S#L&PC*U{73qcQmxb3OnG`OiN9 diff --git a/frontend/src/images/favicon-32x32.png b/frontend/src/images/favicon-32x32.png index 5a814ec62cac29a165268ba4547f6f050ae8c98a..d0e18da20fdd5ca4f2180395de8acc7978d6719e 100644 GIT binary patch delta 1973 zcmV;m2TJ(s2;C5n83+ad0047(di0SYK7RlPVoOIv0RI600RN!9r;`8x00(qQO+^Rg z0~-JhAjBoqS^xkB{z*hZR9M5Um)mb#R~5#8YwvSr=FG+8``8IdCs)UbdjXQPBtX)N z5}_!93XrNILE(uOgv8|q{sA7~ffs}*Qb4>T5rIfcR7k}wy`)j>Hc1_~PGTpH?SI&@ z=XPe!ZS!!(j_t&DQe{a;N80D?{eAme`|>Seop|iA!vGrC0Xzdd4Lk~L05Z+rs=x#= z1e^w52QCA_;Na;s$Cvv6{uJ;c@FidqV6DSB0LFn=fj$5*^dbhaf%KAPXX@(*9(Orlap8OCa?tjFmN3B zG;5^j0YZSyz#-rQFuIh4UID%jIBuZtVIZ%F4&XDu+ran&3AN;hUf>r=JL=oM!Nt-B z1E`0~WC!p|VBmFo*6@k8kaArSnSZ#0VfDNS z;8+lvHA!r44)c1UP&BH?ia2+s{kfbIz7!b-vssp=(8hx)m+VbNrZzrC&aeE^)ybxpadpvTX>-?PCKcg<_Td0B6k!q z1|nd#Av8kpo8MQ73=je*)qlW_^3HNiA4w-8dfGe?!-kFqEtvp8a1w@&j3I49OVS_$ zwuWpHv_Pj5kJys|TS3K--%qp|vTG}G1nAdC4|Tj;saeN1bvJZA8!|qfqAeTHmJK=b zxJ#*~sWlWq1cfXd-fGA?u&XUVTLE3^2*);TZ#7gs!BWEK3x-(_rhn^#G0RCrW>J|O zaM^0h1kd}S*h8aP`V$q>b(it!43-u=&nEB{oh^#}J;J~y!|oo)m8v*X^H^OTK??j( zsFpOBMjcL#XPK%exHzwHG#qF*{C8HUN3mi%GKQH{dfWQh-6N()ziUiGt>KXc@8sG0U{CcJx7tOUA473=Ic7Gdwb5&7~7T0vIWel12 zjN$SAEONEMg|UFju+W=L($OA~79p$&#)rU%2{&ZI3z_soru+~Q&9{0I6!Y=oBOCEi z7%)~YaWDzzq7FLq!u7iF+BDR|W#@=v35e$fjNho!s3~5ZwfJxv4z=1G2|{QONwh^^ zKq*6H0?uFdaeo8w3@EXfbp;F9kTaw$VNb8cNCnb!b#^;7&iYxVJg7%PS289s>w|z; zB2;H;cJ5~fSYw$P=CSIg+lQ~prh(3O1{D%AcALv zk%rA%)fAP6qBrl8%SR+rhD`;{u5BqURInYDQwBH zHD6F?@YnnE*IHm!#+zx|7hCg=?<-OBV{o zZs3cs>}FhczULi7|3-L!GR0pnrkSoK*wyWmn7U0gQRP_H!;}?6lPUf^ndVX@K`GF* zC*gy7f}~@3etU_w3=Fg;xLFm>%t`1)@>`48K!1(_TULS_1D&}DTN$p*C@PKkwtMrE zVf3oz$wmt8RT=V9{HfB;HP50J#rahd&uE(ir^fP3`HHVTQNrnj%&5b_yKdN*@>+DE zP@Dz&h;7)i5Q#6IlB<}h3a%$81)XWbSV=SLr8w9o>`Vlltt1!=ZPb!f)dDWs(U9tm#hC-nr`SR-~{(!K21}ZLI#Y0>qZ>QmQnROC%g_SSn=%$ zWOQ>9!JU3le0|=EkgsSl|Ivj)5n{*M1sq(DfGjBE$B$=(3$9|g=F!lZ#pw%>x1ko^ zF(@L<)CjL=;kba&lap5{6pDt}FzzRIEPwYM3vi)MVbn5{jT_$69sLjZF)%kcczW5& zzYhF_xT1Nm5C!UPn{*E^@L>~UY@tB|G*wt2ae>&qc04eVwc{h;W#ZCpu|QeWYzc`` z;4Pq^xD05UK#F)c7NEiyM$FfckXGdeReD=;xSFfbZ2 z`9%N#03~!qSaf7zbY(hiZ)9m^c^&{VFfuVMFf%POH&ie%Ix#akGcqeMF*-0XYi~jM Hll%j3=Kzo~ literal 1131 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EWHKPlzi}!BuU!tJ<=+ z43y95D_zr;y{aR3O~|o z=ni2G{m!`H$A(KK-aj>;7s?5oE=aPKX0iXUN@Uqeo5bt4x1RksxANAkKa;zD$#Qw# ze^vB`>89cSc~#XJVZYz)oRYU$f<3Kn`r<`vmnbc{0yLg6$=lr}zW8FGE|9}s;_2(k z{)9!CpTp|&lATOI>1t0G#}JFtwUg7M4;hHGTIO*sc9^&+wbPY_)pcemL#oDM)f|qeNypu^|8A1dd@FX>l2>v|5}~b?d+NF?ObSj$#+8g zpI!6oRc>7B3zj>&wXR0R+5G)S7jBhdi!F1sp3?)z`X z{H!?P+qLK3F7urhWmbgZgq$HN4S|t~y0x1R~10w@n0~1|C%Me3TD+3EFQwwbaBP#=gzc);# zplHa=PsvQH#I2#HwMPS}A-pOiq9iD>T%n*SKP@vSRiUJ^AXOo=pd^`rp<>SCPdprj zVHz5z{7;|pd>X{Stjw*K%q^@e>^)h8Sy;iP!Q^lXv-0K;h0`~#oH%mkh|Cf8(+wUA by!04ei3^r|ax$F?w1UCY)z4*}Q$iB}_%OB| diff --git a/frontend/src/images/favicon.ico b/frontend/src/images/favicon.ico index 368ae15d684cadfdffa338d07e28f0bbff88f194..a737ab8e367ab0e69417b4b07a0f874e70b82ffa 100644 GIT binary patch literal 15086 zcmc&*d6-nyl`ofQ{>V)7&6mso(sXs#(sWl<*S^<#ud18g=#6fmfo^u$1X%=85s*d^ zT+k?sERs=2Bcd@AHHmSFc2v}4)Ql!d#-Jb)*$pBhAmlf{^Qx*hy66U*Fa3Q#ZoT{7 zz4x4R&pr3tb1nwMMTScZE|-C&(eRkXUF#$TY@d}U?&DiMYmPz)&fc%%Z0}_~6rGI+z84!Q`_b9@ zIj?tNTOpizd)j?_J=d0Os_=3kQLfpiZfKIt+2Y29GI(s$fR z-F11PQRZ6BOvHU**4q&F4TEiP3oJtqBCq6iggoS_uuZSd9FKkZ5;_l>Iw?s%`;LVN z!8c?UJo6uech>8$RXlglI`oqtn;Z5u2@mXN?wNgcy@oY!0Fj|rL8ENd;(936lc7aQ zpoNQ}6%B_LuhaPn`X|8>SdFakdgPS61gCP3$W7-f$pdL^uiGMXm!JI%g;uegeRvTI zmBK#d5#-#l9hL`3;zQRd0S~8M?ssH`VF#H9!Bo)EwI*Zg?aSnFcId_ z2Via7iTsAGaMiAd;-|g{54!x5^Al0(k$3ewFy43^`IFxyFB72E-VbH$9}y3743|&j zC1(yf1I;8(5lI>LxFiqJVyH?vBIRS@AGrYGb$^ET8zAwU({Mh13fVvY8-jx;BO0oK zr|J%vXYN4G{G-TOa1_SHCy+n21*(_xkhV3HOEgf6yoqlkXYN-h82d6}!HT53Vxy^> z)Z1ti)cT)teaBC8jmbIgzs`+z(OWw>ckm3p6?wB;kh5$T2Hf)%jO$J!|A75&DRXB4fyf*b)V+q>nP0%Ti1aKuMv#6Yd+FE6 zzHtwXL+^tvKY(Dq9scquFy8qI`foUatTo4V9tuZ4sIT)@*;6J#&lp%seh=%A9SDUc zxA7JzOWM`+TA^)A(Jbd_?guH|X|;bJ4fb#^e_B7vPM3QzRs(3+WX{*5xdNWR^{_@?Kz>OJqQ06o+0(Y^ zHkCF>BZQxJJV;!F>wt3{DT8OzE?DkAjhuyFV?fOo^tFyamTeZy!AJD{(^9_|=J5yH zXs7<bs3$CCDu=#$q-H1YQc^v{XFi57r_7HMs zb1l#Q5(Dagh5pX@$O&wMH?|a7>Efg>B>EtBNo=a@kI_cGY)8NFqSLR&X_vO_h3BzT zFkN#5#)h|$<-ZMP^_Q>~QD$Xt()R6!X)^8Lgo7}TIRJCxewat>Cruy16xsr#m-|)W zLi8(`M*7F-eDpJylm0cZCfK6p<36_z1?s&}{pHZg zmvJwcfw+gZ$rb3R`)OToE05_uKv;!$?KWg@{02GK9U*OdkUQx!QN}k!N8JJ&9c3MhtM>g8ufaVbY$Y53w7T2DWL~ ztC!}ceO%+O!&vk*Ox4>^Q282S$`tw_^O8EE%RK?LdM(tthm(Bh>$iiQ7yU`DU-}uY z@pmF?6>W3#F_>mj$8S1{th>KP|8>W4#YWnW)yMgcy1tmW;Y;ex-(ebekbF?C+RLyc zh|;aFRKLx2@&RSA9mW|ukiFy(a<1q1X-M0-hhdtyk8(J~b@dn8hH<2kKD4gm)ESYl zCkC~4Bh=wPPo53Z_N7hsvWNXa|CYRI9v>VN{}Z_r|B9T-&2ZlR0o=6X`41k2=_j;} z>u6(cA#cl0zc16q2kMlee%+05Z(7G{7&|t);V}j34|VPdzO7k#lX-8 z7z-w`-+CnKxW^2gf>`4`1V=A~f80t$<~|JN?yb-s*@gJiN0E5$AJCo!Jlwy`*OD$- z*K>|wz@5j?pYx_;!%05V_BS8b`O3TUkMLCAg;0+ocCF)5Wn>q#5cT);JrJMH-A5jOAm9eI*b9U`1_tc$XU4qrsdm^H|rI6E0;m> z6(Jt3gjThPGER;yG;0;Na=r45&{6yf4Z|e zeU_oL1KeBO9`K!BAF6Ib{>DEd+%O%Q_?W@uTxt>e&7lO8X`7&qyB+b$F^G=21A(d; z2+}VKmyANRViIDpawrwk=r7TR`+3d^(BCYZ%{EWbC*%IwYS%?SI_OB-JhbVJ)Eyuq zJlA}W_UAci6N{*@F1!zc>XAG%D2T=qa7LVnA*{wUWM zbylY#B|jHw43fq)9lDI=tdM#iq@GBf$Uii=tv>zz*~{x%&yNm=Rdcy_gcJ1lXh;1+ zMk73^s)IZf@}@+Kpa!_7h_BzFZ$A5Z?)LFrnzr=&GrrYzH$}Jjl)^vTpPTGIWjkA% z{)8?6Vt;MpM$wmKU(#P2jpPl!vGWkFrtZYWA8&h?9G`w^X(RP{OwZ{^@LOeQ&%aO0 zBU!HDxNUg?;F7)%zHtL}=inK%rQ{=e6t16);F#;Wpr3jcEhVT2oq6jxZc^UVJ#EBl z@;j5?b6s@xP3Ag@4Z72^PnX}>j!UUK5+`ko@uz5!H4#m4jneK!tH(l7Cb2cip_~!F5_vq^^@Al84H)>Zjcdp}i zO~hecAI?Q5E*u{c%b(Dh&P>nzR`R2>i7$!vGWciwmK=)28O|xc%J08J2oHyee+Jz$ zrpR6LK$m5b_1Ws#PUb;$spqlL-s4sDeLQhaa_@>C_7Ng}OPnGu^jwJj7CRFoy0nvB z(b!!b`}!dvx&8||7vdKzCjPxUdd}xP`@M*;5qA+giQdT7NFS0nk^FLdg1lp4dyAi*Cuc5;K00kl1}5(VCCw0SUeK3CH~&;Ui`c4-pcNl$e0T#YC3{ z@>}wUZxIg@5;OJ_-}|R$irVw@HkBu!Vl za;Maj?ld21zS4ZA`A*A$BGKj2DyNo|+}QB@e2KJN<+qNc+~uB@k%$wm_q2Y%hx7QO zK3q!3`j&O^3*sX}kFT;6yDPsxCY~m)A?!qt?*(KciG9ep;t^Nt{vtI_o;<1D|Ez zxuc73yK3L5j^`P>6E>?Ks-s=(M8=g^njS+tg9g#b)_sY;#gFP?u2asVjLU==`wuhj z;R?eYTaJ9+ZHN_yNn831#ZqF89;r*oLC!3auXorEBpmrsnR|{aysslV@s)a(9K5`f zQeryH!D~gs^tejQTLwqz{=9-Z+XVt z@Oe4=&L_lnojJaoYn2ix+F<6RM=*}SxKe=eLB{-ICCnqMYmpUNkNm`DME%3`9G)&4 z{cI*V%*$Q1ka$Auw3;Q^7|#Sm!Ck+?Z;th-VR&IRD>N~*rz_g{086M`W0Nm?`B?C z*D*xhgE6rD_i&YL;{0=M==We4qt)fA#~Z~a$ythb8j6TA<{Ld+N0K*WjxcsD3aYp2 zxvAVa%x5l?9KjJ}je7}wJ=dULZV8M7t6;ADE%TUvVD9NXc*|}bwmCXCS zgqT<2IyT7N4=qC3q}PM&n-0h6DC5k|6>q|N!$-`EErL0J6!LjL!&=MO_yp!H()qku z2a#2~8GQ;SB=dQedJM1*gEjP2G7nbs3Ct4@z%*kIOr`5#3ap1uTfuubTraXNJ&dJF z&R6cxq}Qp#eo9lz5PWDi%r`R+G~_kv)Nf!O`Yv)OGcPwKc{f4N#|`;7nU7=MGt036 z{RUo%tbE=lNxTZnkWZ|jP38(U=K4FurntX3zKApS zYrElB$iC%kJwKJR>^O5$C((cP3CjBzbCJxgO+3W>@-FhpoMAEZl@)IwxB69NkK2lz znauCZ@n7ndAX z*FOZ`idW#g<1Gwa{x0$s{}uMT4#BBWghP=+;#xj%%K?X+6B{+ZLp91Z-k1b z^Zw72q^%^cTG8y(c$|NUZ}J{b>Yj*<{|oQ%2{$Rh=t*DQ7`U6*)*obiuNHyY(Qw_c z36a|IoI~CtVr)-K)Int~QLCSc=&*%)4kS`O5i#B^QmSUtPBHHz`H#v))b+;HxSjT- zwlyw(8uJ78ft-VnBv0e79>x4d3=yq_F*@4V;u@$C=GbWe;$G&km2>D|FZG5!-mRx)#J>eHi&x;^JQ)0rTFc#U+#H&4vA%#?_1>|es!z=k@5rjvaUsPLc#Jn zJx8a@R_ylK`#RV6;#Xgh=DmH%dO7?4rFBkwcU+-UeA`g_F+2a}`*@OuR#}}Zf0@3Q zv5Py8*VQw>leod}h~7AVNFO5eU{_;hs^j;f4=acs`lVgUOY~g)>Wp`bGmS6xYBJKRbyW9TPO}t<4_L-of`k@!GD^|HP=lbEA%rvx-TbA$ld>h%ekc2qKBaFN zL&lOZWo(I4NLa#1w8kmAp`5&3P7Eft5b}ReWG@jpNPO#YqLN^g<;*|Ui(aiJ{!V0C zD-zq6Iq#r1e3rHn~1iv)$&_w(LU-sZbNO zh*xpnpSl^=vM1mvy&I8;_y>MOil)Ii;im{s*ocsJO$%+}r?NlE{Xgj^5*`7^ge|bG z*be)G7vQX3jNI!#gOB$%RHp)G1$_sVcR&L4zr4zBH4yv8->?*J|0uX(D_|YXyFB#k z`ZxR%{cKGz`Io{n?9Z^*Jqkx`83NJkr5&OBs;9JQ(aC}Zygxd58}GT$$D4B$mT~lR z6VD)9*$89ZbM%#YA8E`EIN~dz@t&WYGvuxjX+ITwwxae9e<0);!lK1YUm@x5w0A;d&=~q73P+! zu0(WDBci-xttd70Lzq_#(nrznB*4?-Nb^S6~3H;rM z`@F>Ol5M*$Mb|t0pEuIkhjkK@7rHX_BWp|6SckUh)yR5Tzh#8zO|K& dtl#6=2E$I)w9uM1OT3lH^p}1w-%1;4`~O+MhD-ne literal 15086 zcmdU$U5s2+9l+1*w%ytmx*%Akp}Vb+P?4(O8WxVl*mflLlL~?D+fb+;f?^J9EEgrrVw5 z*K_Xqf8MWi&;8$R2#qivcI^tZ)8XOsL%1Y_Fg=}YPloVE#wKZ%-?S!#+fcXw9ZbUY z;P}$-ymoUk{@r%b3+Kb%63B3M{m6S8yqK_Ub!8s{d2fNk30qcS{%4Z=^9g6J!u(Go z_n#!3whHrKPww*x>sMj^Ysvi(d>7WP!u-d``&$WPt1W-?CHJq&sggUnY=q0;B6u_8 zUKhykk-YqouK|5s2>RZbr$2}c-y7fwcm;k1kHa1CA((+3;Jo9t(||7}*mq2sI_lm4 zpM`J3FX3g-_l7}oEV9M_K4@iFWcyY4Gdv3q!hP`11pAIDQ%7BGvVQgz#UE5oOwaRQ zdc@A=QgvIO7Y>?Vkv%acz+|#@ z;5A(}x3c>BHpZIoP9Ys&sU8(TqsU~cu{+6ul%v!3_r^F`5)VVhks&3|FM!T{E0eoA+W47b z=|_JW^sUTTe93s@=Qg|r-T~*nAt~3x<_h>ebgjvg@z-d}<{kC4xuP?=zQGt>3UACUjJ7&X_5!*R#keYh%tOpA+bUB>U2U|zcbGYq^+jCg)4SjXNbf=V*TQkg z=I+>a(Leo7@Ii1LbW-Na7~7VZJ`a1XLtICF53>0?)=U3%#>YE-uXLY$u7=M0+Wyrm zombiTKo(+GyKV?})jUZLz-w^4=Zd zS|r_6KrpUkHgDQD0`lzdC3}dDHpPYZ+-w&UJ_{LaP=Vi=u zkaxdXQ^=FYaPK=|Dx_LPmE3I$RcfRqt;d|Nd z;Ys*8=yMV72j|02K#bF`RYzTIv{g@E`aBHAFjhJr(ccC>XLmaeKKEw8`SY7_7I=)} zv#?)m$JJ3+n@2z&`qHPq-vvIGbN}`px%=SyVo8s763To}>HL1;eti@w&Ho+uWm-SM zhu;9od=F74{T4w#^%4EnY4LLUtWuMf^*bb=vl`~Wa_9}>zeD83%|{MPJ}RH`GwlY z<^`%H^HfS~BlB#}@7grJc>TJ$*1|-qi}~?Z>ksd2wJcwB#PUO}Wr=A>>l78=SU3*X z3NC8>uyt-LJ!hfoe2`w>^nGsaj=_~d-}@h#_s6H;GjJVzIKjSS%F_ES`i(8J_3#)t z_q-0yxnkcjW$UAUXUn+HvD@G%#JMZmDpRMcV#M}#@R^#owurveQFpuXX{X>Ri1M=S z(}}J7{Dm6!+Gs1zⓈX`p<#uu{dVmF=cT~8*SePw}WeU_v0@30A%eQQ>Ko(+Gy+h z&C+`Z?G88{Zh;slwvH*=ksP \ No newline at end of file diff --git a/frontend/src/images/mstile-150x150.png b/frontend/src/images/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..2e351ae01f31b0d15c76f608b9511b275dc9d2ed GIT binary patch literal 10218 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 Created by potrace 1.11, written by Peter Selinger 2001-2013 - - + + diff --git a/frontend/src/manifest.json b/frontend/src/manifest.json index 17cde2c461..f28bd41fc6 100644 --- a/frontend/src/manifest.json +++ b/frontend/src/manifest.json @@ -2,24 +2,19 @@ "short_name": "Tracker", "name": "Tracking GoC Web Security", "icons": [ - { - "src": "/favicon.ico", - "sizes": "32x32 16x16", - "type": "image/x-icon" - }, - { - "src": "/images/logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "/images/logo512.png", - "type": "image/png", - "sizes": "512x512" - } + { + "src": "/images/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/images/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" + "theme_color": "#ff0000", + "background_color": "#ff0000" } From 8f528493fdb23d58937572befa3941649d3614a7 Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:34:12 -0300 Subject: [PATCH 10/15] Change client uri --- frontend/src/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/client.js b/frontend/src/client.js index d8b8015af2..8c4899442b 100644 --- a/frontend/src/client.js +++ b/frontend/src/client.js @@ -43,7 +43,7 @@ export const cache = createCache() export const client = new ApolloClient({ link: new HttpLink({ - uri: 'https://tracker.alpha.canada.ca/graphql', + uri: '/graphql', }), cache, }) From f53d7cd790a88d96dbcfaa05d6db18a8308b7adc Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:47:42 -0300 Subject: [PATCH 11/15] Add dynamic title to dmarc reports --- frontend/src/App.js | 2 +- frontend/src/DmarcReportPage.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index 3b3fd7c454..ac6f215734 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -179,7 +179,7 @@ export default function App() { diff --git a/frontend/src/DmarcReportPage.js b/frontend/src/DmarcReportPage.js index b62ddae2ec..dcda813436 100644 --- a/frontend/src/DmarcReportPage.js +++ b/frontend/src/DmarcReportPage.js @@ -28,14 +28,15 @@ import { months } from './months' import { ErrorBoundary } from 'react-error-boundary' import { ErrorFallbackMessage } from './ErrorFallbackMessage' import { LoadingMessage } from './LoadingMessage' -// import { useDocumentTitle } from './useDocumentTitle' +import { useDocumentTitle } from './useDocumentTitle' export default function DmarcReportPage({ summaryListResponsiveWidth }) { const { currentUser } = useUserState() const { domainSlug, period, year } = useParams() const history = useHistory() const { i18n } = useLingui() - // useDocumentTitle(`${domainSlug} - Tracker`) + + useDocumentTitle(t`DMARC Report | ${domainSlug}`) const currentDate = new Date() const [selectedPeriod, setSelectedPeriod] = useState(period) From cd9ce9bcc74caa64b75e8b87c222964693c1fe35 Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:52:17 -0300 Subject: [PATCH 12/15] Remove unused Route --- frontend/src/App.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index ac6f215734..85e2e0378b 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -204,13 +204,6 @@ export default function App() { - - - - From c8f240ed9b19ccee368c68d2e7572b8b2e7532bc Mon Sep 17 00:00:00 2001 From: FestiveKyle Date: Fri, 26 Mar 2021 20:52:44 -0300 Subject: [PATCH 13/15] Update translations --- frontend/src/locales/en.po | 140 ++++++++++++++++++------------------ frontend/src/locales/fr.po | 144 +++++++++++++++++++------------------ 2 files changed, 144 insertions(+), 140 deletions(-) diff --git a/frontend/src/locales/en.po b/frontend/src/locales/en.po index 1e16c5b047..9630e86bfb 100644 --- a/frontend/src/locales/en.po +++ b/frontend/src/locales/en.po @@ -112,7 +112,7 @@ msgstr "Add Domain" msgid "Add a domain" msgstr "Add a domain" -#: src/App.js:155 +#: src/App.js:166 msgid "Admin" msgstr "Admin" @@ -186,11 +186,11 @@ msgstr "As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat me msgid "August" msgstr "August" -#: src/App.js:136 +#: src/App.js:139 msgid "Authenticate" msgstr "Authenticate" -#: src/App.js:185 +#: src/App.js:202 msgid "Authentication QR Code" msgstr "Authentication QR Code" @@ -328,7 +328,7 @@ msgstr "Contact 3rd party" msgid "Create Account" msgstr "Create Account" -#: src/App.js:127 +#: src/App.js:129 msgid "Create an Account" msgstr "Create an Account" @@ -356,7 +356,7 @@ msgstr "Current Password:" msgid "Current Phone Number:" msgstr "Current Phone Number:" -#: src/DmarcReportPage.js:307 +#: src/DmarcReportPage.js:308 msgid "DKIM Aligned" msgstr "DKIM Aligned" @@ -364,16 +364,16 @@ msgstr "DKIM Aligned" msgid "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." msgstr "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." -#: src/DmarcReportPage.js:274 +#: src/DmarcReportPage.js:275 msgid "DKIM Domains" msgstr "DKIM Domains" -#: src/DmarcReportPage.js:329 +#: src/DmarcReportPage.js:330 msgid "DKIM Failure Table" msgstr "DKIM Failure Table" -#: src/DmarcReportPage.js:340 -#: src/DmarcReportPage.js:372 +#: src/DmarcReportPage.js:341 +#: src/DmarcReportPage.js:373 msgid "DKIM Failures by IP Address" msgstr "DKIM Failures by IP Address" @@ -381,11 +381,11 @@ msgstr "DKIM Failures by IP Address" msgid "DKIM Flag t" msgstr "DKIM Flag t" -#: src/DmarcReportPage.js:311 +#: src/DmarcReportPage.js:312 msgid "DKIM Results" msgstr "DKIM Results" -#: src/DmarcReportPage.js:278 +#: src/DmarcReportPage.js:279 msgid "DKIM Selectors" msgstr "DKIM Selectors" @@ -429,12 +429,12 @@ msgstr "DKIM-missing-mx-O365" msgid "DKIM-value-invalid" msgstr "DKIM-value-invalid" -#: src/DmarcReportPage.js:532 +#: src/DmarcReportPage.js:533 msgid "DMARC Failure Table" msgstr "DMARC Failure Table" -#: src/DmarcReportPage.js:543 -#: src/DmarcReportPage.js:572 +#: src/DmarcReportPage.js:544 +#: src/DmarcReportPage.js:573 msgid "DMARC Failures by IP Address" msgstr "DMARC Failures by IP Address" @@ -456,12 +456,16 @@ msgstr "DMARC Messages" #~ msgstr "DMARC Not Implemented" #: src/App.js:78 -#: src/App.js:177 -#: src/DmarcGuidancePage.js:62 +#: src/App.js:190 +#: src/DmarcGuidancePage.js:63 #: src/DomainCard.js:167 msgid "DMARC Report" msgstr "DMARC Report" +#: src/DmarcReportPage.js:39 +msgid "DMARC Report | {domainSlug}" +msgstr "DMARC Report | {domainSlug}" + #: src/DomainsPage.js:136 msgid "DMARC Status" msgstr "DMARC Status" @@ -482,7 +486,7 @@ msgstr "DMARC-GC" msgid "DMARC-missing" msgstr "DMARC-missing" -#: src/DmarcReportPage.js:287 +#: src/DmarcReportPage.js:288 msgid "DNS Host" msgstr "DNS Host" @@ -503,7 +507,7 @@ msgstr "Display Name:" msgid "Display name cannot be empty" msgstr "Display name cannot be empty" -#: src/DmarcReportPage.js:315 +#: src/DmarcReportPage.js:316 msgid "Disposition" msgstr "Disposition" @@ -512,14 +516,13 @@ msgstr "Disposition" msgid "Domain" msgstr "Domain" -#: src/App.js:171 -#: src/App.js:189 -msgid "Domain DMARC Report" -msgstr "Domain DMARC Report" +#: src/App.js:209 +#~ msgid "Domain DMARC Report" +#~ msgstr "Domain DMARC Report" #: src/App.js:165 -msgid "Domain Details" -msgstr "Domain Details" +#~ msgid "Domain Details" +#~ msgstr "Domain Details" #: src/AdminDomains.js:248 #: src/AdminDomains.js:256 @@ -584,10 +587,10 @@ msgid "Domain:" msgstr "Domain:" #: src/App.js:72 -#: src/App.js:161 +#: src/App.js:172 #: src/DomainsPage.js:64 #: src/DomainsPage.js:85 -#: src/OrganizationDetails.js:91 +#: src/OrganizationDetails.js:92 #: src/OrganizationDomains.js:39 msgid "Domains" msgstr "Domains" @@ -672,11 +675,11 @@ msgstr "Enter two factor code" msgid "Enter your user account's verified email address and we will send you a password reset link." msgstr "Enter your user account's verified email address and we will send you a password reset link." -#: src/DmarcReportPage.js:269 +#: src/DmarcReportPage.js:270 msgid "Envelope From" msgstr "Envelope From" -#: src/DmarcReportPage.js:226 +#: src/DmarcReportPage.js:227 #: src/fixtures/summaryListData.js:171 msgid "Fail" msgstr "Fail" @@ -719,7 +722,7 @@ msgstr "For in-depth CCCS implementation guidance:" msgid "For technical implementation guidance:" msgstr "For technical implementation guidance:" -#: src/App.js:139 +#: src/App.js:145 msgid "Forgot Password" msgstr "Forgot Password" @@ -735,12 +738,12 @@ msgstr "Full Fail %" msgid "Full Pass %" msgstr "Full Pass %" -#: src/DmarcReportPage.js:399 +#: src/DmarcReportPage.js:400 msgid "Fully Aligned Table" msgstr "Fully Aligned Table" -#: src/DmarcReportPage.js:410 -#: src/DmarcReportPage.js:437 +#: src/DmarcReportPage.js:411 +#: src/DmarcReportPage.js:438 msgid "Fully Aligned by IP Address" msgstr "Fully Aligned by IP Address" @@ -757,12 +760,12 @@ msgstr "Go to page:" msgid "Government of Canada domains subject to TBS guidelines" msgstr "Government of Canada domains subject to TBS guidelines" -#: src/DmarcReportPage.js:297 -#: src/DmarcReportPage.js:618 +#: src/DmarcReportPage.js:298 +#: src/DmarcReportPage.js:619 msgid "Guidance" msgstr "Guidance" -#: src/DmarcGuidancePage.js:35 +#: src/DmarcGuidancePage.js:36 msgid "Guidance Tags" msgstr "Guidance Tags" @@ -862,7 +865,7 @@ msgstr "HTTPS-not-enforced" msgid "HTTPS-weakly-enforced" msgstr "HTTPS-weakly-enforced" -#: src/DmarcReportPage.js:293 +#: src/DmarcReportPage.js:294 msgid "Header From" msgstr "Header From" @@ -1020,7 +1023,7 @@ msgid "Language:" msgstr "Language:" #: src/DmarcByDomainPage.js:187 -#: src/DmarcReportPage.js:140 +#: src/DmarcReportPage.js:141 msgid "Last 30 Days" msgstr "Last 30 Days" @@ -1194,11 +1197,11 @@ msgstr "No Users" msgid "No current phone number" msgstr "No current phone number" -#: src/DmarcReportPage.js:387 +#: src/DmarcReportPage.js:388 msgid "No data for the DKIM Failures by IP Address table" msgstr "No data for the DKIM Failures by IP Address table" -#: src/DmarcReportPage.js:587 +#: src/DmarcReportPage.js:588 msgid "No data for the DMARC Failures by IP Address table" msgstr "No data for the DMARC Failures by IP Address table" @@ -1206,15 +1209,15 @@ msgstr "No data for the DMARC Failures by IP Address table" msgid "No data for the DMARC summary table" msgstr "No data for the DMARC summary table" -#: src/DmarcReportPage.js:258 +#: src/DmarcReportPage.js:259 msgid "No data for the DMARC yearly report graph" msgstr "No data for the DMARC yearly report graph" -#: src/DmarcReportPage.js:452 +#: src/DmarcReportPage.js:453 msgid "No data for the Fully Aligned by IP Address table" msgstr "No data for the Fully Aligned by IP Address table" -#: src/DmarcReportPage.js:520 +#: src/DmarcReportPage.js:521 msgid "No data for the SPF Failures by IP Address table" msgstr "No data for the SPF Failures by IP Address table" @@ -1255,8 +1258,7 @@ msgstr "October" msgid "One or more ciphers in use are not compliant with guidelines" msgstr "One or more ciphers in use are not compliant with guidelines" -#: src/App.js:151 -#: src/OrganizationDetails.js:63 +#: src/OrganizationDetails.js:64 msgid "Organization Details" msgstr "Organization Details" @@ -1265,7 +1267,7 @@ msgid "Organization:" msgstr "Organization:" #: src/App.js:66 -#: src/App.js:147 +#: src/App.js:154 #: src/Organizations.js:62 #: src/Organizations.js:97 msgid "Organizations" @@ -1368,17 +1370,17 @@ msgstr "Page Size:" msgid "Page {0} of {1}" msgstr "Page {0} of {1}" -#: src/DmarcReportPage.js:208 +#: src/DmarcReportPage.js:209 #: src/fixtures/summaryListData.js:155 msgid "Pass" msgstr "Pass" -#: src/DmarcReportPage.js:220 +#: src/DmarcReportPage.js:221 #: src/fixtures/summaryListData.js:165 msgid "Pass Only DKIM" msgstr "Pass Only DKIM" -#: src/DmarcReportPage.js:214 +#: src/DmarcReportPage.js:215 #: src/fixtures/summaryListData.js:161 msgid "Pass Only SPF" msgstr "Pass Only SPF" @@ -1483,7 +1485,7 @@ msgstr "Pre-Alpha" msgid "Previous" msgstr "Previous" -#: src/App.js:207 +#: src/App.js:221 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Privacy" @@ -1560,7 +1562,7 @@ msgstr "RUF-none" msgid "Remove Domain" msgstr "Remove Domain" -#: src/App.js:225 +#: src/App.js:239 msgid "Report an Issue" msgstr "Report an Issue" @@ -1568,7 +1570,7 @@ msgstr "Report an Issue" msgid "Request a domain to be scanned:" msgstr "Request a domain to be scanned:" -#: src/App.js:144 +#: src/App.js:151 msgid "Reset Password" msgstr "Reset Password" @@ -1614,24 +1616,24 @@ msgstr "SP-quarantine" msgid "SP-reject" msgstr "SP-reject" -#: src/DmarcReportPage.js:299 +#: src/DmarcReportPage.js:300 msgid "SPF Aligned" msgstr "SPF Aligned" -#: src/DmarcReportPage.js:289 +#: src/DmarcReportPage.js:290 msgid "SPF Domains" msgstr "SPF Domains" -#: src/DmarcReportPage.js:464 +#: src/DmarcReportPage.js:465 msgid "SPF Failure Table" msgstr "SPF Failure Table" -#: src/DmarcReportPage.js:475 -#: src/DmarcReportPage.js:505 +#: src/DmarcReportPage.js:476 +#: src/DmarcReportPage.js:506 msgid "SPF Failures by IP Address" msgstr "SPF Failures by IP Address" -#: src/DmarcReportPage.js:303 +#: src/DmarcReportPage.js:304 msgid "SPF Results" msgstr "SPF Results" @@ -1768,12 +1770,12 @@ msgid "Show {pageSize}" msgstr "Show {pageSize}" #: src/DmarcByDomainPage.js:231 -#: src/DmarcReportPage.js:627 +#: src/DmarcReportPage.js:628 msgid "Showing data for period:" msgstr "Showing data for period:" #: src/App.js:114 -#: src/App.js:131 +#: src/App.js:134 #: src/FloatingMenu.js:158 #: src/SignInPage.js:153 msgid "Sign In" @@ -1807,7 +1809,7 @@ msgstr "Skip to main content" msgid "Sort by:" msgstr "Sort by:" -#: src/DmarcReportPage.js:264 +#: src/DmarcReportPage.js:265 msgid "Source IP Address" msgstr "Source IP Address" @@ -1816,7 +1818,7 @@ msgstr "Source IP Address" msgid "Submit" msgstr "Submit" -#: src/OrganizationDetails.js:88 +#: src/OrganizationDetails.js:89 msgid "Summary" msgstr "Summary" @@ -1840,7 +1842,7 @@ msgstr "TXT-DMARC-enabled" msgid "TXT-DMARC-missing" msgstr "TXT-DMARC-missing" -#: src/App.js:218 +#: src/App.js:232 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Terms & conditions" @@ -1866,7 +1868,7 @@ msgid "This service is being developed in the open" msgstr "This service is being developed in the open" #: src/DmarcByDomainPage.js:88 -#: src/DmarcReportPage.js:282 +#: src/DmarcReportPage.js:283 msgid "Total Messages" msgstr "Total Messages" @@ -1879,8 +1881,8 @@ msgid "Track Digital Security" msgstr "Track Digital Security" #: src/Page.js:8 -msgid "Tracker" -msgstr "Tracker" +#~ msgid "Tracker" +#~ msgstr "Tracker" #: src/TopBanner.js:36 msgid "Tracker Logo" @@ -2005,7 +2007,7 @@ msgstr "User List" msgid "User invited" msgstr "User invited" -#: src/OrganizationDetails.js:94 +#: src/OrganizationDetails.js:95 msgid "Users" msgstr "Users" @@ -2087,7 +2089,7 @@ msgstr "Welcome, you are successfully signed in to your new account!" msgid "Welcome, you are successfully signed in!" msgstr "Welcome, you are successfully signed in!" -#: src/DmarcReportPage.js:194 +#: src/DmarcReportPage.js:195 msgid "Yearly DMARC Graph" msgstr "Yearly DMARC Graph" @@ -2136,7 +2138,7 @@ msgstr "You may now sign in with your new password" msgid "Your 2FA app will then have a valid code that you can use when you sign in." msgstr "Your 2FA app will then have a valid code that you can use when you sign in." -#: src/App.js:181 +#: src/App.js:196 msgid "Your Account" msgstr "Your Account" @@ -2236,6 +2238,6 @@ msgstr "{count} records..." msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}" msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}" -#: src/OrganizationDetails.js:79 +#: src/OrganizationDetails.js:80 msgid "{orgName}" msgstr "{orgName}" diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po index ad07133b9e..2b6bc2c965 100644 --- a/frontend/src/locales/fr.po +++ b/frontend/src/locales/fr.po @@ -110,9 +110,9 @@ msgstr "Ajouter un domaine" #: src/AdminDomains.js:264 msgid "Add a domain" -msgstr "" +msgstr "Ajouter un domaine" -#: src/App.js:155 +#: src/App.js:166 msgid "Admin" msgstr "Administrateur" @@ -186,11 +186,11 @@ msgstr "Conformément à la section 3.6.1 du RFC, l'indicateur de test t=y signi msgid "August" msgstr "Août" -#: src/App.js:136 +#: src/App.js:139 msgid "Authenticate" msgstr "Authentifier" -#: src/App.js:185 +#: src/App.js:202 msgid "Authentication QR Code" msgstr "Code QR d'authentification" @@ -328,7 +328,7 @@ msgstr "Contacter une tierce partie" msgid "Create Account" msgstr "Créer un compte" -#: src/App.js:127 +#: src/App.js:129 msgid "Create an Account" msgstr "Créer un compte" @@ -356,7 +356,7 @@ msgstr "Mot de passe actuel :" msgid "Current Phone Number:" msgstr "Numéro de téléphone actuel:" -#: src/DmarcReportPage.js:307 +#: src/DmarcReportPage.js:308 msgid "DKIM Aligned" msgstr "DKIM Aligné" @@ -364,16 +364,16 @@ msgstr "DKIM Aligné" msgid "DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365." msgstr "Les CNAME DKIM n'existent pas, mais MX pointe vers *.onmicrosoft.com et l'enregistrement SPF inclut O365." -#: src/DmarcReportPage.js:274 +#: src/DmarcReportPage.js:275 msgid "DKIM Domains" msgstr "Domaines DKIM" -#: src/DmarcReportPage.js:329 +#: src/DmarcReportPage.js:330 msgid "DKIM Failure Table" msgstr "Tableau des échecs DKIM" -#: src/DmarcReportPage.js:340 -#: src/DmarcReportPage.js:372 +#: src/DmarcReportPage.js:341 +#: src/DmarcReportPage.js:373 msgid "DKIM Failures by IP Address" msgstr "Défaillances DKIM par adresse IP" @@ -381,11 +381,11 @@ msgstr "Défaillances DKIM par adresse IP" msgid "DKIM Flag t" msgstr "DKIM Flag t" -#: src/DmarcReportPage.js:311 +#: src/DmarcReportPage.js:312 msgid "DKIM Results" msgstr "Résultats DKIM" -#: src/DmarcReportPage.js:278 +#: src/DmarcReportPage.js:279 msgid "DKIM Selectors" msgstr "Sélecteurs DKIM" @@ -429,12 +429,12 @@ msgstr "DKIM-missing-mx-O365" msgid "DKIM-value-invalid" msgstr "DKIM-value-invalid" -#: src/DmarcReportPage.js:532 +#: src/DmarcReportPage.js:533 msgid "DMARC Failure Table" msgstr "Tableau des échecs de la DMARC" -#: src/DmarcReportPage.js:543 -#: src/DmarcReportPage.js:572 +#: src/DmarcReportPage.js:544 +#: src/DmarcReportPage.js:573 msgid "DMARC Failures by IP Address" msgstr "Défaillances du DMARC par adresse IP" @@ -456,11 +456,15 @@ msgstr "Messages de la DMARC" #~ msgstr "La DMARC n'est pas mise en œuvre" #: src/App.js:78 -#: src/App.js:177 -#: src/DmarcGuidancePage.js:62 +#: src/App.js:190 +#: src/DmarcGuidancePage.js:63 #: src/DomainCard.js:167 msgid "DMARC Report" -msgstr "Rapport de la DMARC" +msgstr "Rapport DMARC " + +#: src/DmarcReportPage.js:39 +msgid "DMARC Report | {domainSlug}" +msgstr "Rapport DMARC | {domainSlug}" #: src/DomainsPage.js:136 msgid "DMARC Status" @@ -482,7 +486,7 @@ msgstr "DMARC-GC" msgid "DMARC-missing" msgstr "DMARC-missing" -#: src/DmarcReportPage.js:287 +#: src/DmarcReportPage.js:288 msgid "DNS Host" msgstr "Hôte DNS" @@ -503,7 +507,7 @@ msgstr "Nom d'affichage :" msgid "Display name cannot be empty" msgstr "Le nom d'affichage ne peut pas être vide" -#: src/DmarcReportPage.js:315 +#: src/DmarcReportPage.js:316 msgid "Disposition" msgstr "Disposition" @@ -512,14 +516,13 @@ msgstr "Disposition" msgid "Domain" msgstr "Domaine" -#: src/App.js:171 -#: src/App.js:189 -msgid "Domain DMARC Report" -msgstr "Rapport DMARC de domaine" +#: src/App.js:209 +#~ msgid "Domain DMARC Report" +#~ msgstr "" #: src/App.js:165 -msgid "Domain Details" -msgstr "Détails du domaine" +#~ msgid "Domain Details" +#~ msgstr "Détails du domaine" #: src/AdminDomains.js:248 #: src/AdminDomains.js:256 @@ -584,10 +587,10 @@ msgid "Domain:" msgstr "Domaine:" #: src/App.js:72 -#: src/App.js:161 +#: src/App.js:172 #: src/DomainsPage.js:64 #: src/DomainsPage.js:85 -#: src/OrganizationDetails.js:91 +#: src/OrganizationDetails.js:92 #: src/OrganizationDomains.js:39 msgid "Domains" msgstr "Domaines" @@ -672,11 +675,11 @@ msgstr "Entrez le code à deux facteurs" msgid "Enter your user account's verified email address and we will send you a password reset link." msgstr "Saisissez l'adresse électronique vérifiée de votre compte d'utilisateur et nous vous enverrons un lien pour réinitialiser votre mot de passe." -#: src/DmarcReportPage.js:269 +#: src/DmarcReportPage.js:270 msgid "Envelope From" msgstr "Enveloppe De" -#: src/DmarcReportPage.js:226 +#: src/DmarcReportPage.js:227 #: src/fixtures/summaryListData.js:171 msgid "Fail" msgstr "Échec" @@ -719,7 +722,7 @@ msgstr "Pour des conseils approfondis sur la mise en œuvre du CCCS :" msgid "For technical implementation guidance:" msgstr "Pour des conseils de mise en œuvre technique :" -#: src/App.js:139 +#: src/App.js:145 msgid "Forgot Password" msgstr "Mot de passe oublié" @@ -735,12 +738,12 @@ msgstr "Échec total %" msgid "Full Pass %" msgstr "Passage complet %" -#: src/DmarcReportPage.js:399 +#: src/DmarcReportPage.js:400 msgid "Fully Aligned Table" msgstr "Tableau entièrement aligné" -#: src/DmarcReportPage.js:410 -#: src/DmarcReportPage.js:437 +#: src/DmarcReportPage.js:411 +#: src/DmarcReportPage.js:438 msgid "Fully Aligned by IP Address" msgstr "Entièrement aligné par adresse IP" @@ -757,12 +760,12 @@ msgstr "Aller à la page" msgid "Government of Canada domains subject to TBS guidelines" msgstr "Les domaines du gouvernement du Canada sont soumis aux directives du SCT" -#: src/DmarcReportPage.js:297 -#: src/DmarcReportPage.js:618 +#: src/DmarcReportPage.js:298 +#: src/DmarcReportPage.js:619 msgid "Guidance" msgstr "Conseils" -#: src/DmarcGuidancePage.js:35 +#: src/DmarcGuidancePage.js:36 msgid "Guidance Tags" msgstr "Étiquettes d'orientation" @@ -862,7 +865,7 @@ msgstr "" msgid "HTTPS-weakly-enforced" msgstr "" -#: src/DmarcReportPage.js:293 +#: src/DmarcReportPage.js:294 msgid "Header From" msgstr "En-tête De" @@ -1020,7 +1023,7 @@ msgid "Language:" msgstr "La langue:" #: src/DmarcByDomainPage.js:187 -#: src/DmarcReportPage.js:140 +#: src/DmarcReportPage.js:141 msgid "Last 30 Days" msgstr "Les 30 derniers jours" @@ -1194,11 +1197,11 @@ msgstr "Pas d'utilisateurs" msgid "No current phone number" msgstr "Pas de numéro de téléphone actuel" -#: src/DmarcReportPage.js:387 +#: src/DmarcReportPage.js:388 msgid "No data for the DKIM Failures by IP Address table" msgstr "Aucune donnée pour le tableau des défaillances DKIM par adresse IP" -#: src/DmarcReportPage.js:587 +#: src/DmarcReportPage.js:588 msgid "No data for the DMARC Failures by IP Address table" msgstr "Pas de données pour le tableau des défaillances DMARC par adresse IP" @@ -1206,15 +1209,15 @@ msgstr "Pas de données pour le tableau des défaillances DMARC par adresse IP" msgid "No data for the DMARC summary table" msgstr "Pas de données pour le tableau récapitulatif de la DMARC" -#: src/DmarcReportPage.js:258 +#: src/DmarcReportPage.js:259 msgid "No data for the DMARC yearly report graph" msgstr "Pas de données pour le graphique du rapport annuel de la DMARC" -#: src/DmarcReportPage.js:452 +#: src/DmarcReportPage.js:453 msgid "No data for the Fully Aligned by IP Address table" msgstr "Pas de données pour le tableau Entièrement aligné par adresse IP" -#: src/DmarcReportPage.js:520 +#: src/DmarcReportPage.js:521 msgid "No data for the SPF Failures by IP Address table" msgstr "Aucune donnée pour le tableau des défaillances du SPF par adresse IP" @@ -1255,8 +1258,7 @@ msgstr "Octobre" msgid "One or more ciphers in use are not compliant with guidelines" msgstr "Un ou plusieurs chiffres utilisés ne sont pas conformes aux lignes directrices" -#: src/App.js:151 -#: src/OrganizationDetails.js:63 +#: src/OrganizationDetails.js:64 msgid "Organization Details" msgstr "Détails de l'organisation" @@ -1265,7 +1267,7 @@ msgid "Organization:" msgstr "Organisation:" #: src/App.js:66 -#: src/App.js:147 +#: src/App.js:154 #: src/Organizations.js:62 #: src/Organizations.js:97 msgid "Organizations" @@ -1368,17 +1370,17 @@ msgstr "Taille de la page :" msgid "Page {0} of {1}" msgstr "Page {0} de {1}" -#: src/DmarcReportPage.js:208 +#: src/DmarcReportPage.js:209 #: src/fixtures/summaryListData.js:155 msgid "Pass" msgstr "Passez" -#: src/DmarcReportPage.js:220 +#: src/DmarcReportPage.js:221 #: src/fixtures/summaryListData.js:165 msgid "Pass Only DKIM" msgstr "Passez seulement DKIM" -#: src/DmarcReportPage.js:214 +#: src/DmarcReportPage.js:215 #: src/fixtures/summaryListData.js:161 msgid "Pass Only SPF" msgstr "Passez seulement SPF" @@ -1483,7 +1485,7 @@ msgstr "préalpha" msgid "Previous" msgstr "Précédent" -#: src/App.js:207 +#: src/App.js:221 #: src/FloatingMenu.js:175 msgid "Privacy" msgstr "Confidentialité" @@ -1560,7 +1562,7 @@ msgstr "" msgid "Remove Domain" msgstr "Supprimer un domaine" -#: src/App.js:225 +#: src/App.js:239 msgid "Report an Issue" msgstr "Signaler un problème" @@ -1568,7 +1570,7 @@ msgstr "Signaler un problème" msgid "Request a domain to be scanned:" msgstr "Demander qu'un domaine soit scanné:" -#: src/App.js:144 +#: src/App.js:151 msgid "Reset Password" msgstr "Réinitialiser le mot de passe" @@ -1614,24 +1616,24 @@ msgstr "" msgid "SP-reject" msgstr "" -#: src/DmarcReportPage.js:299 +#: src/DmarcReportPage.js:300 msgid "SPF Aligned" msgstr "Alignement du SPF" -#: src/DmarcReportPage.js:289 +#: src/DmarcReportPage.js:290 msgid "SPF Domains" msgstr "Domaine SPF" -#: src/DmarcReportPage.js:464 +#: src/DmarcReportPage.js:465 msgid "SPF Failure Table" msgstr "Tableau des échecs du SPF" -#: src/DmarcReportPage.js:475 -#: src/DmarcReportPage.js:505 +#: src/DmarcReportPage.js:476 +#: src/DmarcReportPage.js:506 msgid "SPF Failures by IP Address" msgstr "Défaillances du SPF par adresse IP" -#: src/DmarcReportPage.js:303 +#: src/DmarcReportPage.js:304 msgid "SPF Results" msgstr "Résultats du SPF" @@ -1768,12 +1770,12 @@ msgid "Show {pageSize}" msgstr "Voir {pageSize}" #: src/DmarcByDomainPage.js:231 -#: src/DmarcReportPage.js:627 +#: src/DmarcReportPage.js:628 msgid "Showing data for period:" msgstr "Affichage des données pour la période :" #: src/App.js:114 -#: src/App.js:131 +#: src/App.js:134 #: src/FloatingMenu.js:158 #: src/SignInPage.js:153 msgid "Sign In" @@ -1807,7 +1809,7 @@ msgstr "Passer au contenu principal" msgid "Sort by:" msgstr "Trier par:" -#: src/DmarcReportPage.js:264 +#: src/DmarcReportPage.js:265 msgid "Source IP Address" msgstr "Adresse IP source" @@ -1816,7 +1818,7 @@ msgstr "Adresse IP source" msgid "Submit" msgstr "Soumettre" -#: src/OrganizationDetails.js:88 +#: src/OrganizationDetails.js:89 msgid "Summary" msgstr "Résumé" @@ -1840,7 +1842,7 @@ msgstr "" msgid "TXT-DMARC-missing" msgstr "" -#: src/App.js:218 +#: src/App.js:232 #: src/FloatingMenu.js:185 msgid "Terms & conditions" msgstr "Avis" @@ -1866,7 +1868,7 @@ msgid "This service is being developed in the open" msgstr "Ce service est développé de façon ouverte" #: src/DmarcByDomainPage.js:88 -#: src/DmarcReportPage.js:282 +#: src/DmarcReportPage.js:283 msgid "Total Messages" msgstr "Total des messages" @@ -1879,8 +1881,8 @@ msgid "Track Digital Security" msgstr "" #: src/Page.js:8 -msgid "Tracker" -msgstr "Suivi" +#~ msgid "Tracker" +#~ msgstr "Suivi" #: src/TopBanner.js:36 msgid "Tracker Logo" @@ -2005,7 +2007,7 @@ msgstr "Liste des utilisateurs" msgid "User invited" msgstr "Utilisateur invité" -#: src/OrganizationDetails.js:94 +#: src/OrganizationDetails.js:95 msgid "Users" msgstr "Utilisateurs" @@ -2087,7 +2089,7 @@ msgstr "Veuillez choisir votre langue préférée" msgid "Welcome, you are successfully signed in!" msgstr "Bienvenue, vous êtes connecté avec succès!" -#: src/DmarcReportPage.js:194 +#: src/DmarcReportPage.js:195 msgid "Yearly DMARC Graph" msgstr "Graphique annuel du DMARC" @@ -2136,7 +2138,7 @@ msgstr "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe" msgid "Your 2FA app will then have a valid code that you can use when you sign in." msgstr "Votre application 2FA disposera alors d'un code valide que vous pourrez utiliser lorsque vous vous connecterez." -#: src/App.js:181 +#: src/App.js:196 msgid "Your Account" msgstr "Votre compte" @@ -2236,6 +2238,6 @@ msgstr "{count} enregistrements..." msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}" msgstr "{editingDomainUrl} de {orgSlug} mis à jour avec succès à {0}" -#: src/OrganizationDetails.js:79 +#: src/OrganizationDetails.js:80 msgid "{orgName}" msgstr "" From 68811847b2357a1b25972abb7727463b0a1eb435 Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Mon, 29 Mar 2021 09:30:15 -0300 Subject: [PATCH 14/15] Re-impose ' - Tracker' format --- frontend/src/DmarcGuidancePage.js | 2 +- frontend/src/DmarcReportPage.js | 2 +- frontend/src/OrganizationDetails.js | 2 +- frontend/src/useDocumentTitle.js | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/DmarcGuidancePage.js b/frontend/src/DmarcGuidancePage.js index 6d1ad63153..5ee481926a 100644 --- a/frontend/src/DmarcGuidancePage.js +++ b/frontend/src/DmarcGuidancePage.js @@ -15,7 +15,7 @@ export default function DmarcGuidancePage() { const { currentUser } = useUserState() const { domainSlug } = useParams() - useDocumentTitle(`Tracker | ${domainSlug}`) + useDocumentTitle(`${domainSlug}`) const { loading, error, data } = useQuery(GET_GUIDANCE_TAGS_OF_DOMAIN, { context: { diff --git a/frontend/src/DmarcReportPage.js b/frontend/src/DmarcReportPage.js index dcda813436..7e4874d480 100644 --- a/frontend/src/DmarcReportPage.js +++ b/frontend/src/DmarcReportPage.js @@ -36,7 +36,7 @@ export default function DmarcReportPage({ summaryListResponsiveWidth }) { const history = useHistory() const { i18n } = useLingui() - useDocumentTitle(t`DMARC Report | ${domainSlug}`) + useDocumentTitle(t`DMARC Report for ${domainSlug}`) const currentDate = new Date() const [selectedPeriod, setSelectedPeriod] = useState(period) diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index ade6226e66..a8c170cd3d 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -31,7 +31,7 @@ export default function OrganizationDetails() { const toast = useToast() const history = useHistory() - useDocumentTitle(`Tracker | ${orgSlug}`) + useDocumentTitle(`${orgSlug}`) const { loading, _error, data } = useQuery(ORG_DETAILS_PAGE, { variables: { slug: orgSlug }, diff --git a/frontend/src/useDocumentTitle.js b/frontend/src/useDocumentTitle.js index 6b130340c3..a4afc47cfe 100644 --- a/frontend/src/useDocumentTitle.js +++ b/frontend/src/useDocumentTitle.js @@ -1,7 +1,8 @@ import { useEffect } from 'react' +import { t } from '@lingui/macro' export const useDocumentTitle = (title, setTitle = true) => { useEffect(() => { - if (setTitle) document.title = title || 'Tracker' + if (setTitle) document.title = t`${title} - Tracker` || 'Tracker' }) } From 79df782e25b2d1ee5bd244e4dc3a6e7b347d4fbd Mon Sep 17 00:00:00 2001 From: Thomas Nickerson <64759920+ThomasNickerson@users.noreply.github.com> Date: Mon, 29 Mar 2021 09:30:33 -0300 Subject: [PATCH 15/15] Update locales --- frontend/src/locales/en.js | 671 ++++++++++++++++++++++++++++++++++++- frontend/src/locales/en.po | 16 +- frontend/src/locales/fr.js | 12 +- frontend/src/locales/fr.po | 12 +- 4 files changed, 699 insertions(+), 12 deletions(-) diff --git a/frontend/src/locales/en.js b/frontend/src/locales/en.js index f55a1c4ac5..f3fa77b511 100644 --- a/frontend/src/locales/en.js +++ b/frontend/src/locales/en.js @@ -1 +1,670 @@ -/*eslint-disable*/module.exports={messages:{"3.2.2 Third Parties and DKIM":"3.2.2 Third Parties and DKIM","404 - Page Not Found":"404 - Page Not Found","A-all":"A-all","A.2.3 Deploy Initial DMARC record":"A.2.3 Deploy Initial DMARC record","A.3.3 Deploy SPF for All Domains":"A.3.3 Deploy SPF for All Domains","A.3.4 Deploy DKIM for All Domains and Senders":"A.3.4 Deploy DKIM for All Domains and Senders","A.3.5 Monitor DMARC Reports and Correct Misconfigurations":"A.3.5 Monitor DMARC Reports and Correct Misconfigurations","A.4 Enforce":"A.4 Enforce","A.5 Maintain":"A.5 Maintain","A.5.3 Rotate DKIM Keys":"A.5.3 Rotate DKIM Keys","ADMIN":"ADMIN","ALL-allow":"ALL-allow","ALL-hardfail":"ALL-hardfail","ALL-missing":"ALL-missing","ALL-neutral":"ALL-neutral","ALL-redirect":"ALL-redirect","ALL-softfail":"ALL-softfail","Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01":"Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01","Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01":"Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01","Account Settings":"Account Settings","Account created.":"Account created.","Acronym":"Acronym","Add Domain":"Add Domain","Add a domain":"Add a domain","Admin":"Admin","Admin Portal":"Admin Portal","Admin Profile":"Admin Profile","An email was sent with a link to reset your password":"An email was sent with a link to reset your password","An error has occurred.":"An error has occurred.","An error occurred while updating your TFA send method.":"An error occurred while updating your TFA send method.","An error occurred while updating your display name.":"An error occurred while updating your display name.","An error occurred while updating your email address.":"An error occurred while updating your email address.","An error occurred while updating your language.":"An error occurred while updating your language.","An error occurred while updating your password.":"An error occurred while updating your password.","An error occurred while updating your phone number.":"An error occurred while updating your phone number.","An error occurred while verifying your phone number.":"An error occurred while verifying your phone number.","An error occurred.":"An error occurred.","Apply":"Apply","April":"April","As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.":"As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.","August":"August","Authenticate":"Authenticate","Authentication QR Code":"Authentication QR Code","B.1.1 SPF Records":"B.1.1 SPF Records","B.1.3 DNS Lookup Limit":"B.1.3 DNS Lookup Limit","B.2.1 DKIM Records":"B.2.1 DKIM Records","B.2.2 Cryptographic Considerations":"B.2.2 Cryptographic Considerations","B.3.1 DMARC Records":"B.3.1 DMARC Records","Back":"Back","Based in:":"Based in:","CCCS added to Aggregate sender list":"CCCS added to Aggregate sender list","CCCS added to Forensic sender list":"CCCS added to Forensic sender list","CNAME-DMARC":"CNAME-DMARC","Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.":"Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.","Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.":"Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.","Certificate chain signed using SHA-256/SHA-384/AEAD":"Certificate chain signed using SHA-256/SHA-384/AEAD","Change Password":"Change Password","Changed TFA Send Method":"Changed TFA Send Method","Changed User Display Name":"Changed User Display Name","Changed User Email":"Changed User Email","Changed User Language":"Changed User Language","Changed User Password":"Changed User Password","Changed User Phone Number":"Changed User Phone Number","Changes Required for ITPIN Compliance":"Changes Required for ITPIN Compliance","Close":"Close","Code field must not be empty":"Code field must not be empty","Compliant TLS":"Compliant TLS","Confirm":"Confirm","Confirm New Password:":"Confirm New Password:","Confirm Password:":"Confirm Password:","Confirm password":"Confirm password","Confirm removal of domain:":"Confirm removal of domain:","Contact 3rd party":"Contact 3rd party","Create Account":"Create Account","Create an Account":"Create an Account","Create an account by entering an email and password.":"Create an account by entering an email and password.","Current Display Name:":"Current Display Name:","Current Domain URL:":"Current Domain URL:","Current Email:":"Current Email:","Current Password:":"Current Password:","Current Phone Number:":"Current Phone Number:","DKIM Aligned":"DKIM Aligned","DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.":"DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.","DKIM Domains":"DKIM Domains","DKIM Failure Table":"DKIM Failure Table","DKIM Failures by IP Address":"DKIM Failures by IP Address","DKIM Flag t":"DKIM Flag t","DKIM Results":"DKIM Results","DKIM Selectors":"DKIM Selectors","DKIM Status":"DKIM Status","DKIM TXT record invalid":"DKIM TXT record invalid","DKIM key does not use RSA":"DKIM key does not use RSA","DKIM record missing but MX uses O365. Follow cloud-specific guidance":"DKIM record missing but MX uses O365. Follow cloud-specific guidance","DKIM-GC":"DKIM-GC","DKIM-invalid-crypto":"DKIM-invalid-crypto","DKIM-missing":"DKIM-missing","DKIM-missing-O365-misconfigured":"DKIM-missing-O365-misconfigured","DKIM-missing-mx-O365":"DKIM-missing-mx-O365","DKIM-value-invalid":"DKIM-value-invalid","DMARC Failure Table":"DMARC Failure Table","DMARC Failures by IP Address":"DMARC Failures by IP Address","DMARC Implementation Phase: {0}":["DMARC Implementation Phase: ",["0"]],"DMARC Implementation Phase: {status}":["DMARC Implementation Phase: ",["status"]],"DMARC Messages":"DMARC Messages","DMARC Not Implemented":"DMARC Not Implemented","DMARC Report":"DMARC Report","DMARC Status":"DMARC Status","DMARC fail":"DMARC fail","DMARC pass":"DMARC pass","DMARC-GC":"DMARC-GC","DMARC-missing":"DMARC-missing","DNS Host":"DNS Host","December":"December","Display Name":"Display Name","Display Name:":"Display Name:","Display name cannot be empty":"Display name cannot be empty","Disposition":"Disposition","Domain":"Domain","Domain DMARC Report":"Domain DMARC Report","Domain Details":"Domain Details","Domain List":"Domain List","Domain URL":"Domain URL","Domain URL:":"Domain URL:","Domain added":"Domain added","Domain defaults to HTTPS, but eventually redirects to HTTP":"Domain defaults to HTTPS, but eventually redirects to HTTP","Domain does not default to HTTPS":"Domain does not default to HTTPS","Domain does not enforce HTTPS":"Domain does not enforce HTTPS","Domain not pre-loaded by HSTS":"Domain not pre-loaded by HSTS","Domain not pre-loaded by HSTS, but is pre-load ready":"Domain not pre-loaded by HSTS, but is pre-load ready","Domain removed":"Domain removed","Domain removed from {orgSlug}":["Domain removed from ",["orgSlug"]],"Domain updated":"Domain updated","Domain url field must not be empty":"Domain url field must not be empty","Domain uses potentially-outsourced DMARC service":"Domain uses potentially-outsourced DMARC service","Domain:":"Domain:","Domains":"Domains","Domains Table":"Domains Table","Edit":"Edit","Edit Display Name":"Edit Display Name","Edit Domain Details":"Edit Domain Details","Edit Email":"Edit Email","Email":"Email","Email Configuration":"Email Configuration","Email Scan Results":"Email Scan Results","Email Sent":"Email Sent","Email Validated":"Email Validated","Email cannot be empty":"Email cannot be empty","Email invitation sent to {addedUserName}":["Email invitation sent to ",["addedUserName"]],"Email security settings summary":"Email security settings summary","Email:":"Email:","Enter and confirm your new password below:":"Enter and confirm your new password below:","Enter and confirm your new password.":"Enter and confirm your new password.","Enter two factor code":"Enter two factor code","Enter your user account's verified email address and we will send you a password reset link.":"Enter your user account's verified email address and we will send you a password reset link.","Envelope From":"Envelope From","Fail":"Fail","Fail DKIM %":"Fail DKIM %","Fail SPF %":"Fail SPF %","February":"February","Follow implementation guide":"Follow implementation guide","For in-depth CCCS implementation guidance:":"For in-depth CCCS implementation guidance:","For technical implementation guidance:":"For technical implementation guidance:","Forgot Password":"Forgot Password","Forgot your password?":"Forgot your password?","Full Fail %":"Full Fail %","Full Pass %":"Full Pass %","Fully Aligned Table":"Fully Aligned Table","Fully Aligned by IP Address":"Fully Aligned by IP Address","Go to page:":"Go to page:","Government of Canada domains subject to TBS guidelines":"Government of Canada domains subject to TBS guidelines","Guidance":"Guidance","Guidance Tags":"Guidance Tags","Guidance:":"Guidance:","HSTS Age:":"HSTS Age:","HSTS Status:":"HSTS Status:","HSTS-missing":"HSTS-missing","HSTS-not-preloaded":"HSTS-not-preloaded","HSTS-preload-ready":"HSTS-preload-ready","HSTS-short-age":"HSTS-short-age","HTTP Strict Transport Security (HSTS) not implemented":"HTTP Strict Transport Security (HSTS) not implemented","HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year":"HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year","HTTPS Status":"HTTPS Status","HTTPS certificate chain is invalid":"HTTPS certificate chain is invalid","HTTPS certificate is expired":"HTTPS certificate is expired","HTTPS certificate is self-signed":"HTTPS certificate is self-signed","HTTPS endpoint failed hostname validation":"HTTPS endpoint failed hostname validation","HTTPS-GC":"HTTPS-GC","HTTPS-bad-chain":"HTTPS-bad-chain","HTTPS-bad-hostname":"HTTPS-bad-hostname","HTTPS-certificate-expired":"HTTPS-certificate-expired","HTTPS-certificate-self-signed":"HTTPS-certificate-self-signed","HTTPS-downgraded":"HTTPS-downgraded","HTTPS-missing":"HTTPS-missing","HTTPS-moderately-enforced":"HTTPS-moderately-enforced","HTTPS-not-enforced":"HTTPS-not-enforced","HTTPS-weakly-enforced":"HTTPS-weakly-enforced","Header From":"Header From","Home":"Home","INCLUDE-limit":"INCLUDE-limit","IT PIN":"IT PIN","IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.":"IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.","ITPIN Compliant":"ITPIN Compliant","Implementation Status:":"Implementation Status:","Incorrect authenticate.result typename.":"Incorrect authenticate.result typename.","Incorrect createDomain.result typename.":"Incorrect createDomain.result typename.","Incorrect inviteUserToOrg.result typename.":"Incorrect inviteUserToOrg.result typename.","Incorrect removeDomain.result typename.":"Incorrect removeDomain.result typename.","Incorrect resetPassword.result typename.":"Incorrect resetPassword.result typename.","Incorrect send method received.":"Incorrect send method received.","Incorrect setPhoneNumber.result typename.":"Incorrect setPhoneNumber.result typename.","Incorrect signIn.result typename.":"Incorrect signIn.result typename.","Incorrect signUp.result typename.":"Incorrect signUp.result typename.","Incorrect updateDomain.result typename.":"Incorrect updateDomain.result typename.","Incorrect updateUserPassword.result typename.":"Incorrect updateUserPassword.result typename.","Incorrect updateUserProfile.result typename.":"Incorrect updateUserProfile.result typename.","Incorrect updateUserRole.result typename.":"Incorrect updateUserRole.result typename.","Incorrect verifyPhoneNumber.result typename.":"Incorrect verifyPhoneNumber.result typename.","Internet facing services":"Internet facing services","Internet facing services: {domainCount}":["Internet facing services: ",["domainCount"]],"Invalid email":"Invalid email","Invalid percent":"Invalid percent","Invalid public key":"Invalid public key","Invite User":"Invite User","Invite a user":"Invite a user","January":"January","July":"July","June":"June","L-30-D":"L-30-D","Language:":"Language:","Last 30 Days":"Last 30 Days","Last Scanned":"Last Scanned","Last scanned:":"Last scanned:","Level of Enforcment:":"Level of Enforcment:","Loading {children}...":["Loading ",["children"],"..."],"Loading...":"Loading...","Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.","Maintain deployment":"Maintain deployment","March":"March","May":"May","Menu":"Menu","Missing from guide- need v1.1":"Missing from guide- need v1.1","More than 10 lookups - Follow implementation guide":"More than 10 lookups - Follow implementation guide","Name":"Name","New Display Name:":"New Display Name:","New Domain Url":"New Domain Url","New Domain Url:":"New Domain Url:","New Email Address:":"New Email Address:","New Password:":"New Password:","New Phone Number:":"New Phone Number:","New domain name cannot be empty":"New domain name cannot be empty","Next":"Next","No Domains":"No Domains","No Organizations":"No Organizations","No RUAs defined":"No RUAs defined","No RUFs defined":"No RUFs defined","No Users":"No Users","No current phone number":"No current phone number","No data for the DKIM Failures by IP Address table":"No data for the DKIM Failures by IP Address table","No data for the DMARC Failures by IP Address table":"No data for the DMARC Failures by IP Address table","No data for the DMARC summary table":"No data for the DMARC summary table","No data for the DMARC yearly report graph":"No data for the DMARC yearly report graph","No data for the Fully Aligned by IP Address table":"No data for the Fully Aligned by IP Address table","No data for the SPF Failures by IP Address table":"No data for the SPF Failures by IP Address table","No domains scanned yet.":"No domains scanned yet.","No scan data for this organization.":"No scan data for this organization.","No users in this organization":"No users in this organization","Non-compliant TLS":"Non-compliant TLS","None":"None","Not scanned yet.":"Not scanned yet.","November":"November","October":"October","One or more ciphers in use are not compliant with guidelines":"One or more ciphers in use are not compliant with guidelines","Organization Details":"Organization Details","Organization:":"Organization:","Organizations":"Organizations","Owner has not configured Aggregate reporting.":"Owner has not configured Aggregate reporting.","Owner has not configured Forensic reporting. Missing from guide- need v1.1":"Owner has not configured Forensic reporting. Missing from guide- need v1.1","P":"P","P-1024":"P-1024","P-2048":"P-2048","P-4096":"P-4096","P-invalid":"P-invalid","P-missing":"P-missing","P-none":"P-none","P-quarantine":"P-quarantine","P-reject":"P-reject","P-sub1024":"P-sub1024","P-update-recommended":"P-update-recommended","PCT":"PCT","PCT should be 100, or not included, if p=none":"PCT should be 100, or not included, if p=none","PCT-0":"PCT-0","PCT-100":"PCT-100","PCT-invalid":"PCT-invalid","PCT-none-exists":"PCT-none-exists","PCT-xx":"PCT-xx","Page":"Page","Page Size:":"Page Size:","Page {0} of {1}":["Page ",["0"]," of ",["1"]],"Pass":"Pass","Pass Only DKIM":"Pass Only DKIM","Pass Only SPF":"Pass Only SPF","Pass/Fail Ratios by Domain":"Pass/Fail Ratios by Domain","Password":"Password","Password Updated":"Password Updated","Password cannot be empty":"Password cannot be empty","Password confirmation cannot be empty":"Password confirmation cannot be empty","Password must be at least 12 characters long":"Password must be at least 12 characters long","Password:":"Password:","Passwords must match":"Passwords must match","Phone":"Phone","Phone Number":"Phone Number","Phone Number:":"Phone Number:","Phone Validated":"Phone Validated","Phone number field must not be empty":"Phone number field must not be empty","Phone number must be a valid phone number of the form +17895551234 (10-15 digits)":"Phone number must be a valid phone number of the form +17895551234 (10-15 digits)","Please choose your preferred language":"Please choose your preferred language","Please enter your current password.":"Please enter your current password.","Please enter your two factor code below.":"Please enter your two factor code below.","Policy applies to all of mailflow":"Policy applies to all of mailflow","Policy applies to no part of mailflow - irregular config":"Policy applies to no part of mailflow - irregular config","Policy applies to percentage of mailflow":"Policy applies to percentage of mailflow","Pre-Alpha":"Pre-Alpha","Preloaded Status:":"Preloaded Status:","Previous":"Previous","Privacy":"Privacy","Properly configured!":"Properly configured!","Public key RSA and key length 1024":"Public key RSA and key length 1024","Public key RSA and key length 2048":"Public key RSA and key length 2048","Public key RSA and key length 4096 or higher":"Public key RSA and key length 4096 or higher","Public key RSA and key length <1024":"Public key RSA and key length <1024","Public key in use for longer than 1 year":"Public key in use for longer than 1 year","QR Code":"QR Code","RFC 4.6.4. DNS Lookup Limits":"RFC 4.6.4. DNS Lookup Limits","RFC 6.1. redirect: Redirected Query":"RFC 6.1. redirect: Redirected Query","RFC 6.3. General Record Format":"RFC 6.3. General Record Format","RFC 7.1. Verifying External Destinations":"RFC 7.1. Verifying External Destinations","RUA":"RUA","RUA-CCCS":"RUA-CCCS","RUA-none":"RUA-none","RUF":"RUF","RUF-CCCS":"RUF-CCCS","RUF-none":"RUF-none","Remove Domain":"Remove Domain","Report an Issue":"Report an Issue","Request a domain to be scanned:":"Request a domain to be scanned:","Reset Password":"Reset Password","Result:":"Result:","Results for scans of email technologies (DMARC, SPF, DKIM).":"Results for scans of email technologies (DMARC, SPF, DKIM).","Results for scans of web technologies (SSL, HTTPS).":"Results for scans of web technologies (SSL, HTTPS).","Role updated":"Role updated","Role:":"Role:","SP":"SP","SP-missing":"SP-missing","SP-none":"SP-none","SP-quarantine":"SP-quarantine","SP-reject":"SP-reject","SPF Aligned":"SPF Aligned","SPF Domains":"SPF Domains","SPF Failure Table":"SPF Failure Table","SPF Failures by IP Address":"SPF Failures by IP Address","SPF Results":"SPF Results","SPF Status":"SPF Status","SPF implemented in incorrect subdomain":"SPF implemented in incorrect subdomain","SPF-GC":"SPF-GC","SPF-bad-path":"SPF-bad-path","SPF-missing":"SPF-missing","SSL Status":"SSL Status","SSL-3des":"SSL-3des","SSL-GC":"SSL-GC","SSL-acceptable-certificate":"SSL-acceptable-certificate","SSL-invalid-cipher":"SSL-invalid-cipher","SSL-missing":"SSL-missing","SSL-rc4":"SSL-rc4","SUPER_ADMIN":"SUPER_ADMIN","Save Language":"Save Language","Save TFA Method":"Save TFA Method","Scan":"Scan","Scan Domain":"Scan Domain","Scan Request":"Scan Request","Scan of domain successfully requested":"Scan of domain successfully requested","Scan this QR code with a 2FA app like Authy or Google Authenticator":"Scan this QR code with a 2FA app like Authy or Google Authenticator","Search":"Search","Search for a domain":"Search for a domain","Search for a user":"Search for a user","Search for an organization":"Search for an organization","Search for any Government of Canada tracked domain:":"Search for any Government of Canada tracked domain:","Search:":"Search:","Select Preferred Language":"Select Preferred Language","Select an organization":"Select an organization","Select an organization to view admin options":"Select an organization to view admin options","September":"September","Services":"Services","Services: {domainCount}":["Services: ",["domainCount"]],"Show {pageSize}":["Show ",["pageSize"]],"Showing data for period:":"Showing data for period:","Sign In":"Sign In","Sign In.":"Sign In.","Sign Out":"Sign Out","Sign Out.":"Sign Out.","Sign in with your username and password.":"Sign in with your username and password.","Skip to main content":"Skip to main content","Sort by:":"Sort by:","Source IP Address":"Source IP Address","Submit":"Submit","Summary":"Summary","T-enabled":"T-enabled","TBD":"TBD","TFA Method:":"TFA Method:","TXT-DMARC-enabled":"TXT-DMARC-enabled","TXT-DMARC-missing":"TXT-DMARC-missing","Terms & conditions":"Terms & conditions","Textual Representation":"Textual Representation","The page you are looking for has moved or does not exist.":"The page you are looking for has moved or does not exist.","The user's role has been successfully updated":"The user's role has been successfully updated","This component is currently unavailable. Try reloading the page.":"This component is currently unavailable. Try reloading the page.","This service is being developed in the open":"This service is being developed in the open","Total Messages":"Total Messages","Total users":"Total users","Track Digital Security":"Track Digital Security","Tracker":"Tracker","Tracker Logo":"Tracker Logo","Two Factor Authentication":"Two Factor Authentication","USER":"USER","Unable to change user role, please try again.":"Unable to change user role, please try again.","Unable to create account, please try again.":"Unable to create account, please try again.","Unable to create new domain.":"Unable to create new domain.","Unable to create your account, please try again.":"Unable to create your account, please try again.","Unable to invite user.":"Unable to invite user.","Unable to remove domain.":"Unable to remove domain.","Unable to request scan, please try again.":"Unable to request scan, please try again.","Unable to reset your password, please try again.":"Unable to reset your password, please try again.","Unable to send password reset link to email.":"Unable to send password reset link to email.","Unable to sign in to your account, please try again.":"Unable to sign in to your account, please try again.","Unable to update domain.":"Unable to update domain.","Unable to update password":"Unable to update password","Unable to update to your TFA send method, please try again.":"Unable to update to your TFA send method, please try again.","Unable to update to your display name, please try again.":"Unable to update to your display name, please try again.","Unable to update to your phone number, please try again.":"Unable to update to your phone number, please try again.","Unable to update to your preferred language, please try again.":"Unable to update to your preferred language, please try again.","Unable to update to your username, please try again.":"Unable to update to your username, please try again.","Unable to update user role.":"Unable to update user role.","Unable to update your password, please try again.":"Unable to update your password, please try again.","Unable to update your phone number, please try again.":"Unable to update your phone number, please try again.","Unable to verify your phone number, please try again.":"Unable to verify your phone number, please try again.","Use DKIM to validate outbound email sent from your custom domain":"Use DKIM to validate outbound email sent from your custom domain","User Affiliations":"User Affiliations","User List":"User List","User Profile":"User Profile","User invited":"User invited","Users":"Users","Uses redirect tag with All":"Uses redirect tag with All","Verification TXT records for all 3rd party senders exist":"Verification TXT records for all 3rd party senders exist","Verification TXT records for some/all 3rd party senders missing":"Verification TXT records for some/all 3rd party senders missing","Verification code must only contains numbers":"Verification code must only contains numbers","Verified":"Verified","Verify":"Verify","Vulnerability-ccs-injection":"Vulnerability-ccs-injection","Vulnerability-heartbleed":"Vulnerability-heartbleed","Vulnerable to Heartbleed bug":"Vulnerable to Heartbleed bug","Vulnerable to OpenSSL CCS Injection":"Vulnerable to OpenSSL CCS Injection","We've sent an SMS to your new phone number with an authentication code to confirm this change.":"We've sent an SMS to your new phone number with an authentication code to confirm this change.","We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.":"We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.","We've sent you an email with an authentication code to sign into Tracker.":"We've sent you an email with an authentication code to sign into Tracker.","Web Configuration":"Web Configuration","Web Scan Results":"Web Scan Results","Web encryption settings summary":"Web encryption settings summary","Welcome, Admin":"Welcome, Admin","Welcome, you are successfully signed in to your new account!":"Welcome, you are successfully signed in to your new account!","Welcome, you are successfully signed in!":"Welcome, you are successfully signed in!","Yearly DMARC Graph":"Yearly DMARC Graph","You do not have admin permissions in any organization":"You do not have admin permissions in any organization","You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.":"You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.","You have successfully been signed out.":"You have successfully been signed out.","You have successfully updated your TFA send method.":"You have successfully updated your TFA send method.","You have successfully updated your display name.":"You have successfully updated your display name.","You have successfully updated your email.":"You have successfully updated your email.","You have successfully updated your password.":"You have successfully updated your password.","You have successfully updated your phone number.":"You have successfully updated your phone number.","You have successfully updated your preferred language.":"You have successfully updated your preferred language.","You may now sign in with your new password":"You may now sign in with your new password","Your 2FA app will then have a valid code that you can use when you sign in.":"Your 2FA app will then have a valid code that you can use when you sign in.","Your Account":"Your Account","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22","https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31":"https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31","https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide":"https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide","https://tools.ietf.org/html/rfc6376#section-3.6.1":"https://tools.ietf.org/html/rfc6376#section-3.6.1","https://tools.ietf.org/html/rfc7208#section-4.6.4":"https://tools.ietf.org/html/rfc7208#section-4.6.4","https://tools.ietf.org/html/rfc7208#section-6.1":"https://tools.ietf.org/html/rfc7208#section-6.1","https://tools.ietf.org/html/rfc7489#section-6.3":"https://tools.ietf.org/html/rfc7489#section-6.3","https://tools.ietf.org/html/rfc7489#section-7.1":"https://tools.ietf.org/html/rfc7489#section-7.1","of":"of","pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)":"pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)","{0} was added to {orgSlug}":[["0"]," was added to ",["orgSlug"]],"{count} records...":[["count"]," records..."],"{editingDomainUrl} from {orgSlug} successfully updated to {0}":[["editingDomainUrl"]," from ",["orgSlug"]," successfully updated to ",["0"]],"{orgName}":[["orgName"]]}}; \ No newline at end of file +/*eslint-disable*/ module.exports = { + messages: { + '3.2.2 Third Parties and DKIM': '3.2.2 Third Parties and DKIM', + '404 - Page Not Found': '404 - Page Not Found', + 'A-all': 'A-all', + 'A.2.3 Deploy Initial DMARC record': 'A.2.3 Deploy Initial DMARC record', + 'A.3.3 Deploy SPF for All Domains': 'A.3.3 Deploy SPF for All Domains', + 'A.3.4 Deploy DKIM for All Domains and Senders': + 'A.3.4 Deploy DKIM for All Domains and Senders', + 'A.3.5 Monitor DMARC Reports and Correct Misconfigurations': + 'A.3.5 Monitor DMARC Reports and Correct Misconfigurations', + 'A.4 Enforce': 'A.4 Enforce', + 'A.5 Maintain': 'A.5 Maintain', + 'A.5.3 Rotate DKIM Keys': 'A.5.3 Rotate DKIM Keys', + ADMIN: 'ADMIN', + 'ALL-allow': 'ALL-allow', + 'ALL-hardfail': 'ALL-hardfail', + 'ALL-missing': 'ALL-missing', + 'ALL-neutral': 'ALL-neutral', + 'ALL-redirect': 'ALL-redirect', + 'ALL-softfail': 'ALL-softfail', + 'Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01': + 'Accepted cipher list contains 3DES symmetric-key block cipher, as prohibited by BOD 18-01', + 'Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01': + 'Accepted cipher list contains RC4 stream cipher, as prohibited by BOD 18-01', + 'Account Settings': 'Account Settings', + 'Account created.': 'Account created.', + Acronym: 'Acronym', + 'Add Domain': 'Add Domain', + 'Add a domain': 'Add a domain', + Admin: 'Admin', + 'Admin Portal': 'Admin Portal', + 'Admin Profile': 'Admin Profile', + 'An email was sent with a link to reset your password': + 'An email was sent with a link to reset your password', + 'An error has occurred.': 'An error has occurred.', + 'An error occurred while updating your TFA send method.': + 'An error occurred while updating your TFA send method.', + 'An error occurred while updating your display name.': + 'An error occurred while updating your display name.', + 'An error occurred while updating your email address.': + 'An error occurred while updating your email address.', + 'An error occurred while updating your language.': + 'An error occurred while updating your language.', + 'An error occurred while updating your password.': + 'An error occurred while updating your password.', + 'An error occurred while updating your phone number.': + 'An error occurred while updating your phone number.', + 'An error occurred while verifying your phone number.': + 'An error occurred while verifying your phone number.', + 'An error occurred.': 'An error occurred.', + Apply: 'Apply', + April: 'April', + 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.': + 'As per RFC section 3.6.1, Testing flag t=y means Verifiers MUST treat messages as unsigned (i.e. DKIM is not enabled), so this flag should not be enabled.', + August: 'August', + Authenticate: 'Authenticate', + 'Authentication QR Code': 'Authentication QR Code', + 'B.1.1 SPF Records': 'B.1.1 SPF Records', + 'B.1.3 DNS Lookup Limit': 'B.1.3 DNS Lookup Limit', + 'B.2.1 DKIM Records': 'B.2.1 DKIM Records', + 'B.2.2 Cryptographic Considerations': 'B.2.2 Cryptographic Considerations', + 'B.3.1 DMARC Records': 'B.3.1 DMARC Records', + Back: 'Back', + 'Based in:': 'Based in:', + 'CCCS added to Aggregate sender list': + 'CCCS added to Aggregate sender list', + 'CCCS added to Forensic sender list': 'CCCS added to Forensic sender list', + 'CNAME-DMARC': 'CNAME-DMARC', + 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.': + 'Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for email and web services. Track how government sites are becoming more secure.', + 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.': + 'Canonical HTTPS endpoint internally redirects to HTTP. Follow guidance.', + 'Certificate chain signed using SHA-256/SHA-384/AEAD': + 'Certificate chain signed using SHA-256/SHA-384/AEAD', + 'Change Password': 'Change Password', + 'Changed TFA Send Method': 'Changed TFA Send Method', + 'Changed User Display Name': 'Changed User Display Name', + 'Changed User Email': 'Changed User Email', + 'Changed User Language': 'Changed User Language', + 'Changed User Password': 'Changed User Password', + 'Changed User Phone Number': 'Changed User Phone Number', + 'Changes Required for ITPIN Compliance': + 'Changes Required for ITPIN Compliance', + Close: 'Close', + 'Code field must not be empty': 'Code field must not be empty', + 'Compliant TLS': 'Compliant TLS', + Confirm: 'Confirm', + 'Confirm New Password:': 'Confirm New Password:', + 'Confirm Password:': 'Confirm Password:', + 'Confirm password': 'Confirm password', + 'Confirm removal of domain:': 'Confirm removal of domain:', + 'Contact 3rd party': 'Contact 3rd party', + 'Create Account': 'Create Account', + 'Create an Account': 'Create an Account', + 'Create an account by entering an email and password.': + 'Create an account by entering an email and password.', + 'Current Display Name:': 'Current Display Name:', + 'Current Domain URL:': 'Current Domain URL:', + 'Current Email:': 'Current Email:', + 'Current Password:': 'Current Password:', + 'Current Phone Number:': 'Current Phone Number:', + 'DKIM Aligned': 'DKIM Aligned', + 'DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.': + 'DKIM CNAMEs do not exist, but MX points to *.onmicrosoft.com and SPF record includes O365.', + 'DKIM Domains': 'DKIM Domains', + 'DKIM Failure Table': 'DKIM Failure Table', + 'DKIM Failures by IP Address': 'DKIM Failures by IP Address', + 'DKIM Flag t': 'DKIM Flag t', + 'DKIM Results': 'DKIM Results', + 'DKIM Selectors': 'DKIM Selectors', + 'DKIM Status': 'DKIM Status', + 'DKIM TXT record invalid': 'DKIM TXT record invalid', + 'DKIM key does not use RSA': 'DKIM key does not use RSA', + 'DKIM record missing but MX uses O365. Follow cloud-specific guidance': + 'DKIM record missing but MX uses O365. Follow cloud-specific guidance', + 'DKIM-GC': 'DKIM-GC', + 'DKIM-invalid-crypto': 'DKIM-invalid-crypto', + 'DKIM-missing': 'DKIM-missing', + 'DKIM-missing-O365-misconfigured': 'DKIM-missing-O365-misconfigured', + 'DKIM-missing-mx-O365': 'DKIM-missing-mx-O365', + 'DKIM-value-invalid': 'DKIM-value-invalid', + 'DMARC Failure Table': 'DMARC Failure Table', + 'DMARC Failures by IP Address': 'DMARC Failures by IP Address', + 'DMARC Implementation Phase: {0}': ['DMARC Implementation Phase: ', ['0']], + 'DMARC Implementation Phase: {status}': [ + 'DMARC Implementation Phase: ', + ['status'], + ], + 'DMARC Messages': 'DMARC Messages', + 'DMARC Not Implemented': 'DMARC Not Implemented', + 'DMARC Report': 'DMARC Report', + 'DMARC Report for {domainSlug}': ['DMARC Report for ', ['domainSlug']], + 'DMARC Report | {domainSlug}': ['DMARC Report | ', ['domainSlug']], + 'DMARC Status': 'DMARC Status', + 'DMARC fail': 'DMARC fail', + 'DMARC pass': 'DMARC pass', + 'DMARC-GC': 'DMARC-GC', + 'DMARC-missing': 'DMARC-missing', + 'DNS Host': 'DNS Host', + December: 'December', + 'Display Name': 'Display Name', + 'Display Name:': 'Display Name:', + 'Display name cannot be empty': 'Display name cannot be empty', + Disposition: 'Disposition', + Domain: 'Domain', + 'Domain DMARC Report': 'Domain DMARC Report', + 'Domain Details': 'Domain Details', + 'Domain List': 'Domain List', + 'Domain URL': 'Domain URL', + 'Domain URL:': 'Domain URL:', + 'Domain added': 'Domain added', + 'Domain defaults to HTTPS, but eventually redirects to HTTP': + 'Domain defaults to HTTPS, but eventually redirects to HTTP', + 'Domain does not default to HTTPS': 'Domain does not default to HTTPS', + 'Domain does not enforce HTTPS': 'Domain does not enforce HTTPS', + 'Domain not pre-loaded by HSTS': 'Domain not pre-loaded by HSTS', + 'Domain not pre-loaded by HSTS, but is pre-load ready': + 'Domain not pre-loaded by HSTS, but is pre-load ready', + 'Domain removed': 'Domain removed', + 'Domain removed from {orgSlug}': ['Domain removed from ', ['orgSlug']], + 'Domain updated': 'Domain updated', + 'Domain url field must not be empty': 'Domain url field must not be empty', + 'Domain uses potentially-outsourced DMARC service': + 'Domain uses potentially-outsourced DMARC service', + 'Domain:': 'Domain:', + Domains: 'Domains', + 'Domains Table': 'Domains Table', + Edit: 'Edit', + 'Edit Display Name': 'Edit Display Name', + 'Edit Domain Details': 'Edit Domain Details', + 'Edit Email': 'Edit Email', + Email: 'Email', + 'Email Configuration': 'Email Configuration', + 'Email Scan Results': 'Email Scan Results', + 'Email Sent': 'Email Sent', + 'Email Validated': 'Email Validated', + 'Email cannot be empty': 'Email cannot be empty', + 'Email invitation sent to {addedUserName}': [ + 'Email invitation sent to ', + ['addedUserName'], + ], + 'Email security settings summary': 'Email security settings summary', + 'Email:': 'Email:', + 'Enter and confirm your new password below:': + 'Enter and confirm your new password below:', + 'Enter and confirm your new password.': + 'Enter and confirm your new password.', + 'Enter two factor code': 'Enter two factor code', + "Enter your user account's verified email address and we will send you a password reset link.": + "Enter your user account's verified email address and we will send you a password reset link.", + 'Envelope From': 'Envelope From', + Fail: 'Fail', + 'Fail DKIM %': 'Fail DKIM %', + 'Fail SPF %': 'Fail SPF %', + February: 'February', + 'Follow implementation guide': 'Follow implementation guide', + 'For in-depth CCCS implementation guidance:': + 'For in-depth CCCS implementation guidance:', + 'For technical implementation guidance:': + 'For technical implementation guidance:', + 'Forgot Password': 'Forgot Password', + 'Forgot your password?': 'Forgot your password?', + 'Full Fail %': 'Full Fail %', + 'Full Pass %': 'Full Pass %', + 'Fully Aligned Table': 'Fully Aligned Table', + 'Fully Aligned by IP Address': 'Fully Aligned by IP Address', + 'Go to page:': 'Go to page:', + 'Government of Canada domains subject to TBS guidelines': + 'Government of Canada domains subject to TBS guidelines', + Guidance: 'Guidance', + 'Guidance Tags': 'Guidance Tags', + 'Guidance:': 'Guidance:', + 'HSTS Age:': 'HSTS Age:', + 'HSTS Status:': 'HSTS Status:', + 'HSTS-missing': 'HSTS-missing', + 'HSTS-not-preloaded': 'HSTS-not-preloaded', + 'HSTS-preload-ready': 'HSTS-preload-ready', + 'HSTS-short-age': 'HSTS-short-age', + 'HTTP Strict Transport Security (HSTS) not implemented': + 'HTTP Strict Transport Security (HSTS) not implemented', + 'HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year': + 'HTTP Strict Transport Security (HSTS) policy maximum age is shorter than one year', + 'HTTPS Status': 'HTTPS Status', + 'HTTPS certificate chain is invalid': 'HTTPS certificate chain is invalid', + 'HTTPS certificate is expired': 'HTTPS certificate is expired', + 'HTTPS certificate is self-signed': 'HTTPS certificate is self-signed', + 'HTTPS endpoint failed hostname validation': + 'HTTPS endpoint failed hostname validation', + 'HTTPS-GC': 'HTTPS-GC', + 'HTTPS-bad-chain': 'HTTPS-bad-chain', + 'HTTPS-bad-hostname': 'HTTPS-bad-hostname', + 'HTTPS-certificate-expired': 'HTTPS-certificate-expired', + 'HTTPS-certificate-self-signed': 'HTTPS-certificate-self-signed', + 'HTTPS-downgraded': 'HTTPS-downgraded', + 'HTTPS-missing': 'HTTPS-missing', + 'HTTPS-moderately-enforced': 'HTTPS-moderately-enforced', + 'HTTPS-not-enforced': 'HTTPS-not-enforced', + 'HTTPS-weakly-enforced': 'HTTPS-weakly-enforced', + 'Header From': 'Header From', + Home: 'Home', + 'INCLUDE-limit': 'INCLUDE-limit', + 'IT PIN': 'IT PIN', + 'IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.': + 'IT PIN. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.', + 'ITPIN Compliant': 'ITPIN Compliant', + 'Implementation Status:': 'Implementation Status:', + 'Incorrect authenticate.result typename.': + 'Incorrect authenticate.result typename.', + 'Incorrect createDomain.result typename.': + 'Incorrect createDomain.result typename.', + 'Incorrect inviteUserToOrg.result typename.': + 'Incorrect inviteUserToOrg.result typename.', + 'Incorrect removeDomain.result typename.': + 'Incorrect removeDomain.result typename.', + 'Incorrect resetPassword.result typename.': + 'Incorrect resetPassword.result typename.', + 'Incorrect send method received.': 'Incorrect send method received.', + 'Incorrect setPhoneNumber.result typename.': + 'Incorrect setPhoneNumber.result typename.', + 'Incorrect signIn.result typename.': 'Incorrect signIn.result typename.', + 'Incorrect signUp.result typename.': 'Incorrect signUp.result typename.', + 'Incorrect updateDomain.result typename.': + 'Incorrect updateDomain.result typename.', + 'Incorrect updateUserPassword.result typename.': + 'Incorrect updateUserPassword.result typename.', + 'Incorrect updateUserProfile.result typename.': + 'Incorrect updateUserProfile.result typename.', + 'Incorrect updateUserRole.result typename.': + 'Incorrect updateUserRole.result typename.', + 'Incorrect verifyPhoneNumber.result typename.': + 'Incorrect verifyPhoneNumber.result typename.', + 'Internet facing services': 'Internet facing services', + 'Internet facing services: {domainCount}': [ + 'Internet facing services: ', + ['domainCount'], + ], + 'Invalid email': 'Invalid email', + 'Invalid percent': 'Invalid percent', + 'Invalid public key': 'Invalid public key', + 'Invite User': 'Invite User', + 'Invite a user': 'Invite a user', + January: 'January', + July: 'July', + June: 'June', + 'L-30-D': 'L-30-D', + 'Language:': 'Language:', + 'Last 30 Days': 'Last 30 Days', + 'Last Scanned': 'Last Scanned', + 'Last scanned:': 'Last scanned:', + 'Level of Enforcment:': 'Level of Enforcment:', + 'Loading {children}...': ['Loading ', ['children'], '...'], + 'Loading...': 'Loading...', + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ac ante eu sem tincidunt dictum. In hendrerit consectetur tellus, ac.', + 'Maintain deployment': 'Maintain deployment', + March: 'March', + May: 'May', + Menu: 'Menu', + 'Missing from guide- need v1.1': 'Missing from guide- need v1.1', + 'More than 10 lookups - Follow implementation guide': + 'More than 10 lookups - Follow implementation guide', + Name: 'Name', + 'New Display Name:': 'New Display Name:', + 'New Domain Url': 'New Domain Url', + 'New Domain Url:': 'New Domain Url:', + 'New Email Address:': 'New Email Address:', + 'New Password:': 'New Password:', + 'New Phone Number:': 'New Phone Number:', + 'New domain name cannot be empty': 'New domain name cannot be empty', + Next: 'Next', + 'No Domains': 'No Domains', + 'No Organizations': 'No Organizations', + 'No RUAs defined': 'No RUAs defined', + 'No RUFs defined': 'No RUFs defined', + 'No Users': 'No Users', + 'No current phone number': 'No current phone number', + 'No data for the DKIM Failures by IP Address table': + 'No data for the DKIM Failures by IP Address table', + 'No data for the DMARC Failures by IP Address table': + 'No data for the DMARC Failures by IP Address table', + 'No data for the DMARC summary table': + 'No data for the DMARC summary table', + 'No data for the DMARC yearly report graph': + 'No data for the DMARC yearly report graph', + 'No data for the Fully Aligned by IP Address table': + 'No data for the Fully Aligned by IP Address table', + 'No data for the SPF Failures by IP Address table': + 'No data for the SPF Failures by IP Address table', + 'No domains scanned yet.': 'No domains scanned yet.', + 'No scan data for this organization.': + 'No scan data for this organization.', + 'No users in this organization': 'No users in this organization', + 'Non-compliant TLS': 'Non-compliant TLS', + None: 'None', + 'Not scanned yet.': 'Not scanned yet.', + November: 'November', + October: 'October', + 'One or more ciphers in use are not compliant with guidelines': + 'One or more ciphers in use are not compliant with guidelines', + 'Organization Details': 'Organization Details', + 'Organization:': 'Organization:', + Organizations: 'Organizations', + 'Owner has not configured Aggregate reporting.': + 'Owner has not configured Aggregate reporting.', + 'Owner has not configured Forensic reporting. Missing from guide- need v1.1': + 'Owner has not configured Forensic reporting. Missing from guide- need v1.1', + P: 'P', + 'P-1024': 'P-1024', + 'P-2048': 'P-2048', + 'P-4096': 'P-4096', + 'P-invalid': 'P-invalid', + 'P-missing': 'P-missing', + 'P-none': 'P-none', + 'P-quarantine': 'P-quarantine', + 'P-reject': 'P-reject', + 'P-sub1024': 'P-sub1024', + 'P-update-recommended': 'P-update-recommended', + PCT: 'PCT', + 'PCT should be 100, or not included, if p=none': + 'PCT should be 100, or not included, if p=none', + 'PCT-0': 'PCT-0', + 'PCT-100': 'PCT-100', + 'PCT-invalid': 'PCT-invalid', + 'PCT-none-exists': 'PCT-none-exists', + 'PCT-xx': 'PCT-xx', + Page: 'Page', + 'Page Size:': 'Page Size:', + 'Page {0} of {1}': ['Page ', ['0'], ' of ', ['1']], + Pass: 'Pass', + 'Pass Only DKIM': 'Pass Only DKIM', + 'Pass Only SPF': 'Pass Only SPF', + 'Pass/Fail Ratios by Domain': 'Pass/Fail Ratios by Domain', + Password: 'Password', + 'Password Updated': 'Password Updated', + 'Password cannot be empty': 'Password cannot be empty', + 'Password confirmation cannot be empty': + 'Password confirmation cannot be empty', + 'Password must be at least 12 characters long': + 'Password must be at least 12 characters long', + 'Password:': 'Password:', + 'Passwords must match': 'Passwords must match', + Phone: 'Phone', + 'Phone Number': 'Phone Number', + 'Phone Number:': 'Phone Number:', + 'Phone Validated': 'Phone Validated', + 'Phone number field must not be empty': + 'Phone number field must not be empty', + 'Phone number must be a valid phone number of the form +17895551234 (10-15 digits)': + 'Phone number must be a valid phone number of the form +17895551234 (10-15 digits)', + 'Please choose your preferred language': + 'Please choose your preferred language', + 'Please enter your current password.': + 'Please enter your current password.', + 'Please enter your two factor code below.': + 'Please enter your two factor code below.', + 'Policy applies to all of mailflow': 'Policy applies to all of mailflow', + 'Policy applies to no part of mailflow - irregular config': + 'Policy applies to no part of mailflow - irregular config', + 'Policy applies to percentage of mailflow': + 'Policy applies to percentage of mailflow', + 'Pre-Alpha': 'Pre-Alpha', + 'Preloaded Status:': 'Preloaded Status:', + Previous: 'Previous', + Privacy: 'Privacy', + 'Properly configured!': 'Properly configured!', + 'Public key RSA and key length 1024': 'Public key RSA and key length 1024', + 'Public key RSA and key length 2048': 'Public key RSA and key length 2048', + 'Public key RSA and key length 4096 or higher': + 'Public key RSA and key length 4096 or higher', + 'Public key RSA and key length <1024': + 'Public key RSA and key length <1024', + 'Public key in use for longer than 1 year': + 'Public key in use for longer than 1 year', + 'QR Code': 'QR Code', + 'RFC 4.6.4. DNS Lookup Limits': 'RFC 4.6.4. DNS Lookup Limits', + 'RFC 6.1. redirect: Redirected Query': + 'RFC 6.1. redirect: Redirected Query', + 'RFC 6.3. General Record Format': 'RFC 6.3. General Record Format', + 'RFC 7.1. Verifying External Destinations': + 'RFC 7.1. Verifying External Destinations', + RUA: 'RUA', + 'RUA-CCCS': 'RUA-CCCS', + 'RUA-none': 'RUA-none', + RUF: 'RUF', + 'RUF-CCCS': 'RUF-CCCS', + 'RUF-none': 'RUF-none', + 'Remove Domain': 'Remove Domain', + 'Report an Issue': 'Report an Issue', + 'Request a domain to be scanned:': 'Request a domain to be scanned:', + 'Reset Password': 'Reset Password', + 'Result:': 'Result:', + 'Results for scans of email technologies (DMARC, SPF, DKIM).': + 'Results for scans of email technologies (DMARC, SPF, DKIM).', + 'Results for scans of web technologies (SSL, HTTPS).': + 'Results for scans of web technologies (SSL, HTTPS).', + 'Role updated': 'Role updated', + 'Role:': 'Role:', + SP: 'SP', + 'SP-missing': 'SP-missing', + 'SP-none': 'SP-none', + 'SP-quarantine': 'SP-quarantine', + 'SP-reject': 'SP-reject', + 'SPF Aligned': 'SPF Aligned', + 'SPF Domains': 'SPF Domains', + 'SPF Failure Table': 'SPF Failure Table', + 'SPF Failures by IP Address': 'SPF Failures by IP Address', + 'SPF Results': 'SPF Results', + 'SPF Status': 'SPF Status', + 'SPF implemented in incorrect subdomain': + 'SPF implemented in incorrect subdomain', + 'SPF-GC': 'SPF-GC', + 'SPF-bad-path': 'SPF-bad-path', + 'SPF-missing': 'SPF-missing', + 'SSL Status': 'SSL Status', + 'SSL-3des': 'SSL-3des', + 'SSL-GC': 'SSL-GC', + 'SSL-acceptable-certificate': 'SSL-acceptable-certificate', + 'SSL-invalid-cipher': 'SSL-invalid-cipher', + 'SSL-missing': 'SSL-missing', + 'SSL-rc4': 'SSL-rc4', + SUPER_ADMIN: 'SUPER_ADMIN', + 'Save Language': 'Save Language', + 'Save TFA Method': 'Save TFA Method', + Scan: 'Scan', + 'Scan Domain': 'Scan Domain', + 'Scan Request': 'Scan Request', + 'Scan of domain successfully requested': + 'Scan of domain successfully requested', + 'Scan this QR code with a 2FA app like Authy or Google Authenticator': + 'Scan this QR code with a 2FA app like Authy or Google Authenticator', + Search: 'Search', + 'Search for a domain': 'Search for a domain', + 'Search for a user': 'Search for a user', + 'Search for an organization': 'Search for an organization', + 'Search for any Government of Canada tracked domain:': + 'Search for any Government of Canada tracked domain:', + 'Search:': 'Search:', + 'Select Preferred Language': 'Select Preferred Language', + 'Select an organization': 'Select an organization', + 'Select an organization to view admin options': + 'Select an organization to view admin options', + September: 'September', + Services: 'Services', + 'Services: {domainCount}': ['Services: ', ['domainCount']], + 'Show {pageSize}': ['Show ', ['pageSize']], + 'Showing data for period:': 'Showing data for period:', + 'Sign In': 'Sign In', + 'Sign In.': 'Sign In.', + 'Sign Out': 'Sign Out', + 'Sign Out.': 'Sign Out.', + 'Sign in with your username and password.': + 'Sign in with your username and password.', + 'Skip to main content': 'Skip to main content', + 'Sort by:': 'Sort by:', + 'Source IP Address': 'Source IP Address', + Submit: 'Submit', + Summary: 'Summary', + 'T-enabled': 'T-enabled', + TBD: 'TBD', + 'TFA Method:': 'TFA Method:', + 'TXT-DMARC-enabled': 'TXT-DMARC-enabled', + 'TXT-DMARC-missing': 'TXT-DMARC-missing', + 'Terms & conditions': 'Terms & conditions', + 'Textual Representation': 'Textual Representation', + 'The page you are looking for has moved or does not exist.': + 'The page you are looking for has moved or does not exist.', + "The user's role has been successfully updated": + "The user's role has been successfully updated", + 'This component is currently unavailable. Try reloading the page.': + 'This component is currently unavailable. Try reloading the page.', + 'This service is being developed in the open': + 'This service is being developed in the open', + 'Total Messages': 'Total Messages', + 'Total users': 'Total users', + 'Track Digital Security': 'Track Digital Security', + Tracker: 'Tracker', + 'Tracker Logo': 'Tracker Logo', + 'Two Factor Authentication': 'Two Factor Authentication', + USER: 'USER', + 'Unable to change user role, please try again.': + 'Unable to change user role, please try again.', + 'Unable to create account, please try again.': + 'Unable to create account, please try again.', + 'Unable to create new domain.': 'Unable to create new domain.', + 'Unable to create your account, please try again.': + 'Unable to create your account, please try again.', + 'Unable to invite user.': 'Unable to invite user.', + 'Unable to remove domain.': 'Unable to remove domain.', + 'Unable to request scan, please try again.': + 'Unable to request scan, please try again.', + 'Unable to reset your password, please try again.': + 'Unable to reset your password, please try again.', + 'Unable to send password reset link to email.': + 'Unable to send password reset link to email.', + 'Unable to sign in to your account, please try again.': + 'Unable to sign in to your account, please try again.', + 'Unable to update domain.': 'Unable to update domain.', + 'Unable to update password': 'Unable to update password', + 'Unable to update to your TFA send method, please try again.': + 'Unable to update to your TFA send method, please try again.', + 'Unable to update to your display name, please try again.': + 'Unable to update to your display name, please try again.', + 'Unable to update to your phone number, please try again.': + 'Unable to update to your phone number, please try again.', + 'Unable to update to your preferred language, please try again.': + 'Unable to update to your preferred language, please try again.', + 'Unable to update to your username, please try again.': + 'Unable to update to your username, please try again.', + 'Unable to update user role.': 'Unable to update user role.', + 'Unable to update your password, please try again.': + 'Unable to update your password, please try again.', + 'Unable to update your phone number, please try again.': + 'Unable to update your phone number, please try again.', + 'Unable to verify your phone number, please try again.': + 'Unable to verify your phone number, please try again.', + 'Use DKIM to validate outbound email sent from your custom domain': + 'Use DKIM to validate outbound email sent from your custom domain', + 'User Affiliations': 'User Affiliations', + 'User List': 'User List', + 'User Profile': 'User Profile', + 'User invited': 'User invited', + Users: 'Users', + 'Uses redirect tag with All': 'Uses redirect tag with All', + 'Verification TXT records for all 3rd party senders exist': + 'Verification TXT records for all 3rd party senders exist', + 'Verification TXT records for some/all 3rd party senders missing': + 'Verification TXT records for some/all 3rd party senders missing', + 'Verification code must only contains numbers': + 'Verification code must only contains numbers', + Verified: 'Verified', + Verify: 'Verify', + 'Vulnerability-ccs-injection': 'Vulnerability-ccs-injection', + 'Vulnerability-heartbleed': 'Vulnerability-heartbleed', + 'Vulnerable to Heartbleed bug': 'Vulnerable to Heartbleed bug', + 'Vulnerable to OpenSSL CCS Injection': + 'Vulnerable to OpenSSL CCS Injection', + "We've sent an SMS to your new phone number with an authentication code to confirm this change.": + "We've sent an SMS to your new phone number with an authentication code to confirm this change.", + "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.": + "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.", + "We've sent you an email with an authentication code to sign into Tracker.": + "We've sent you an email with an authentication code to sign into Tracker.", + 'Web Configuration': 'Web Configuration', + 'Web Scan Results': 'Web Scan Results', + 'Web encryption settings summary': 'Web encryption settings summary', + 'Welcome, Admin': 'Welcome, Admin', + 'Welcome, you are successfully signed in to your new account!': + 'Welcome, you are successfully signed in to your new account!', + 'Welcome, you are successfully signed in!': + 'Welcome, you are successfully signed in!', + 'Yearly DMARC Graph': 'Yearly DMARC Graph', + 'You do not have admin permissions in any organization': + 'You do not have admin permissions in any organization', + "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.": + "You have not enabled Two Factor Authentication. To maximize your account's security, <0>please enable 2FA.", + 'You have successfully been signed out.': + 'You have successfully been signed out.', + 'You have successfully updated your TFA send method.': + 'You have successfully updated your TFA send method.', + 'You have successfully updated your display name.': + 'You have successfully updated your display name.', + 'You have successfully updated your email.': + 'You have successfully updated your email.', + 'You have successfully updated your password.': + 'You have successfully updated your password.', + 'You have successfully updated your phone number.': + 'You have successfully updated your phone number.', + 'You have successfully updated your preferred language.': + 'You have successfully updated your preferred language.', + 'You may now sign in with your new password': + 'You may now sign in with your new password', + 'Your 2FA app will then have a valid code that you can use when you sign in.': + 'Your 2FA app will then have a valid code that you can use when you sign in.', + 'Your Account': 'Your Account', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#a322', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna23', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna33', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna34', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna35', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna4', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna5', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#anna53', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb11', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb13', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb21', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb22', + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31': + 'https://cyber.gc.ca/en/guidance/implementation-guidance-email-domain-protection#annb31', + 'https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide': + 'https://docs.microsoft.com/en-ca/microsoft-365/security/office-365-security/use-dkim-to-validate-outbound-email?view=o365-worldwide', + 'https://tools.ietf.org/html/rfc6376#section-3.6.1': + 'https://tools.ietf.org/html/rfc6376#section-3.6.1', + 'https://tools.ietf.org/html/rfc7208#section-4.6.4': + 'https://tools.ietf.org/html/rfc7208#section-4.6.4', + 'https://tools.ietf.org/html/rfc7208#section-6.1': + 'https://tools.ietf.org/html/rfc7208#section-6.1', + 'https://tools.ietf.org/html/rfc7489#section-6.3': + 'https://tools.ietf.org/html/rfc7489#section-6.3', + 'https://tools.ietf.org/html/rfc7489#section-7.1': + 'https://tools.ietf.org/html/rfc7489#section-7.1', + of: 'of', + 'pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)': + 'pct=0 will use the next lower level of enforcement and may result in irregular mail flow if parsed incorrectly (p=quarantine; pct=0 should be none but mail agents may process messages based on Quarantine)', + '{0} was added to {orgSlug}': [['0'], ' was added to ', ['orgSlug']], + '{count} records...': [['count'], ' records...'], + '{domainSlug} DMARC Report': [['domainSlug'], ' DMARC Report'], + '{editingDomainUrl} from {orgSlug} successfully updated to {0}': [ + ['editingDomainUrl'], + ' from ', + ['orgSlug'], + ' successfully updated to ', + ['0'], + ], + '{orgName}': [['orgName']], + '{title} - Tracker': [['title'], ' - Tracker'], + }, +} diff --git a/frontend/src/locales/en.po b/frontend/src/locales/en.po index 9630e86bfb..50206f98d6 100644 --- a/frontend/src/locales/en.po +++ b/frontend/src/locales/en.po @@ -463,8 +463,12 @@ msgid "DMARC Report" msgstr "DMARC Report" #: src/DmarcReportPage.js:39 -msgid "DMARC Report | {domainSlug}" -msgstr "DMARC Report | {domainSlug}" +msgid "DMARC Report for {domainSlug}" +msgstr "DMARC Report for {domainSlug}" + +#: src/DmarcReportPage.js:39 +#~ msgid "DMARC Report | {domainSlug}" +#~ msgstr "DMARC Report | {domainSlug}" #: src/DomainsPage.js:136 msgid "DMARC Status" @@ -2234,6 +2238,10 @@ msgstr "{0} was added to {orgSlug}" msgid "{count} records..." msgstr "{count} records..." +#: src/DmarcReportPage.js:39 +#~ msgid "{domainSlug} DMARC Report" +#~ msgstr "{domainSlug} DMARC Report" + #: src/AdminDomains.js:209 msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}" msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}" @@ -2241,3 +2249,7 @@ msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}" #: src/OrganizationDetails.js:80 msgid "{orgName}" msgstr "{orgName}" + +#: src/useDocumentTitle.js:6 +msgid "{title} - Tracker" +msgstr "{title} - Tracker" diff --git a/frontend/src/locales/fr.js b/frontend/src/locales/fr.js index afce12c489..cb71ec57a5 100644 --- a/frontend/src/locales/fr.js +++ b/frontend/src/locales/fr.js @@ -29,7 +29,7 @@ 'Account created.': 'Compte créé', Acronym: 'Acronyme', 'Add Domain': 'Ajouter un domaine', - 'Add a domain': 'Add a domain', + 'Add a domain': 'Ajouter un domaine', Admin: 'Administrateur', 'Admin Portal': 'Portail Admin', 'Admin Profile': "Profil de l'administrateur", @@ -135,7 +135,8 @@ ], 'DMARC Messages': 'Messages de la DMARC', 'DMARC Not Implemented': "La DMARC n'est pas mise en œuvre", - 'DMARC Report': 'Rapport de la DMARC', + 'DMARC Report': 'Rapport DMARC ', + 'DMARC Report for {domainSlug}': ['Rapport DMARC pour ', ['domainSlug']], 'DMARC Status': 'Statut DMARC', 'DMARC fail': 'DMARC échoue', 'DMARC pass': 'Passe DMARC', @@ -148,7 +149,7 @@ 'Display name cannot be empty': "Le nom d'affichage ne peut pas être vide", Disposition: 'Disposition', Domain: 'Domaine', - 'Domain DMARC Report': 'Rapport DMARC de domaine', + 'Domain DMARC Report': 'Domain DMARC Report', 'Domain Details': 'Détails du domaine', 'Domain List': 'Liste des domaines', 'Domain URL': 'URL du domaine', @@ -592,9 +593,9 @@ "We've sent an SMS to your new phone number with an authentication code to confirm this change.": "Nous avons envoyé un SMS à votre nouveau numéro de téléphone avec un code d'authentification pour confirmer ce changement.", "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker.": - "Nous avons envoyé un SMS à votre numéro de téléphone enregistré avec un code d'authentification pour vous connecter à Tracker.", + "Nous avons envoyé un SMS à votre numéro de téléphone enregistré avec un code d'authentification pour vous connecter à Suivi.", "We've sent you an email with an authentication code to sign into Tracker.": - "Nous vous avons envoyé un e-mail avec un code d'authentification pour vous connecter à Tracker.", + "Nous vous avons envoyé un e-mail avec un code d'authentification pour vous connecter à Suivi.", 'Web Configuration': 'Configuration Web', 'Web Scan Results': "Résultats de l'analyse du Web", 'Web encryption settings summary': @@ -679,5 +680,6 @@ ['0'], ], '{orgName}': [['orgName']], + '{title} - Tracker': [['title'], ' - Suivi'], }, } diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po index 2b6bc2c965..b59bf52b52 100644 --- a/frontend/src/locales/fr.po +++ b/frontend/src/locales/fr.po @@ -463,8 +463,8 @@ msgid "DMARC Report" msgstr "Rapport DMARC " #: src/DmarcReportPage.js:39 -msgid "DMARC Report | {domainSlug}" -msgstr "Rapport DMARC | {domainSlug}" +msgid "DMARC Report for {domainSlug}" +msgstr "Rapport DMARC pour {domainSlug}" #: src/DomainsPage.js:136 msgid "DMARC Status" @@ -2057,11 +2057,11 @@ msgstr "Nous avons envoyé un SMS à votre nouveau numéro de téléphone avec u #: src/AuthenticateField.js:34 msgid "We've sent an SMS to your registered phone number with an authentication code to sign into Tracker." -msgstr "Nous avons envoyé un SMS à votre numéro de téléphone enregistré avec un code d'authentification pour vous connecter à Tracker." +msgstr "Nous avons envoyé un SMS à votre numéro de téléphone enregistré avec un code d'authentification pour vous connecter à Suivi." #: src/AuthenticateField.js:29 msgid "We've sent you an email with an authentication code to sign into Tracker." -msgstr "Nous vous avons envoyé un e-mail avec un code d'authentification pour vous connecter à Tracker." +msgstr "Nous vous avons envoyé un e-mail avec un code d'authentification pour vous connecter à Suivi." #: src/OrganizationCard.js:107 #: src/SummaryGroup.js:21 @@ -2241,3 +2241,7 @@ msgstr "{editingDomainUrl} de {orgSlug} mis à jour avec succès à {0}" #: src/OrganizationDetails.js:80 msgid "{orgName}" msgstr "" + +#: src/useDocumentTitle.js:6 +msgid "{title} - Tracker" +msgstr "{title} - Suivi"