diff --git a/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-default.jsx b/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-default.jsx
index 537b4f578c..25254b2acc 100644
--- a/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-default.jsx
+++ b/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-default.jsx
@@ -1,5 +1,5 @@
import Icon from '../../../shared/components/icon'
-import { Trans, useTranslation } from 'react-i18next'
+import { useTranslation } from 'react-i18next'
export default function AddCollaboratorsUpgradeContentDefault() {
const { t } = useTranslation()
@@ -18,12 +18,9 @@ export default function AddCollaboratorsUpgradeContentDefault() {
-
+ {t('collabs_per_proj', {
+ collabcount: 'Multiple',
+ })}
diff --git a/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-variant.jsx b/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-variant.jsx
index d6dce37271..655b38a056 100644
--- a/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-variant.jsx
+++ b/services/web/frontend/js/features/share-project-modal/components/add-collaborators-upgrade-content-variant.jsx
@@ -1,5 +1,5 @@
import Icon from '../../../shared/components/icon'
-import { Trans, useTranslation } from 'react-i18next'
+import { useTranslation } from 'react-i18next'
export default function AddCollaboratorsUpgradeContentVariant() {
const { t } = useTranslation()
@@ -23,12 +23,9 @@ export default function AddCollaboratorsUpgradeContentVariant() {
-
+ {t('collabs_per_proj', {
+ collabcount: 'Multiple',
+ })}
diff --git a/services/web/frontend/js/features/share-project-modal/components/transfer-ownership-modal.jsx b/services/web/frontend/js/features/share-project-modal/components/transfer-ownership-modal.jsx
index 2c1791cab9..5124c92b4e 100644
--- a/services/web/frontend/js/features/share-project-modal/components/transfer-ownership-modal.jsx
+++ b/services/web/frontend/js/features/share-project-modal/components/transfer-ownership-modal.jsx
@@ -42,8 +42,7 @@ export default function TransferOwnershipModal({ member, cancel }) {
i18nKey="project_ownership_transfer_confirmation_1"
values={{ user: member.email, project: projectName }}
components={[, ]}
- // eslint-disable-next-line react/jsx-boolean-value
- shouldUnescape={true}
+ shouldUnescape
tOptions={{ interpolation: { escapeValue: true } }}
/>
diff --git a/services/web/frontend/js/features/source-editor/components/review-panel/editor-widgets/toggle-widget.tsx b/services/web/frontend/js/features/source-editor/components/review-panel/editor-widgets/toggle-widget.tsx
index fbad4ea4fe..443e20de16 100644
--- a/services/web/frontend/js/features/source-editor/components/review-panel/editor-widgets/toggle-widget.tsx
+++ b/services/web/frontend/js/features/source-editor/components/review-panel/editor-widgets/toggle-widget.tsx
@@ -16,8 +16,10 @@ function ToggleWidget() {
})}
onClick={toggleReviewPanel}
>
- {/* eslint-disable-next-line react/jsx-key */}
- ]} />
+ }}
+ />
)
}
diff --git a/services/web/frontend/js/features/source-editor/components/review-panel/toolbar/toggle-menu.tsx b/services/web/frontend/js/features/source-editor/components/review-panel/toolbar/toggle-menu.tsx
index 050e5882d8..c3b89d5552 100644
--- a/services/web/frontend/js/features/source-editor/components/review-panel/toolbar/toggle-menu.tsx
+++ b/services/web/frontend/js/features/source-editor/components/review-panel/toolbar/toggle-menu.tsx
@@ -68,11 +68,15 @@ function ToggleMenu() {
onClick={handleToggleFullTCStateCollapse}
>
{wantTrackChanges ? (
- // eslint-disable-next-line react/jsx-key
- ]} />
+ }}
+ />
) : (
- // eslint-disable-next-line react/jsx-key
- ]} />
+ }}
+ />
)}
,
- ]}
+ components={{ strong: }}
/>
diff --git a/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx b/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx
index e6e92d6b4c..50f925d07b 100644
--- a/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx
+++ b/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx
@@ -22,14 +22,9 @@ function GroupPlanCollaboratorCount({ planCode }: { planCode: string }) {
if (planCode === 'collaborator') {
return (
<>
-
+ {t('collabs_per_proj', {
+ collabcount: 10,
+ })}
>
)
} else if (planCode === 'professional') {
@@ -39,28 +34,23 @@ function GroupPlanCollaboratorCount({ planCode }: { planCode: string }) {
}
function EducationDiscountAppliedOrNot({ groupSize }: { groupSize: string }) {
+ const { t } = useTranslation()
const size = parseInt(groupSize)
if (size >= groupSizeForEducationalDiscount) {
return (
-
+ {t('educational_percent_discount_applied', {
+ percent: educationalPercentDiscount,
+ })}
)
}
return (
-
+ {t('educational_discount_for_groups_of_x_or_more', {
+ size: groupSizeForEducationalDiscount,
+ })}
)
}
@@ -92,44 +82,27 @@ function GroupPrice({
{totalPrice} / {t('year')}
- {queryingGroupPlanToChangeToPrice ? (
- t('loading_prices')
- ) : (
-
- )}
+ {queryingGroupPlanToChangeToPrice
+ ? t('loading_prices')
+ : t('x_price_per_year', {
+ price: groupPlanToChangeToPrice?.totalForDisplay,
+ })}
-
+ {t('x_price_per_user', {
+ price: perUserPrice,
+ })}
- {queryingGroupPlanToChangeToPrice ? (
- t('loading_prices')
- ) : (
-
- )}
+ })}
>
@@ -215,14 +188,9 @@ export function ChangeToGroupModal() {
{t('customize_your_group_subscription')}
-
+ {t('save_x_percent_or_more', {
+ percent: '30',
+ })}
@@ -304,15 +272,10 @@ export function ChangeToGroupModal() {
-
+ {t('percent_discount_for_groups', {
+ percent: educationalPercentDiscount,
+ size: groupSizeForEducationalDiscount,
+ })}
@@ -393,12 +356,9 @@ export function ChangeToGroupModal() {
diff --git a/services/web/frontend/js/i18n.js b/services/web/frontend/js/i18n.js
index 9928d2879f..c63e9b73c4 100644
--- a/services/web/frontend/js/i18n.js
+++ b/services/web/frontend/js/i18n.js
@@ -23,6 +23,9 @@ i18n.use(initReactI18next).init({
// translation strings asynchronously, we need to trigger a re-render once
// they've loaded
bindI18nStore: 'added',
+
+ // Disable automatic conversion of basic markup to React components
+ transSupportBasicHtmlNodes: false,
},
interpolation: {
diff --git a/services/web/locales/en.json b/services/web/locales/en.json
index eec996e607..1f79333056 100644
--- a/services/web/locales/en.json
+++ b/services/web/locales/en.json
@@ -371,7 +371,7 @@
"delete": "Delete",
"delete_account": "Delete Account",
"delete_account_confirmation_label": "I understand this will delete all projects in my __appName__ account with email address <0>__userDefaultEmail__0>",
- "delete_account_warning_message_3": "You are about to permanently <0>delete all of your account data0>, including your projects and settings. Please type your account email address and password in the boxes below to proceed.",
+ "delete_account_warning_message_3": "You are about to permanently