From abaa1ee13b6e2fd8b58b9b508e5091430a75f434 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:04:32 -0600 Subject: [PATCH 01/10] Merge labels that different only in casing --- .../Organization/ImpersonateUser/ImpersonateUserAccordion.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Settings/Organization/ImpersonateUser/ImpersonateUserAccordion.tsx b/src/components/Settings/Organization/ImpersonateUser/ImpersonateUserAccordion.tsx index c7e3f55f9..f24577325 100644 --- a/src/components/Settings/Organization/ImpersonateUser/ImpersonateUserAccordion.tsx +++ b/src/components/Settings/Organization/ImpersonateUser/ImpersonateUserAccordion.tsx @@ -156,7 +156,7 @@ export const ImpersonateUserAccordion: React.FC = ({ required id="reason" name="reason" - label={t('Reason / Helpscout Ticket Link')} + label={t('Reason / HelpScout Ticket Link')} type="reason" value={reason} disabled={isSubmitting} From b2893fc1850ea9243aebe667111ec371abf6c8c6 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:11:25 -0600 Subject: [PATCH 02/10] Localize nav items --- .../MultiPageMenu/MultiPageMenuItems.ts | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/components/Shared/MultiPageLayout/MultiPageMenu/MultiPageMenuItems.ts b/src/components/Shared/MultiPageLayout/MultiPageMenu/MultiPageMenuItems.ts index 7440bf0eb..42a7dd6cb 100644 --- a/src/components/Shared/MultiPageLayout/MultiPageMenu/MultiPageMenuItems.ts +++ b/src/components/Shared/MultiPageLayout/MultiPageMenu/MultiPageMenuItems.ts @@ -1,3 +1,5 @@ +import i18n from 'src/lib/i18n'; + export type NavItems = { id: string; title: string; @@ -10,97 +12,97 @@ export type NavItems = { export const reportNavItems: NavItems[] = [ { id: 'donations', - title: 'Donations', + title: i18n.t('Donations'), }, { id: 'partnerCurrency', - title: '14 Month Partner Report', - subTitle: 'Partner Currency', + title: i18n.t('14 Month Partner Report'), + subTitle: i18n.t('Partner Currency'), }, { id: 'salaryCurrency', - title: '14 Month Salary Report', - subTitle: 'Salary Currency', + title: i18n.t('14 Month Salary Report'), + subTitle: i18n.t('Salary Currency'), }, { id: 'designationAccounts', - title: 'Designation Accounts', + title: i18n.t('Designation Accounts'), }, { id: 'financialAccounts', - title: 'Responsibility Centers', + title: i18n.t('Responsibility Centers'), }, { id: 'expectedMonthlyTotal', - title: 'Expected Monthly Total', + title: i18n.t('Expected Monthly Total'), }, { id: 'partnerGivingAnalysis', - title: 'Partner Giving Analysis', + title: i18n.t('Partner Giving Analysis'), }, { id: 'coaching', - title: 'Coaching', + title: i18n.t('Coaching'), }, ]; export const settingsNavItems: NavItems[] = [ { id: 'preferences', - title: 'Preferences', + title: i18n.t('Preferences'), }, { id: 'notifications', - title: 'Notifications', + title: i18n.t('Notifications'), }, { id: 'integrations', - title: 'Connect Services', + title: i18n.t('Connect Services'), }, { id: 'manageAccounts', - title: 'Manage Accounts', + title: i18n.t('Manage Accounts'), }, { id: 'manageCoaches', - title: 'Manage Coaches', + title: i18n.t('Manage Coaches'), }, { id: 'organizations', - title: 'Manage Organizations', + title: i18n.t('Manage Organizations'), grantedAccess: ['admin'], subItems: [ { id: 'organizations', - title: 'Impersonate & Share', + title: i18n.t('Impersonate & Share'), grantedAccess: ['admin'], }, { id: 'organizations/accountLists', - title: 'Account Lists', + title: i18n.t('Account Lists'), grantedAccess: ['admin'], }, { id: 'organizations/contacts', - title: 'Contacts', + title: i18n.t('Contacts'), grantedAccess: ['admin'], }, ], }, { id: 'admin', - title: 'Admin Console', + title: i18n.t('Admin Console'), grantedAccess: ['admin', 'developer'], }, { id: '/auth/user/admin', - title: 'Backend Admin', + title: i18n.t('Backend Admin'), oauth: true, grantedAccess: ['developer'], }, { id: '/auth/user/sidekiq', - title: 'Sidekiq', + title: i18n.t('Sidekiq'), oauth: true, grantedAccess: ['developer'], }, From 639e9f911ddb1be78e519930db226fc9e208d7f5 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:18:03 -0600 Subject: [PATCH 03/10] Remove redundant braces --- .../integrations/Google/GoogleAccordion.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/Settings/integrations/Google/GoogleAccordion.tsx b/src/components/Settings/integrations/Google/GoogleAccordion.tsx index 79736a3fe..e7aceb0d8 100644 --- a/src/components/Settings/integrations/Google/GoogleAccordion.tsx +++ b/src/components/Settings/integrations/Google/GoogleAccordion.tsx @@ -237,14 +237,12 @@ export const GoogleAccordion: React.FC = ({ component="div" color={theme.palette.cruGrayDark.main} > - { - }} - /> - } + }} + /> From 07940bbc8fc7ec9e91fa3e272bbde883cdb15160 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:22:06 -0600 Subject: [PATCH 04/10] Localize "Showing x of y" appeals message --- .../[accountListId]/tools/GetAppeals.graphql | 2 ++ .../Tool/Appeal/InitialPage/Appeals.test.tsx | 9 +++--- .../Tool/Appeal/InitialPage/Appeals.tsx | 29 ++++++++++--------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/pages/accountLists/[accountListId]/tools/GetAppeals.graphql b/pages/accountLists/[accountListId]/tools/GetAppeals.graphql index 3085e701f..9f67aa4f9 100644 --- a/pages/accountLists/[accountListId]/tools/GetAppeals.graphql +++ b/pages/accountLists/[accountListId]/tools/GetAppeals.graphql @@ -7,6 +7,7 @@ query GetAppeals($accountListId: ID!, $after: String) { nodes { ...AppealFields } + totalCount } regularAppeals: appeals( accountListId: $accountListId @@ -17,6 +18,7 @@ query GetAppeals($accountListId: ID!, $after: String) { nodes { ...AppealFields } + totalCount pageInfo { endCursor hasNextPage diff --git a/src/components/Tool/Appeal/InitialPage/Appeals.test.tsx b/src/components/Tool/Appeal/InitialPage/Appeals.test.tsx index 2c22f01a2..8b203a281 100644 --- a/src/components/Tool/Appeal/InitialPage/Appeals.test.tsx +++ b/src/components/Tool/Appeal/InitialPage/Appeals.test.tsx @@ -32,6 +32,7 @@ const mocks = { GetAppeals: { appeals: { nodes: [testAppeal], + totalCount: 1, pageInfo: { hasNextPage: false, }, @@ -70,7 +71,7 @@ describe('AppealsTest', () => { }); it('should render an appeal', async () => { - const { getByText, findByText, getByTestId } = render( + const { getByText, findByText, findByTestId } = render( @@ -84,10 +85,8 @@ describe('AppealsTest', () => { expect(await findByText('Primary Appeal')).toBeInTheDocument(); expect(getByText('Appeals')).toBeInTheDocument(); - await waitFor(() => - expect(getByTestId('TypographyShowing').textContent).toEqual( - 'Showing 2 of 2', - ), + expect(await findByTestId('TypographyShowing')).toHaveTextContent( + 'Showing 2 of 2', ); }); diff --git a/src/components/Tool/Appeal/InitialPage/Appeals.tsx b/src/components/Tool/Appeal/InitialPage/Appeals.tsx index 8d399a112..986e1191f 100644 --- a/src/components/Tool/Appeal/InitialPage/Appeals.tsx +++ b/src/components/Tool/Appeal/InitialPage/Appeals.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { Box, Divider, Skeleton, Typography } from '@mui/material'; import { useSnackbar } from 'notistack'; -import { useTranslation } from 'react-i18next'; +import { Trans, useTranslation } from 'react-i18next'; import { GetAppealsDocument, useGetAppealsQuery, @@ -91,7 +91,7 @@ const Appeals: React.FC = ({ accountListId }) => { ))} - ) : data?.regularAppeals && data.regularAppeals.nodes.length ? ( + ) : data?.regularAppeals.nodes.length ? ( <> {data.regularAppeals.nodes.map((appeal) => ( @@ -102,19 +102,22 @@ const Appeals: React.FC = ({ accountListId }) => { ) : ( )} - {!loading && ( + {data && ( - Showing{' '} - - {(data?.primaryAppeal ? data.primaryAppeal.nodes.length : 0) + - (data?.regularAppeals ? data.regularAppeals.nodes.length : 0)} - {' '} - of{' '} - - {(data?.primaryAppeal ? data.primaryAppeal.nodes.length : 0) + - (data?.regularAppeals ? data.regularAppeals.nodes.length : 0)} - + }} + /> )} From 37345a1c66f43325dc113c5cb5665a0d803169f5 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:23:17 -0600 Subject: [PATCH 05/10] Localize report filters label --- .../reports/partnerGivingAnalysis/[[...contactId]].page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/accountLists/[accountListId]/reports/partnerGivingAnalysis/[[...contactId]].page.tsx b/pages/accountLists/[accountListId]/reports/partnerGivingAnalysis/[[...contactId]].page.tsx index be235f882..8088c3de3 100644 --- a/pages/accountLists/[accountListId]/reports/partnerGivingAnalysis/[[...contactId]].page.tsx +++ b/pages/accountLists/[accountListId]/reports/partnerGivingAnalysis/[[...contactId]].page.tsx @@ -75,7 +75,7 @@ const PartnerGivingAnalysisReportPage: React.FC = () => { filterData?.accountList.partnerGivingAnalysisFilterGroups ?? []; const reportFilterGroup = { __typename: 'FilterGroup' as const, - name: 'Report Filters', + name: t('Report Filters'), featured: true, filters: sortBy( groups @@ -88,7 +88,7 @@ const PartnerGivingAnalysisReportPage: React.FC = () => { ), }; return [reportFilterGroup, ...groups]; - }, [filterData]); + }, [filterData, t]); const handleClearSearch = () => { reportRef.current?.clearSearchInput(); From 249d00b6285847d2f65491f4ce44c1267bbcdfce Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:34:15 -0600 Subject: [PATCH 06/10] Localize table pagination labels --- src/components/DonationTable/DonationTable.tsx | 7 +++++++ .../AccountTransactionTable/AccountTransactionTable.tsx | 7 +++++++ .../PartnerGivingAnalysisReport.test.tsx | 2 +- .../PartnerGivingAnalysisReport.tsx | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/components/DonationTable/DonationTable.tsx b/src/components/DonationTable/DonationTable.tsx index 3875b94b7..adc369cbb 100644 --- a/src/components/DonationTable/DonationTable.tsx +++ b/src/components/DonationTable/DonationTable.tsx @@ -384,6 +384,13 @@ export const DonationTable: React.FC = ({ autoHeight disableSelectionOnClick disableVirtualization + localeText={{ + MuiTablePagination: { + labelRowsPerPage: t('Rows per page:'), + labelDisplayedRows: ({ from, to, count }) => + t('{{from}}-{{to}} of {{total}}', { from, to, total: count }), + }, + }} /> {data.donations.pageInfo.hasNextPage ? ( diff --git a/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx b/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx index 26f29370a..7045ef2a7 100644 --- a/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx +++ b/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx @@ -308,6 +308,13 @@ export const AccountTransactionTable: React.FC = ({ rowHeight={70} autoHeight getRowHeight={() => 'auto'} + localeText={{ + MuiTablePagination: { + labelRowsPerPage: t('Rows per page:'), + labelDisplayedRows: ({ from, to, count }) => + t('{{from}}-{{to}} of {{total}}', { from, to, total: count }), + }, + }} /> diff --git a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.test.tsx b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.test.tsx index 880aff580..74166ea8e 100644 --- a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.test.tsx +++ b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.test.tsx @@ -444,7 +444,7 @@ describe('PartnerGivingAnalysisReport', () => { ).not.toBeInTheDocument(); }); - expect(getByText('11–20 of 120')).toBeInTheDocument(); + expect(getByText('11-20 of 120')).toBeInTheDocument(); }); it('selects and unselects all', async () => { diff --git a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx index 4ff9828a1..eef597949 100644 --- a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx +++ b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx @@ -216,6 +216,10 @@ export const PartnerGivingAnalysisReport = forwardRef< page={page} rowsPerPage={limit} rowsPerPageOptions={[10, 25, 50]} + labelRowsPerPage={t('Rows per page:')} + labelDisplayedRows={({ from, to, count }) => + t('{{from}}-{{to}} of {{total}}', { from, to, total: count }) + } SelectProps={{ inputProps: { 'aria-label': t('rows per page'), From 00c4ac01766875ebdedf168cbf8c996b24390aea Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 14:45:53 -0600 Subject: [PATCH 07/10] Localize All Tasks tab --- .../tasks/[[...contactId]].page.tsx | 14 ++++++----- src/utils/tasks/taskFilterTabs.ts | 23 ++++++++----------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/pages/accountLists/[accountListId]/tasks/[[...contactId]].page.tsx b/pages/accountLists/[accountListId]/tasks/[[...contactId]].page.tsx index 3c2b6ec4b..61d607fdd 100644 --- a/pages/accountLists/[accountListId]/tasks/[[...contactId]].page.tsx +++ b/pages/accountLists/[accountListId]/tasks/[[...contactId]].page.tsx @@ -33,7 +33,7 @@ import { useUserPreference } from 'src/hooks/useUserPreference'; import theme from 'src/theme'; import { TaskFilterTabsTypes, - taskFiltersTabs, + getTaskFiltersTabs, } from 'src/utils/tasks/taskFilterTabs'; import { TaskFiltersQuery, @@ -122,6 +122,8 @@ const TasksPage: React.FC = () => { //#region Filters + const taskFiltersTabs = useMemo(() => getTaskFiltersTabs(t), [t]); + const [taskType, setTaskType] = useState( taskFiltersTabs[0].name, ); @@ -311,15 +313,15 @@ const TasksPage: React.FC = () => { )})`, }} > - {taskFiltersTabs.map((i) => ( + {taskFiltersTabs.map((tab) => ( ))} diff --git a/src/utils/tasks/taskFilterTabs.ts b/src/utils/tasks/taskFilterTabs.ts index 158c6f0e8..15e39499f 100644 --- a/src/utils/tasks/taskFilterTabs.ts +++ b/src/utils/tasks/taskFilterTabs.ts @@ -1,3 +1,5 @@ +import { TFunction } from 'react-i18next'; + export type TaskFilterTabsTypes = | 'All' | 'Overdue' @@ -9,18 +11,16 @@ export type TaskFilterTabsTypes = interface TaskFilterTabsObject { name: TaskFilterTabsTypes; uiName: string; - translated: boolean; activeFiltersOptions: { completed: boolean | null; dateRange: string | null; }; } -export const taskFiltersTabs: TaskFilterTabsObject[] = [ +export const getTaskFiltersTabs = (t: TFunction): TaskFilterTabsObject[] => [ { name: 'All', - uiName: 'All Tasks', - translated: false, + uiName: t('All Tasks'), activeFiltersOptions: { completed: null, dateRange: null, @@ -28,8 +28,7 @@ export const taskFiltersTabs: TaskFilterTabsObject[] = [ }, { name: 'Overdue', - uiName: 'Overdue', - translated: true, + uiName: t('Overdue'), activeFiltersOptions: { completed: false, dateRange: 'overdue', @@ -37,8 +36,7 @@ export const taskFiltersTabs: TaskFilterTabsObject[] = [ }, { name: 'Completed', - uiName: 'Completed', - translated: true, + uiName: t('Completed'), activeFiltersOptions: { completed: true, dateRange: null, @@ -46,8 +44,7 @@ export const taskFiltersTabs: TaskFilterTabsObject[] = [ }, { name: 'Today', - uiName: 'Today', - translated: true, + uiName: t('Today'), activeFiltersOptions: { completed: false, dateRange: 'today', @@ -55,8 +52,7 @@ export const taskFiltersTabs: TaskFilterTabsObject[] = [ }, { name: 'Upcoming', - uiName: 'Upcoming', - translated: true, + uiName: t('Upcoming'), activeFiltersOptions: { completed: false, dateRange: 'upcoming', @@ -64,8 +60,7 @@ export const taskFiltersTabs: TaskFilterTabsObject[] = [ }, { name: 'NoDueDate', - uiName: 'No Due Date', - translated: true, + uiName: t('No Due Date'), activeFiltersOptions: { completed: false, dateRange: 'no_date', From 38cb8f914ab00e970768e538ae30292b7d76d458 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Tue, 12 Nov 2024 15:08:03 -0600 Subject: [PATCH 08/10] Localize phone number and email locations --- .../PersonEmail/PersonEmailItem.tsx | 19 +++++++------- .../PersonPhoneNumberItem.tsx | 22 +++++++--------- .../CollapsibleEmailList.tsx | 26 +++++++++++++------ .../CollapsiblePhoneList.tsx | 26 +++++++++++++------ .../StyledComponents.ts | 3 --- src/hooks/useEmailLocations.ts | 18 +++++++++++++ src/hooks/usePhoneLocations.ts | 19 ++++++++++++++ 7 files changed, 91 insertions(+), 42 deletions(-) create mode 100644 src/hooks/useEmailLocations.ts create mode 100644 src/hooks/usePhoneLocations.ts diff --git a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonEmail/PersonEmailItem.tsx b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonEmail/PersonEmailItem.tsx index 3496ccf95..40b0c28c1 100644 --- a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonEmail/PersonEmailItem.tsx +++ b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonEmail/PersonEmailItem.tsx @@ -17,6 +17,7 @@ import { PersonEmailAddressInput, PersonUpdateInput, } from 'src/graphql/types.generated'; +import { useEmailLocations } from 'src/hooks/useEmailLocations'; import { isEditableSource } from 'src/utils/sourceHelper'; import { ModalSectionContainer } from '../ModalSectionContainer/ModalSectionContainer'; import { ModalSectionDeleteIcon } from '../ModalSectionDeleteIcon/ModalSectionDeleteIcon'; @@ -68,6 +69,8 @@ export const PersonEmailItem: React.FC = ({ const [isEmailPrimaryChecked, setIsEmailPrimaryChecked] = React.useState(false); + const locations = useEmailLocations(); + const source = sources?.find((email) => email.id === emailAddress.id)?.source; const locked = !isEditableSource(source); @@ -134,17 +137,13 @@ export const PersonEmailItem: React.FC = ({ fullWidth > - None - - - {t('Work')} - - - {t('Personal')} - - - {t('Other')} + {t('None')} + {Object.entries(locations).map(([value, label]) => ( + + {label} + + ))} diff --git a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonPhoneNumber/PersonPhoneNumberItem.tsx b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonPhoneNumber/PersonPhoneNumberItem.tsx index 187bcd309..8de79563c 100644 --- a/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonPhoneNumber/PersonPhoneNumberItem.tsx +++ b/src/components/Contacts/ContactDetails/ContactDetailsTab/People/Items/PersonModal/PersonPhoneNumber/PersonPhoneNumberItem.tsx @@ -17,6 +17,7 @@ import { PersonPhoneNumberInput, PersonUpdateInput, } from 'src/graphql/types.generated'; +import { usePhoneLocations } from 'src/hooks/usePhoneLocations'; import { isEditableSource } from 'src/utils/sourceHelper'; import { ModalSectionContainer } from '../ModalSectionContainer/ModalSectionContainer'; import { ModalSectionDeleteIcon } from '../ModalSectionDeleteIcon/ModalSectionDeleteIcon'; @@ -67,6 +68,8 @@ export const PersonPhoneNumberItem: React.FC = ({ const [isPrimaryChecked, setIsPrimaryChecked] = React.useState(false); + const locations = usePhoneLocations(); + const source = sources?.find( (number) => number.id === phoneNumber.id, )?.source; @@ -136,20 +139,13 @@ export const PersonPhoneNumberItem: React.FC = ({ fullWidth > - None - - - {t('Mobile')} - - - {t('Home')} - - - {t('Work')} - - - {t('Other')} + {t('None')} + {Object.entries(locations).map(([value, label]) => ( + + {label} + + ))} diff --git a/src/components/Shared/CollapsibleContactInfo/CollapsibleEmailList.tsx b/src/components/Shared/CollapsibleContactInfo/CollapsibleEmailList.tsx index e66bf85e5..dfce3a7b6 100644 --- a/src/components/Shared/CollapsibleContactInfo/CollapsibleEmailList.tsx +++ b/src/components/Shared/CollapsibleContactInfo/CollapsibleEmailList.tsx @@ -1,5 +1,6 @@ import { Link, Typography } from '@mui/material'; import { EmailAddress } from 'src/graphql/types.generated'; +import { useEmailLocations } from 'src/hooks/useEmailLocations'; import { CollapsibleList } from './CollapsibleList'; import { ContactInfoText } from './StyledComponents'; @@ -7,14 +8,23 @@ interface EmailProps { email: Partial; } -const Email: React.FC = ({ email }) => ( - - - {email.email} - - {email.location && - {email.location}} - -); +const Email: React.FC = ({ email }) => { + const locations = useEmailLocations(); + + return ( + + + {email.email} + + {email.location && ( + + {' - '} + {locations[email.location.toLowerCase()] ?? email.location} + + )} + + ); +}; interface CollapsibleEmailListProps { emails: Array>; diff --git a/src/components/Shared/CollapsibleContactInfo/CollapsiblePhoneList.tsx b/src/components/Shared/CollapsibleContactInfo/CollapsiblePhoneList.tsx index df4067665..3f73aedaf 100644 --- a/src/components/Shared/CollapsibleContactInfo/CollapsiblePhoneList.tsx +++ b/src/components/Shared/CollapsibleContactInfo/CollapsiblePhoneList.tsx @@ -1,5 +1,6 @@ import { Link, Typography } from '@mui/material'; import { PhoneNumber } from 'src/graphql/types.generated'; +import { usePhoneLocations } from 'src/hooks/usePhoneLocations'; import { CollapsibleList } from './CollapsibleList'; import { ContactInfoText } from './StyledComponents'; @@ -7,14 +8,23 @@ interface PhoneProps { phone: Pick; } -const Phone: React.FC = ({ phone }) => ( - - - {phone.number} - - {phone.location && - {phone.location}} - -); +const Phone: React.FC = ({ phone }) => { + const locations = usePhoneLocations(); + + return ( + + + {phone.number} + + {phone.location && ( + + {' - '} + {locations[phone.location.toLowerCase()] ?? phone.location} + + )} + + ); +}; interface CollapsiblePhoneListProps { phones: Array>; diff --git a/src/components/Shared/CollapsibleContactInfo/StyledComponents.ts b/src/components/Shared/CollapsibleContactInfo/StyledComponents.ts index 30f5f56d6..5c451a4a7 100644 --- a/src/components/Shared/CollapsibleContactInfo/StyledComponents.ts +++ b/src/components/Shared/CollapsibleContactInfo/StyledComponents.ts @@ -2,7 +2,4 @@ import { styled } from '@mui/material/styles'; export const ContactInfoText = styled('span')({ overflow: 'hidden', - '& span': { - textTransform: 'capitalize', - }, }); diff --git a/src/hooks/useEmailLocations.ts b/src/hooks/useEmailLocations.ts new file mode 100644 index 000000000..82b570125 --- /dev/null +++ b/src/hooks/useEmailLocations.ts @@ -0,0 +1,18 @@ +import { useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; + +// Return an object where the keys are email address locations and the values are the localized labels +export const useEmailLocations = (): Record => { + const { t } = useTranslation(); + + const locations = useMemo( + () => ({ + work: t('Work'), + personal: t('Personal'), + other: t('Other'), + }), + [t], + ); + + return locations; +}; diff --git a/src/hooks/usePhoneLocations.ts b/src/hooks/usePhoneLocations.ts new file mode 100644 index 000000000..5de21b1b1 --- /dev/null +++ b/src/hooks/usePhoneLocations.ts @@ -0,0 +1,19 @@ +import { useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; + +// Return an object where the keys are phone number locations and the values are the localized labels +export const usePhoneLocations = (): Record => { + const { t } = useTranslation(); + + const locations = useMemo( + () => ({ + mobile: t('Mobile'), + home: t('Home'), + work: t('Work'), + other: t('Other'), + }), + [t], + ); + + return locations; +}; From ea4b566aff30c9de9bdcd0188b9b27211f253170 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Wed, 13 Nov 2024 11:31:52 -0600 Subject: [PATCH 09/10] Localize all data grid and pagination labels --- .../DonationTable/DonationTable.tsx | 11 +- .../AccountTransactionTable.tsx | 11 +- .../PartnerGivingAnalysisReport.tsx | 8 +- src/hooks/useMuiLocaleText.ts | 225 ++++++++++++++++++ 4 files changed, 237 insertions(+), 18 deletions(-) create mode 100644 src/hooks/useMuiLocaleText.ts diff --git a/src/components/DonationTable/DonationTable.tsx b/src/components/DonationTable/DonationTable.tsx index adc369cbb..7cee9c88b 100644 --- a/src/components/DonationTable/DonationTable.tsx +++ b/src/components/DonationTable/DonationTable.tsx @@ -27,6 +27,7 @@ import { useTranslation } from 'react-i18next'; import { useFetchAllPages } from 'src/hooks/useFetchAllPages'; import { useLocalStorage } from 'src/hooks/useLocalStorage'; import { useLocale } from 'src/hooks/useLocale'; +import { useDataGridLocaleText } from 'src/hooks/useMuiLocaleText'; import { currencyFormat, dateFormatShort } from 'src/lib/intlFormat'; import { DynamicEditDonationModal, @@ -362,6 +363,8 @@ export const DonationTable: React.FC = ({ }, ); + const localeText = useDataGridLocaleText(); + return ( <> {data?.donations.nodes.length ? ( @@ -384,13 +387,7 @@ export const DonationTable: React.FC = ({ autoHeight disableSelectionOnClick disableVirtualization - localeText={{ - MuiTablePagination: { - labelRowsPerPage: t('Rows per page:'), - labelDisplayedRows: ({ from, to, count }) => - t('{{from}}-{{to}} of {{total}}', { from, to, total: count }), - }, - }} + localeText={localeText} /> {data.donations.pageInfo.hasNextPage ? ( diff --git a/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx b/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx index 7045ef2a7..c715897b8 100644 --- a/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx +++ b/src/components/Reports/FinancialAccountsReport/AccountTransactions/AccountTransactionTable/AccountTransactionTable.tsx @@ -13,6 +13,7 @@ import { DateTime } from 'luxon'; import { useTranslation } from 'react-i18next'; import { Maybe } from 'src/graphql/types.generated'; import { useLocale } from 'src/hooks/useLocale'; +import { useDataGridLocaleText } from 'src/hooks/useMuiLocaleText'; import { currencyFormat, dateFormatShort } from 'src/lib/intlFormat'; import { FinancialAccountContext, @@ -290,6 +291,8 @@ export const AccountTransactionTable: React.FC = ({ }, ]; + const localeText = useDataGridLocaleText(); + return ( <> = ({ rowHeight={70} autoHeight getRowHeight={() => 'auto'} - localeText={{ - MuiTablePagination: { - labelRowsPerPage: t('Rows per page:'), - labelDisplayedRows: ({ from, to, count }) => - t('{{from}}-{{to}} of {{total}}', { from, to, total: count }), - }, - }} + localeText={localeText} /> diff --git a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx index eef597949..136883f8f 100644 --- a/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx +++ b/src/components/Reports/PartnerGivingAnalysisReport/PartnerGivingAnalysisReport.tsx @@ -21,6 +21,7 @@ import { import { useGetPartnerGivingAnalysisIdsForMassSelectionQuery } from 'src/hooks/GetIdsForMassSelection.generated'; import { useDebouncedValue } from 'src/hooks/useDebounce'; import { useMassSelection } from 'src/hooks/useMassSelection'; +import { useTablePaginationLocaleText } from 'src/hooks/useMuiLocaleText'; import { sanitizeFilters } from 'src/lib/sanitizeFilters'; import { useGetPartnerGivingAnalysisReportQuery } from './PartnerGivingAnalysisReport.generated'; import { PartnerGivingAnalysisReportTable as Table } from './Table/Table'; @@ -142,6 +143,8 @@ export const PartnerGivingAnalysisReport = forwardRef< isRowChecked, } = useMassSelection(allContactIds); + const localeText = useTablePaginationLocaleText(); + const handleRequestSort = ( event: React.MouseEvent, property: string, @@ -216,16 +219,13 @@ export const PartnerGivingAnalysisReport = forwardRef< page={page} rowsPerPage={limit} rowsPerPageOptions={[10, 25, 50]} - labelRowsPerPage={t('Rows per page:')} - labelDisplayedRows={({ from, to, count }) => - t('{{from}}-{{to}} of {{total}}', { from, to, total: count }) - } SelectProps={{ inputProps: { 'aria-label': t('rows per page'), }, native: true, }} + {...localeText} /> ) : ( diff --git a/src/hooks/useMuiLocaleText.ts b/src/hooks/useMuiLocaleText.ts new file mode 100644 index 000000000..386d54b0d --- /dev/null +++ b/src/hooks/useMuiLocaleText.ts @@ -0,0 +1,225 @@ +import { useMemo } from 'react'; +import { TablePaginationProps } from '@mui/material'; +import { GridLocaleText } from '@mui/x-data-grid'; +import { useTranslation } from 'react-i18next'; +import { useLocale } from './useLocale'; + +export const useDataGridLocaleText = (): GridLocaleText => { + const { t } = useTranslation(); + const locale = useLocale(); + const tablePaginationLocaleText = useTablePaginationLocaleText(); + + return useMemo( + () => ({ + // Root + noRowsLabel: t('No rows'), + + noResultsOverlayLabel: t('No results found.'), + errorOverlayDefaultLabel: t('An error occurred.'), + + // Density selector toolbar button text + toolbarDensity: t('Density'), + + toolbarDensityLabel: t('Density'), + toolbarDensityCompact: t('Compact'), + toolbarDensityStandard: t('Standard'), + toolbarDensityComfortable: t('Comfortable'), + + // Columns selector toolbar button text + toolbarColumns: t('Columns'), + + toolbarColumnsLabel: t('Select columns'), + + // Filters toolbar button text + toolbarFilters: t('Filters'), + + toolbarFiltersLabel: t('Show filters'), + toolbarFiltersTooltipHide: t('Hide filters'), + toolbarFiltersTooltipShow: t('Show filters'), + + toolbarFiltersTooltipActive: (count) => + count !== 1 + ? t('{{filters}} active filters', { filters: count }) + : t('{{filters}} active filter', { filters: count }), + + // Quick filter toolbar field + toolbarQuickFilterPlaceholder: t('Search…'), + + toolbarQuickFilterLabel: t('Search'), + toolbarQuickFilterDeleteIconLabel: t('Clear'), + + // Export selector toolbar button text + toolbarExport: t('Export'), + + toolbarExportLabel: t('Export'), + toolbarExportCSV: t('Download as CSV'), + toolbarExportPrint: t('Print'), + toolbarExportExcel: t('Download as Excel'), + + // Columns panel text + columnsPanelTextFieldLabel: t('Find column'), + + columnsPanelTextFieldPlaceholder: t('Column title'), + columnsPanelDragIconLabel: t('Reorder column'), + columnsPanelShowAllButton: t('Show all'), + columnsPanelHideAllButton: t('Hide all'), + + // Filter panel text + filterPanelAddFilter: t('Add filter'), + + filterPanelDeleteIconLabel: t('Delete'), + filterPanelLinkOperator: t('Logic operator'), + filterPanelOperators: t('Operator'), + filterPanelOperatorAnd: t('And'), + filterPanelOperatorOr: t('Or'), + filterPanelColumns: t('Columns'), + filterPanelInputLabel: t('Value'), + filterPanelInputPlaceholder: t('Filter value'), + + // Filter operators text + filterOperatorContains: t('contains'), + + filterOperatorEquals: t('equals'), + filterOperatorStartsWith: t('starts with'), + filterOperatorEndsWith: t('ends with'), + filterOperatorIs: t('is'), + filterOperatorNot: t('is not'), + filterOperatorAfter: t('is after'), + filterOperatorOnOrAfter: t('is on or after'), + filterOperatorBefore: t('is before'), + filterOperatorOnOrBefore: t('is on or before'), + filterOperatorIsEmpty: t('is empty'), + filterOperatorIsNotEmpty: t('is not empty'), + filterOperatorIsAnyOf: t('is any of'), + + // Filter values text + filterValueAny: t('any'), + + filterValueTrue: t('true'), + filterValueFalse: t('false'), + + // Column menu text + columnMenuLabel: t('Menu'), + + columnMenuShowColumns: t('Show columns'), + columnMenuFilter: t('Filter'), + columnMenuHideColumn: t('Hide'), + columnMenuUnsort: t('Unsort'), + columnMenuSortAsc: t('Sort by ASC'), + columnMenuSortDesc: t('Sort by DESC'), + + // Column header text + columnHeaderFiltersTooltipActive: (count) => + count !== 1 + ? t('{{filters}} active filters', { filters: count }) + : t('1 active filter'), + + columnHeaderFiltersLabel: t('Show filters'), + columnHeaderSortIconLabel: t('Sort'), + + // Rows selected footer text + footerRowSelected: (count) => + count !== 1 + ? t('{{rows}} rows selected', { + rows: count.toLocaleString(locale), + }) + : t('{{rows}} row selected', { + rows: count.toLocaleString(locale), + }), + + // Total row amount footer text + footerTotalRows: t('Total Rows:'), + + // Total visible row amount footer text + footerTotalVisibleRows: (visibleCount, totalCount) => + t('{{visible}} of {{total}}', { + visible: visibleCount.toLocaleString(locale), + total: totalCount.toLocaleString(locale), + }), + + // Checkbox selection text + checkboxSelectionHeaderName: t('Checkbox selection'), + + checkboxSelectionSelectAllRows: t('Select all rows'), + checkboxSelectionUnselectAllRows: t('Unselect all rows'), + checkboxSelectionSelectRow: t('Select row'), + checkboxSelectionUnselectRow: t('Unselect row'), + + // Boolean cell text + booleanCellTrueLabel: t('yes'), + + booleanCellFalseLabel: t('no'), + + // Actions cell more text + actionsCellMore: t('more'), + + // Column pinning text + pinToLeft: t('Pin to left'), + + pinToRight: t('Pin to right'), + unpin: t('Unpin'), + + // Tree Data + treeDataGroupingHeaderName: t('Group'), + + treeDataExpand: t('see children'), + treeDataCollapse: t('hide children'), + + // Grouping columns + groupingColumnHeaderName: t('Group'), + + groupColumn: (name) => t('Group by {{name}}', name), + unGroupColumn: (name) => t('Stop grouping by {{name}}', name), + + // Master/detail + detailPanelToggle: t('Detail panel toggle'), + + expandDetailPanel: t('Expand'), + collapseDetailPanel: t('Collapse'), + + // Used core components translation keys + MuiTablePagination: tablePaginationLocaleText, + + // Row reordering text + rowReorderingHeaderName: t('Row reordering'), + + // Aggregation + aggregationMenuItemHeader: t('Aggregation'), + + aggregationFunctionLabelSum: t('sum'), + aggregationFunctionLabelAvg: t('avg'), + aggregationFunctionLabelMin: t('min'), + aggregationFunctionLabelMax: t('max'), + aggregationFunctionLabelSize: t('size'), + }), + [t, locale], + ); +}; + +export const useTablePaginationLocaleText = + (): Partial => { + const { t } = useTranslation(); + + const localeText = useMemo( + (): Partial => ({ + getItemAriaLabel: (type) => { + switch (type) { + case 'first': + return t('first'); + case 'last': + return t('last'); + case 'next': + return t('next'); + case 'previous': + return t('previous'); + } + }, + labelRowsPerPage: t('Rows per page:'), + labelDisplayedRows: ({ from, to, count }) => + t('{{from}}-{{to}} of {{total}}', { from, to, total: count }), + }), + [t], + ); + + return localeText; + }; From 74e9e8ccaff9f9d2ae1118a034f22965efee7989 Mon Sep 17 00:00:00 2001 From: Caleb Cox Date: Thu, 14 Nov 2024 11:21:21 -0600 Subject: [PATCH 10/10] Run yarn extract --- public/locales/en/translation.json | 113 ++++++++++++++++++++----- public/locales/en/translation_old.json | 24 +++++- 2 files changed, 113 insertions(+), 24 deletions(-) diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 871c80c8c..cd36a6f5f 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -205,11 +205,17 @@ "{{count}} Selected_one": "{{count}} Selected", "{{count}} Selected_other": "{{count}} Selected", "{{daysLate}}+ days late": "{{daysLate}}+ days late", + "{{filters}} active filter": "{{filters}} active filter", + "{{filters}} active filters": "{{filters}} active filters", + "{{from}}-{{to}} of {{total}}": "{{from}}-{{to}} of {{total}}", "{{message}}": "{{message}}", "{{months}} months ago": "{{months}} months ago", "{{name}} has one or multiple invalid numbers. Please fix.": "{{name}} has one or multiple invalid numbers. Please fix.", "{{name}}'s commitment info updated!": "{{name}}'s commitment info updated!", + "{{rows}} row selected": "{{rows}} row selected", + "{{rows}} rows selected": "{{rows}} rows selected", "{{selectedCount}} tasks are selected, but only the first {{modifyCount}} will be modified": "{{selectedCount}} tasks are selected, but only the first {{modifyCount}} will be modified", + "{{visible}} of {{total}}": "{{visible}} of {{total}}", "{{years}} years ago": "{{years}} years ago", "{t('Congratulations!')}<1>{t(\"You're all set!\")}": "{t('Congratulations!')}<1>{t(\"You're all set!\")}", "* You need to include both First & Last Name OR Full Name": "* You need to include both First & Last Name OR Full Name", @@ -220,10 +226,13 @@ "Showing {{numberOfContacts}} of {{totalCount}}": "Showing {{numberOfContacts}} of {{totalCount}}", "

This contact will be anonymized in your {{appName}} organization. This is permanent and can't be recovered. Only anonymize if you are 100% confident that you are looking at the correct contact.


A contact placeholder will remain with a name like “DataPrivacy, Deleted”. Gift data will remain. Other data such as notes and tasks will be removed. Status will be set as “Never Ask”. Newsletter set to 'N/A'. You can request removal across all other systems at dsar@cru.org.

": "

This contact will be anonymized in your {{appName}} organization. This is permanent and can't be recovered. Only anonymize if you are 100% confident that you are looking at the correct contact.


A contact placeholder will remain with a name like “DataPrivacy, Deleted”. Gift data will remain. Other data such as notes and tasks will be removed. Status will be set as “Never Ask”. Newsletter set to 'N/A'. You can request removal across all other systems at dsar@cru.org.

", "0-30 days late": "0-30 days late", + "1 active filter": "1 active filter", "1 contact successfully added to your appeal.": "1 contact successfully added to your appeal.", "1 month ago": "1 month ago", "1 year ago": "1 year ago", "1. Share your accounts with each other.": "1. Share your accounts with each other.", + "14 Month Partner Report": "14 Month Partner Report", + "14 Month Salary Report": "14 Month Salary Report", "2. Merge Accounts": "2. Merge Accounts", "30-60 days late": "30-60 days late", "60+ days late": "60+ days late", @@ -276,6 +285,7 @@ "Add Email": "Add Email", "Add Email Address": "Add Email Address", "Add Excluded Contacts To Appeal": "Add Excluded Contacts To Appeal", + "Add filter": "Add filter", "Add Google Account": "Add Google Account", "Add Multiple Contacts": "Add Multiple Contacts", "Add new {{page}}": "Add new {{page}}", @@ -319,6 +329,7 @@ "Advanced CSV": "Advanced CSV", "Advanced Excel (XLSX)": "Advanced Excel (XLSX)", "Afghanistan": "Afghanistan", + "Aggregation": "Aggregation", "Åland Islands": "Åland Islands", "Albania": "Albania", "Algeria": "Algeria", @@ -328,6 +339,7 @@ "All of the information for your contacts in Excel's default XLSX format.": "All of the information for your contacts in Excel's default XLSX format.", "All of the information for your contacts, best for advanced sorting/filtering and importing into other software.": "All of the information for your contacts, best for advanced sorting/filtering and importing into other software.", "All selected contacts already have this tag": "All selected contacts already have this tag", + "All Tasks": "All Tasks", "Alma Mater": "Alma Mater", "American Samoa": "American Samoa", "Amount": "Amount", @@ -338,6 +350,8 @@ "Amount must be a valid number": "Amount must be a valid number", "Amount must be in valid currency format": "Amount must be in valid currency format", "Amount of time before reminder": "Amount of time before reminder", + "An error occurred.": "An error occurred.", + "And": "And", "And error occured.": "And error occured.", "AndorrA": "AndorrA", "Angola": "Angola", @@ -347,6 +361,7 @@ "Anonymize": "Anonymize", "Antarctica": "Antarctica", "Antigua and Barbuda": "Antigua and Barbuda", + "any": "any", "Any": "Any", "Appeal": "Appeal", "Appeal Amount": "Appeal Amount", @@ -357,7 +372,6 @@ "Appeal successfully added!": "Appeal successfully added!", "Appeal successfully set to primary": "Appeal successfully set to primary", "Appeals": "Appeals", - "Appointment Scheduled": "Appointment Scheduled", "Appointments": "Appointments", "appointments and results table": "appointments and results table", "Are you sure you want to anonymize {{name}} in {{accountList}}?": "Are you sure you want to anonymize {{name}} in {{accountList}}?", @@ -397,8 +411,6 @@ "Asked": "Asked", "Assignee": "Assignee", "Assignee: ": "Assignee: ", - "Attempted": "Attempted", - "Attempted - Left Message": "Attempted - Left Message", "Australia": "Australia", "Austria": "Austria", "Automatic logging of campaigns:": "Automatic logging of campaigns:", @@ -408,6 +420,7 @@ "Average: {{average}}": "Average: {{average}}", "Avery 5160": "Avery 5160", "Avery 7160": "Avery 7160", + "avg": "avg", "Avg": "Avg", "Azerbaijan": "Azerbaijan", "Back": "Back", @@ -452,10 +465,8 @@ "Cambodia": "Cambodia", "Cameroon": "Cameroon", "Can't find your organization?": "Can't find your organization?", - "Can't meet right now - circle back": "Can't meet right now - circle back", "Canada": "Canada", "Cancel": "Cancel", - "Cancelled-Need to reschedule": "Cancelled-Need to reschedule", "Cannot add duplicate tags, duplicate tag has been removed": "Cannot add duplicate tags, duplicate tag has been removed", "Cannot upload avatar: file must be an image": "Cannot upload avatar: file must be an image", "Cannot upload avatar: file size cannot exceed 1MB": "Cannot upload avatar: file size cannot exceed 1MB", @@ -478,6 +489,7 @@ "Change the contact's status to: {{status}}": "Change the contact's status to: {{status}}", "Check": "Check", "Check All": "Check All", + "Checkbox selection": "Checkbox selection", "Chile": "Chile", "China": "China", "Choose a calendar for {{appName}} to push tasks to:": "Choose a calendar for {{appName}} to push tasks to:", @@ -504,8 +516,11 @@ "Collapse": "Collapse", "Colombia": "Colombia", "Column select": "Column select", + "Column title": "Column title", "Column Workflow View": "Column Workflow View", + "Columns": "Columns", "Columns with duplicate or empty headers are ignored. Please ensure your CSV does not have any such headers!": "Columns with duplicate or empty headers are ignored. Please ensure your CSV does not have any such headers!", + "Comfortable": "Comfortable", "Comment": "Comment", "Commitment": "Commitment", "Commitment Amount": "Commitment Amount", @@ -521,6 +536,7 @@ "Committed Below Goal": "Committed Below Goal", "Committed Monthly Equivalent": "Committed Monthly Equivalent", "Comoros": "Comoros", + "Compact": "Compact", "Complete": "Complete", "Complete Task": "Complete Task", "Complete Tasks": "Complete Tasks", @@ -578,6 +594,7 @@ "Contacts with possibly incorrect commitment info will appear here.": "Contacts with possibly incorrect commitment info will appear here.", "Contacts: ": "Contacts: ", "contacts.google.com": "contacts.google.com", + "contains": "contains", "Continue": "Continue", "Continue Tour": "Continue Tour", "Contributions by Partner Currency": "Contributions by Partner Currency", @@ -633,6 +650,7 @@ "Deletion process enqueued: {{fullName}}. Check back later to see the updated data.": "Deletion process enqueued: {{fullName}}. Check back later to see the updated data.", "Deletion process enqueued: {{name}}": "Deletion process enqueued: {{name}}", "Denmark": "Denmark", + "Density": "Density", "deselect all": "deselect all", "Deselect All": "Deselect All", "Designation": "Designation", @@ -641,6 +659,7 @@ "Designation Accounts": "Designation Accounts", "Designations Accounts": "Designations Accounts", "destination field": "destination field", + "Detail panel toggle": "Detail panel toggle", "Details": "Details", "Developing a healthy team of ministry partners sets your ministry up to thrive.\n{{appName}} is designed to help you do the right things, with the right people at the right time to be fully funded.": "Developing a healthy team of ministry partners sets your ministry up to thrive.\n{{appName}} is designed to help you do the right things, with the right people at the right time to be fully funded.", "Differences:": "Differences:", @@ -674,6 +693,8 @@ "Donations So Far This Month": "Donations So Far This Month", "Done": "Done", "DonorHub": "DonorHub", + "Download as CSV": "Download as CSV", + "Download as Excel": "Download as Excel", "Download CSV": "Download CSV", "Due Date": "Due Date", "Due Time": "Due Time", @@ -711,10 +732,12 @@ "End Date": "End Date", "End Date:": "End Date:", "End of Year Ask": "End of Year Ask", + "ends with": "ends with", "Engaged": "Engaged", "Envelope Greeting": "Envelope Greeting", "Envelope Name": "Envelope Name", "Envelope Name Line": "Envelope Name Line", + "equals": "equals", "Equatorial Guinea": "Equatorial Guinea", "Eritrea": "Eritrea", "Error deleting phone number {{phoneNumber}}": "Error deleting phone number {{phoneNumber}}", @@ -770,6 +793,7 @@ "Failed to add phone number": "Failed to add phone number", "Failed to update the appeal": "Failed to update the appeal", "Falkland Islands (Malvinas)": "Falkland Islands (Malvinas)", + "false": "false", "Faroe Islands": "Faroe Islands", "Female": "Female", "Field is required": "Field is required", @@ -782,10 +806,14 @@ "Filter by Organization": "Filter by Organization", "Filter name": "Filter name", "Filter saved successfully": "Filter saved successfully", + "Filter value": "Filter value", + "Filters": "Filters", "Financial Partners": "Financial Partners", "Financial, Special, and Prayer partners that have an empty Newsletter Status appear here. Choose a newsletter status for the contacts below.": "Financial, Special, and Prayer partners that have an empty Newsletter Status appear here. Choose a newsletter status for the contacts below.", + "Find column": "Find column", "Finished": "Finished", "Finland": "Finland", + "first": "first", "First": "First", "First Name": "First Name", "First Name is required": "First Name is required", @@ -798,7 +826,6 @@ "Fix Phone Numbers": "Fix Phone Numbers", "Fix Send Newsletter": "Fix Send Newsletter", "Flows View": "Flows View", - "Follow up": "Follow up", "Follow-Up": "Follow-Up", "For each event {{appName}} can notify you via email and also create a task\n entry reminding you to do something about it. The options below allow\n you to control that behavior.": "For each event {{appName}} can notify you via email and also create a task\n entry reminding you to do something about it. The options below allow\n you to control that behavior.", "Foreign Amount": "Foreign Amount", @@ -857,6 +884,8 @@ "Greenland": "Greenland", "Greeting": "Greeting", "Grenada": "Grenada", + "Group": "Group", + "Group by {{name}}": "Group by {{name}}", "Guadeloupe": "Guadeloupe", "Guam": "Guam", "Guatemala": "Guatemala", @@ -869,9 +898,12 @@ "Heard Island and Mcdonald Islands": "Heard Island and Mcdonald Islands", "Help logo": "Help logo", "Hide": "Hide", + "Hide all": "Hide all", "Hide announcement": "Hide announcement", + "hide children": "hide children", "Hide Contact": "Hide Contact", "Hide Contacts": "Hide Contacts", + "Hide filters": "Hide filters", "Holy See (Vatican City State)": "Holy See (Vatican City State)", "Home": "Home", "Home Country": "Home Country", @@ -899,6 +931,7 @@ "If you want to allow another {{appName}} user to have access to this organization, you can share access with them. Make\n sure you have the proper permissions and leadership consensus around this sharing before you do this. You will be\n able to remove access later.": "If you want to allow another {{appName}} user to have access to this organization, you can share access with them. Make\n sure you have the proper permissions and leadership consensus around this sharing before you do this. You will be\n able to remove access later.", "If you'd like to import contacts by group/label, please add labels here: ": "If you'd like to import contacts by group/label, please add labels here: ", "Ignore this Duplicate": "Ignore this Duplicate", + "Impersonate & Share": "Impersonate & Share", "Impersonate User": "Impersonate User", "Import": "Import", "Import {{page}}s": "Import {{page}}s", @@ -920,7 +953,6 @@ "In Hand Date Range": "In Hand Date Range", "In Hand Monthly Equivalent": "In Hand Monthly Equivalent", "In Hand Special Gifts": "In Hand Special Gifts", - "In Person": "In Person", "In the popup box, choose the top button, \"Export Database to XML\".": "In the popup box, choose the top button, \"Export Database to XML\".", "Income": "Income", "Income:": "Income:", @@ -949,7 +981,16 @@ "Iran, Islamic Republic Of": "Iran, Islamic Republic Of", "Iraq": "Iraq", "Ireland": "Ireland", + "is": "is", + "is after": "is after", "Is amount in valid currency format?": "Is amount in valid currency format?", + "is any of": "is any of", + "is before": "is before", + "is empty": "is empty", + "is not": "is not", + "is not empty": "is not empty", + "is on or after": "is on or after", + "is on or before": "is on or before", "Is positive?": "Is positive?", "Isle of Man": "Isle of Man", "Israel": "Israel", @@ -975,6 +1016,7 @@ "Kyrgyzstan": "Kyrgyzstan", "Label Template": "Label Template", "Language": "Language", + "last": "last", "Last": "Last", "Last Gift Amount": "Last Gift Amount", "Last Gift Date": "Last Gift Date", @@ -997,7 +1039,6 @@ "Let's Begin": "Let's Begin", "Let's set your locale!": "Let's set your locale!", "Let's start by connecting to your first organization": "Let's start by connecting to your first organization", - "Letter": "Letter", "Letter Cost": "Letter Cost", "Letter Cost is required": "Letter Cost is required", "Letter Cost must be a valid number": "Letter Cost must be a valid number", @@ -1024,6 +1065,7 @@ "Log Newsletter": "Log Newsletter", "log task": "log task", "Log Task": "Log Task", + "Logic operator": "Logic operator", "Logout": "Logout", "Looks like you have no account lists to manage yet": "Looks like you have no account lists to manage yet", "Looks like you haven't added any {{page}}s yet": "Looks like you haven't added any {{page}}s yet", @@ -1070,6 +1112,7 @@ "Mayotte": "Mayotte", "MB Max CSV file size": "MB Max CSV file size", "Memo": "Memo", + "Menu": "Menu", "Merge": "Merge", "Merge Contacts": "Merge Contacts", "Merge multiple personal donation accounts into one with Multi-currency support": "Merge multiple personal donation accounts into one with Multi-currency support", @@ -1108,6 +1151,7 @@ "Monthly Support Gained": "Monthly Support Gained", "Monthly Support Lost": "Monthly Support Lost", "Montserrat": "Montserrat", + "more": "more", "More Actions": "More Actions", "Morocco": "Morocco", "Most Likely": "Most Likely", @@ -1146,6 +1190,7 @@ "Newsletter logged successfully": "Newsletter logged successfully", "Newsletter statuses updated successfully": "Newsletter statuses updated successfully", "Newsletter updated!": "Newsletter updated!", + "next": "next", "Next": "Next", "Next Action": "Next Action", "Next Increase Ask": "Next Increase Ask", @@ -1156,6 +1201,7 @@ "Niger": "Niger", "Nigeria": "Nigeria", "Niue": "Niue", + "no": "no", "No": "No", "No {{source}} primary email address exists to update": "No {{source}} primary email address exists to update", "No account lists match your search filters.": "No account lists match your search filters.", @@ -1195,7 +1241,8 @@ "No Primary Appeal has been selected.": "No Primary Appeal has been selected.", "No Primary Appeal Set": "No Primary Appeal Set", "No primary appeal to show.": "No primary appeal to show.", - "No Response Yet": "No Response Yet", + "No results found.": "No results found.", + "No rows": "No rows", "No Status": "No Status", "No tags added in last 6 {{period}}.": "No tags added in last 6 {{period}}.", "No tasks can be found for this contact": "No tasks can be found for this contact", @@ -1207,7 +1254,6 @@ "Norfolk Island": "Norfolk Island", "Northern Mariana Islands": "Northern Mariana Islands", "Norway": "Norway", - "Not Interested": "Not Interested", "Notes": "Notes", "Notes successfully saved.": "Notes successfully saved.", "Notifications": "Notifications", @@ -1230,8 +1276,10 @@ "Only delete if you know that this user will not be returning to any other missional organization that uses {{appName}}. You may need to confirm this with them.": "Only delete if you know that this user will not be returning to any other missional organization that uses {{appName}}. You may need to confirm this with them.", "Only import contacts from certain groups": "Only import contacts from certain groups", "Opening Balance": "Opening Balance", + "Operator": "Operator", "Opt-out of Digital Newsletter": "Opt-out of Digital Newsletter", "opted out of newsletter": "opted out of newsletter", + "Or": "Or", "Organization": "Organization", "organization admin": "organization admin", "Organization currently shared with": "Organization currently shared with", @@ -1256,12 +1304,10 @@ "Partner account deleted!": "Partner account deleted!", "Partner Accounts": "Partner Accounts", "Partner Care": "Partner Care", + "Partner Currency": "Partner Currency", "Partner Giving Analysis": "Partner Giving Analysis", "Partner giving analysis report table": "Partner giving analysis report table", "Partner No.": "Partner No.", - "Partner-Financial": "Partner-Financial", - "Partner-Pray": "Partner-Pray", - "Partner-Special": "Partner-Special", "Partners & Progress - God's Part": "Partners & Progress - God's Part", "Partners by Status": "Partners by Status", "Partners Currently Initiating With": "Partners Currently Initiating With", @@ -1302,6 +1348,8 @@ "Physical Newsletter": "Physical Newsletter", "Pick a default set of columns to use": "Pick a default set of columns to use", "Pick a list to use for your newsletter": "Pick a list to use for your newsletter", + "Pin to left": "Pin to left", + "Pin to right": "Pin to right", "Pitcairn": "Pitcairn", "Please choose a list to sync with MailChimp.": "Please choose a list to sync with MailChimp.", "Please ensure you've read the above before continuing.": "Please ensure you've read the above before continuing.", @@ -1318,7 +1366,6 @@ "Possible Partners This Month": "Possible Partners This Month", "Prayer ({{totalCount}})": "Prayer ({{totalCount}})", "Prayer Partners": "Prayer Partners", - "Prayer Request": "Prayer Request", "prayerletters.com": "prayerletters.com", "prayerletters.com is a significant way to save valuable ministry\n time while more effectively connecting with your partners. Keep your\n physical newsletter list up to date in {{appName}} and then sync it to your\n prayerletters.com account with this integration.": "prayerletters.com is a significant way to save valuable ministry\n time while more effectively connecting with your partners. Keep your\n physical newsletter list up to date in {{appName}} and then sync it to your\n prayerletters.com account with this integration.", "PrayerLetters.com Overview": "PrayerLetters.com Overview", @@ -1328,6 +1375,7 @@ "Preferences - Manage Coaches": "Preferences - Manage Coaches", "Preferred Contact Method": "Preferred Contact Method", "Preview": "Preview", + "previous": "previous", "Previous": "Previous", "Previous Month": "Previous Month", "Primary": "Primary", @@ -1343,7 +1391,6 @@ "Qatar": "Qatar", "Quarterly": "Quarterly", "Reason": "Reason", - "Reason / Helpscout Ticket Link": "Reason / Helpscout Ticket Link", "Reason / HelpScout Ticket Link": "Reason / HelpScout Ticket Link", "Received": "Received", "Received Below Goal": "Received Below Goal", @@ -1377,7 +1424,9 @@ "Remove User": "Remove User", "Removed the admin successfully": "Removed the admin successfully", "Removed the invite successfully": "Removed the invite successfully", + "Reorder column": "Reorder column", "Rep Address": "Rep Address", + "Report Filters": "Report Filters", "Report header button group": "Report header button group", "Reports": "Reports", "Reports - Coaching": "Reports - Coaching", @@ -1410,7 +1459,9 @@ "Review Excluded": "Review Excluded", "Right Wins the Merge": "Right Wins the Merge", "Romania": "Romania", + "Row reordering": "Row reordering", "rows per page": "rows per page", + "Rows per page:": "Rows per page:", "Russian Federation": "Russian Federation", "RWANDA": "RWANDA", "Saint Helena": "Saint Helena", @@ -1418,6 +1469,7 @@ "Saint Lucia": "Saint Lucia", "Saint Pierre and Miquelon": "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines": "Saint Vincent and the Grenadines", + "Salary Currency": "Salary Currency", "Samoa": "Samoa", "San Marino": "San Marino", "Sao Tome and Principe": "Sao Tome and Principe", @@ -1439,8 +1491,10 @@ "Search by subject, tags, contact name, or comments": "Search by subject, tags, contact name, or comments", "Search Contacts": "Search Contacts", "Search Tasks": "Search Tasks", + "Search…": "Search…", "Seasonal": "Seasonal", "See {{appName}} tasks in your Google Calendar": "See {{appName}} tasks in your Google Calendar", + "see children": "see children", "See Fewer Filters": "See Fewer Filters", "See Match": "See Match", "See More Filters": "See More Filters", @@ -1450,12 +1504,15 @@ "select all": "select all", "Select all {{count}} contacts_one": "Select all {{count}} contacts", "Select all {{count}} contacts_other": "Select all {{count}} contacts", + "Select all rows": "Select all rows", "Select an Account": "Select an Account", + "Select columns": "Select columns", "Select Contact": "Select Contact", "Select CSV file": "Select CSV file", "Select donations that make up this commitment by {{name}} of {{amount}}.": "Select donations that make up this commitment by {{name}} of {{amount}}.", "Select donations that make up this commitment by {{name}}.": "Select donations that make up this commitment by {{name}}.", "Select one of the highlighted tools below to begin importing your data.": "Select one of the highlighted tools below to begin importing your data.", + "Select row": "Select row", "Select Some Options": "Select Some Options", "Select tags to remove:": "Select tags to remove:", "Select the types of notifications you'd like to receive": "Select the types of notifications you'd like to receive", @@ -1493,7 +1550,10 @@ "Show {{amount}} More": "Show {{amount}} More", "Show {{partnerCount}} Partners": "Show {{partnerCount}} Partners", "Show 1 Partner": "Show 1 Partner", + "Show all": "Show all", + "Show columns": "Show columns", "Show Contact": "Show Contact", + "Show filters": "Show filters", "Show Less": "Show Less", "Show More": "Show More", "Showing {{count}}_one": "Showing {{count}}", @@ -1508,28 +1568,31 @@ "Since all columns have been removed, resetting columns to their default values": "Since all columns have been removed, resetting columns to their default values", "Singapore": "Singapore", "Single": "Single", + "size": "size", "Skip Step": "Skip Step", "Slovakia": "Slovakia", "Slovenia": "Slovenia", "SMS": "SMS", - "Social Media": "Social Media", "Solomon Islands": "Solomon Islands", "Somalia": "Somalia", "Some of the contact(s) you have selected to add to this appeal are currently excluded. You will not be able to exclude these contacts once you add them to this appeal. Instead, you will be able to remove them from it.": "Some of the contact(s) you have selected to add to this appeal are currently excluded. You will not be able to exclude these contacts once you add them to this appeal. Instead, you will be able to remove them from it.", + "Sort": "Sort", "Sort By": "Sort By", + "Sort by ASC": "Sort by ASC", + "Sort by DESC": "Sort by DESC", "Source": "Source", "Source:": "Source:", "South Africa": "South Africa", "South Georgia and the South Sandwich Islands": "South Georgia and the South Sandwich Islands", "Spain": "Spain", "Special Gift": "Special Gift", - "Special Gift Appeal": "Special Gift Appeal", "Special Gift Partners": "Special Gift Partners", "Special Needs Gained": "Special Needs Gained", "Spouse": "Spouse", "Sri Lanka": "Sri Lanka", "Staff IDs:": "Staff IDs:", "Staff You Coach": "Staff You Coach", + "Standard": "Standard", "Star": "Star", "Starred": "Starred", "Start": "Start", @@ -1538,6 +1601,7 @@ "Start Date Not Set": "Start Date Not Set", "Start Date:": "Start Date:", "Started giving": "Started giving", + "starts with": "starts with", "State": "State", "Status": "Status", "Status is required": "Status is required", @@ -1545,6 +1609,7 @@ "Step 2": "Step 2", "Step 3": "Step 3", "Step 4": "Step 4", + "Stop grouping by {{name}}": "Stop grouping by {{name}}", "Stop Impersonating": "Stop Impersonating", "Stopped Giving": "Stopped Giving", "Stopped Giving Range": "Stopped Giving Range", @@ -1577,6 +1642,7 @@ "Sudan": "Sudan", "Suffix": "Suffix", "Suggested Tags": "Suggested Tags", + "sum": "sum", "Summary": "Summary", "Summary Report - Responsibility Centers": "Summary Report - Responsibility Centers", "Suriname": "Suriname", @@ -1628,9 +1694,7 @@ "Template": "Template", "Temporary": "Temporary", "Terms of Use": "Terms of Use", - "Text Message": "Text Message", "Thailand": "Thailand", - "Thank You Note": "Thank You Note", "That's it! Set it and leave it! Now your MailChimp list is\n continuously up to date with your {{appName}} Contacts. That's just\n the surface. Click over to the {{appName}} Help site for more in-depth\n details.": "That's it! Set it and leave it! Now your MailChimp list is\n continuously up to date with your {{appName}} Contacts. That's just\n the surface. Click over to the {{appName}} Help site for more in-depth\n details.", "The address that syncs with Donation Services cannot be edited here. Please email Donation Services with the updated address, or you can create a new address and select it as your primary mailing address.": "The address that syncs with Donation Services cannot be edited here. Please email Donation Services with the updated address, or you can create a new address and select it as your primary mailing address.", "The address that syncs with your organization’s donations cannot be edited here. Please email your donation department with the updated address, or you can create a new address and select it as your primary mailing address.": "The address that syncs with your organization’s donations cannot be edited here. Please email your donation department with the updated address, or you can create a new address and select it as your primary mailing address.", @@ -1682,7 +1746,6 @@ "Timor-Leste": "Timor-Leste", "Title": "Title", "Tnt Import": "Tnt Import", - "To Do": "To Do", "To Do This Week": "To Do This Week", "To get started, we're going to walk with you through a few key steps to set you up for success in {{appName}}!": "To get started, we're going to walk with you through a few key steps to set you up for success in {{appName}}!", "To import your TntConnect database, go to Import from TntConnect": "To import your TntConnect database, go to Import from TntConnect", @@ -1715,11 +1778,13 @@ "Total Donations: ": "Total Donations: ", "Total Expenses": "Total Expenses", "Total Income": "Total Income", + "Total Rows:": "Total Rows:", "Totals": "Totals", "Totals for Period": "Totals for Period", "Transactions": "Transactions", "Transactions Report - Responsibility Centers": "Transactions Report - Responsibility Centers", "Trinidad and Tobago": "Trinidad and Tobago", + "true": "true", "Try adding a task or changing your search filters.": "Try adding a task or changing your search filters.", "Try searching for a different keyword or organization.": "Try searching for a different keyword or organization.", "Tunisia": "Tunisia", @@ -1754,6 +1819,10 @@ "United Kingdom": "United Kingdom", "United States": "United States", "United States Minor Outlying Islands": "United States Minor Outlying Islands", + "Unpin": "Unpin", + "Unselect all rows": "Unselect all rows", + "Unselect row": "Unselect row", + "Unsort": "Unsort", "Unstar": "Unstar", "Unused Statuses": "Unused Statuses", "Upcoming": "Upcoming", @@ -1762,7 +1831,6 @@ "Update": "Update", "Update Commitment Info": "Update Commitment Info", "Update Donations": "Update Donations", - "Update Information": "Update Information", "Updated contact's name and greeting information": "Updated contact's name and greeting information", "Updated contact(s) status successfully": "Updated contact(s) status successfully", "Updated Google Calendar Integration!": "Updated Google Calendar Integration!", @@ -1782,9 +1850,9 @@ "Users": "Users", "Uzbekistan": "Uzbekistan", "value": "value", + "Value": "Value", "Vanuatu": "Vanuatu", "Venezuela": "Venezuela", - "Video Call": "Video Call", "Viet Nam": "Viet Nam", "View Activity Detail": "View Activity Detail", "View All": "View All", @@ -1817,6 +1885,7 @@ "Would you like {{appName}} to email Chalkline your newsletter list and open their order form in a new tab?": "Would you like {{appName}} to email Chalkline your newsletter list and open their order form in a new tab?", "Would you like to import that data now? (Current users don't need to reimport their data)": "Would you like to import that data now? (Current users don't need to reimport their data)", "Yemen": "Yemen", + "yes": "yes", "Yes": "Yes", "Yes! Import my stuff!": "Yes! Import my stuff!", "You are about to delete a user and any unshared associated account(s). Associated accounts will be deleted unless they are shared with other users.": "You are about to delete a user and any unshared associated account(s). Associated accounts will be deleted unless they are shared with other users.", diff --git a/public/locales/en/translation_old.json b/public/locales/en/translation_old.json index 258792a0c..d7c6c6a9b 100644 --- a/public/locales/en/translation_old.json +++ b/public/locales/en/translation_old.json @@ -16,6 +16,7 @@ "ANNUAL": "Annual", "Appointment": "Appointment", "APPOINTMENT": "Appointment", + "Appointment Scheduled": "Appointment Scheduled", "APPOINTMENT_SCHEDULED": "Appointment Scheduled", "Appointments and Results": "Appointments and Results", "Appt Produced": "Appt Produced", @@ -34,7 +35,9 @@ "Ask in Future": "Ask in Future", "Ask In Future": "Ask In Future", "ASK_IN_FUTURE": "Ask In Future", + "Attempted": "Attempted", "ATTEMPTED": "Attempted", + "Attempted - Left Message": "Attempted - Left Message", "ATTEMPTED_LEFT_MESSAGE": "Attempted - Left Message", "BOTH": "Both", "Cake": "Cake", @@ -44,6 +47,8 @@ "Call For Decision": "Call For Decision", "CALL_FOR_DECISION": "Call For Decision", "Calls": "Calls", + "Can't meet right now - circle back": "Can't meet right now - circle back", + "Cancelled-Need to reschedule": "Cancelled-Need to reschedule", "Cannot upload file: file size cannot exceed 1MB": "Cannot upload file: file size cannot exceed 1MB", "Cofirm {{value}}": "Cofirm {{value}}", "Comments": "Comments", @@ -97,6 +102,7 @@ "FACEBOOK_MESSAGE": "Facebook Message", "Filter ({{count}})": "Filter ({{count}})", "Filter ({{count}})_plural": "Filter ({{count}})", + "Follow up": "Follow up", "Follow Up for Decision": "Follow Up for Decision", "From: {{where}}": "From: {{where}}", "Gifts": "Gifts", @@ -111,12 +117,14 @@ "How the notification will be sent": "How the notification will be sent", "If blank you will not be notified": "If blank you will not be notified", "Import Tnt": "Import Tnt", + "In Person": "In Person", "Incomplete": "Incomplete", "Individual Completed": "Individual Completed", "Initiate for Appointment": "Initiate for Appointment", "Initiation": "Initiation", "Last Gift": "Last Gift", "Last Name is required": "Last Name is required", + "Letter": "Letter", "LETTER": "Letter", "List Separator": ", ", "Magazine": "Magazine", @@ -153,7 +161,9 @@ "No Contacts to show.": "No Contacts to show.", "No Referrals": "No Referrals", "No referrals to show.": "No referrals to show.", + "No Response Yet": "No Response Yet", "NONE": "None", + "Not Interested": "Not Interested", "NOT_INTERESTED": "Not Interested", "Notification": "Notification", "On your email newsletter list but has no people with a valid email address": "On your email newsletter list but has no people with a valid email address", @@ -165,15 +175,18 @@ "Partner - Financial": "Partner - Financial", "Partner - Pray": "Partner - Pray", "Partner - Special": "Partner - Special", - "Partner Currency": "Partner Currency", "PARTNER_FINANCIAL": "Partner - Financial", "PARTNER_PRAY": "Partner - Pray", "PARTNER_SPECIAL": "Partner - Special", + "Partner-Financial": "Partner-Financial", + "Partner-Pray": "Partner-Pray", + "Partner-Special": "Partner-Special", "Period": "Period", "Phone Calls": "Phone Calls", "Phone Dials": "Phone Dials", "PHYSICAL": "Physical", "Platform": "Platform", + "Prayer Request": "Prayer Request", "PRAYER_REQUEST": "Prayer Request", "PRE_CALL_LETTER": "Pre-Call Letter", "Pre-call": "Pre-call", @@ -182,6 +195,7 @@ "Primary Appeal Updated": "Primary Appeal Updated", "Print Icon": "Print Icon", "QUARTERLY": "Quarterly", + "Reason / Helpscout Ticket Link": "Reason / Helpscout Ticket Link", "received": "received", "Received\u200c\u2060": "Received\u200c\u2060", "RECEIVED": "Received", @@ -203,7 +217,6 @@ "Resulting Appointments": "Resulting Appointments", "Results": "Results", "Ring": "Ring", - "Salary Currency": "Salary Currency", "Saving setup phase failed.": "Saving setup phase failed.", "Scheduled": "Scheduled", "See All Account Lists": "See All Account Lists", @@ -212,6 +225,8 @@ "Sent": "Sent", "Showing {{count}}": "Showing {{count}}", "Showing {{count}}_plural": "Showing {{count}}", + "Social Media": "Social Media", + "Special Gift Appeal": "Special Gift Appeal", "Status: {{status}}": "Status: {{status}}", "Stopping Impersonating and redirecting you to the legacy MPDX": "Stopping Impersonating and redirecting you to the legacy MPDX", "Support": "Support", @@ -223,21 +238,26 @@ "TALK_TO_IN_PERSON": "Talk To In Person", "Talked To": "Talked To", "Task logged successfully": "Task logged successfully", + "Text Message": "Text Message", "TEXT_MESSAGE": "Text Message", "Thank": "Thank", "THANK": "Thank", "Thank You": "Thank You", + "Thank You Note": "Thank You Note", "Thank Yous": "Thank Yous", "These {{number}} contacts have been previously excluded from this appeal. Are you certain you wish to add them?": "These {{number}} contacts have been previously excluded from this appeal. Are you certain you wish to add them?", "This contact has been previously excluded from this appeal. Are you certain you wish to add them?": "This contact has been previously excluded from this appeal. Are you certain you wish to add them?", "This is the primary email for every person in contacts marked as Newsletter-Email or Newsletter-Both. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.": "This is the primary email for every person in contacts marked as Newsletter-Email or Newsletter-Both. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.", "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.": "This is the primary email for every person in the selected contacts. If they are marked as \"Opted out of Email Newsletter\", they are not included in this list.", "This will log you in on behalf of the user specified below. You will be able to see what the user sees on {{appName}}.\n Impersonation sessions have 20 minute timeout where you will automatically be logged out of the user's account after\n the specified amount of time. Once you are finished impersonating, click 'Exit Impersonation Mode' at the top of the\n page.": "This will log you in on behalf of the user specified below. You will be able to see what the user sees on {{appName}}.\n Impersonation sessions have 20 minute timeout where you will automatically be logged out of the user's account after\n the specified amount of time. Once you are finished impersonating, click 'Exit Impersonation Mode' at the top of the\n page.", + "To Do": "To Do", "TO_DO": "To Do", "Unexpand User Info Icon": "Unexpand User Info Icon", "Unresponsive": "Unresponsive", "UNRESPONSIVE": "Unresponsive", + "Update Information": "Update Information", "User options updated!": "User options updated!", + "Video Call": "Video Call", "Week on MPD:": "Week on MPD:", "WEEKLY": "Weekly", "Yearly": "Yearly",