-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Email: Refine copy of Email Comparison pages #60303
Conversation
7dfe5b1
to
515dcf0
Compare
@@ -673,7 +673,7 @@ function purchaseType( purchase ) { | |||
} | |||
|
|||
if ( isGSuiteOrGoogleWorkspace( purchase ) ) { | |||
return i18n.translate( 'Productivity Tools and Mailboxes at %(domain)s', { | |||
return i18n.translate( 'Mailboxes and Productivity Tools at %(domain)s', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -41,10 +41,10 @@ export function getSublabel( serverCartItem: ResponseCartProduct ): string { | |||
|
|||
if ( isGoogleWorkspace( serverCartItem ) || isGSuiteOrExtraLicenseProductSlug( productSlug ) ) { | |||
if ( isRenewalItem ) { | |||
return String( translate( 'Productivity Tools and Mailboxes Renewal' ) ); | |||
return String( translate( 'Mailboxes and Productivity Tools Renewal' ) ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 18 times:
translate( 'Productivity Tools and Mailboxes' )
ES Score: 9
} | ||
|
||
return String( translate( 'Productivity Tools and Mailboxes' ) ); | ||
return String( translate( 'Mailboxes and Productivity Tools' ) ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 18 times:
translate( 'Productivity Tools and Mailboxes Renewal' )
ES Score: 12
Here is how your PR affects size of JS and CSS bundles shipped to the user's browser: Sections (~129 bytes added 📈 [gzipped])
Sections contain code specific for a given set of routes. Is downloaded and parsed only when a particular route is navigated to. Legend What is parsed and gzip size?Parsed Size: Uncompressed size of the JS and CSS files. This much code needs to be parsed and stored in memory. Generated by performance advisor bot at iscalypsofastyet.com. |
515dcf0
to
b4a4f44
Compare
|
||
<tr className="email-providers-in-depth-comparison-table__separator"> | ||
<td className="email-providers-in-depth-comparison-table__feature"> | ||
{ translate( 'Collaboration' ) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 36 times:
translate( 'Collaboration', { context: 'Theme Showcase term name'} )
ES Score: 18
See 1 additional suggestions in the PR translation status page
support: translate( '24/7 support via email' ), | ||
tools: translate( 'Gmail, Calendar, Meet, Chat, Drive, Docs, Sheets, Slides and more' ), | ||
tools: translate( | ||
'Gmail, Calendar, Contacts, Meet, Chat, Drive, Docs, Sheets, Slides and more' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🆗 This change will be queued for retranslation. We'll use the existing translations in the meantime.
}, | ||
supportUrl: ADDING_GSUITE_TO_YOUR_SITE, | ||
table: { | ||
access: translate( 'Online & offline' ), | ||
collaboration: translate( 'Real-time' ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 22 times:
translate( 'Real-time', { context: 'Real-time VaultPress Backups'} )
ES Score: 14
See 1 additional suggestions in the PR translation status page
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me 👍
WDYT @semihakocer?
Actually, one thing that bothers me, when adding new comparison points to emphasize why Google is a good solution, it seems like we are showing Professional email as a partial/not so good solution.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Functionally, this is working as noted, but I do have some comments on the content.
EmailProviderFeatures.propTypes = { | ||
features: PropTypes.oneOfType( [ PropTypes.node, PropTypes.string ] ), | ||
features: PropTypes.arrayOf( PropTypes.oneOfType( [ PropTypes.node, PropTypes.string ] ) ) | ||
.isRequired, | ||
logos: PropTypes.arrayOf( PropTypes.object ), | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor note, but it may be worth using TS-in-JSDoc comments rather than PropTypes, especially for functional components. As an example, this could be something like:
/**
* @param { { features: TranslateResult[], logos?: Component[] }} features should be a list of features to list, and logos should be a list of logo objects.
*/
function EmailProviderFeatures( { features, logos } ) {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for providing an example. I think it would be better to convert this component to TypeScript but that's for another day 🙂.
client/my-sites/email/email-providers-comparison/in-depth/data.tsx
Outdated
Show resolved
Hide resolved
client/my-sites/email/email-providers-comparison/in-depth/data.tsx
Outdated
Show resolved
Hide resolved
client/my-sites/email/email-providers-comparison/in-depth/data.tsx
Outdated
Show resolved
Hide resolved
...providers-stacked-comparison/email-provider-stacked-card/email-provider-stacked-features.tsx
Show resolved
Hide resolved
translate( '30GB storage' ), | ||
translate( 'Email, calendars, and contacts' ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we call out that users can access their email from WordPress.com as a feature? We may need to wait for the embedded inbox to ship before we promote that feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can add it for now without highlighting it maybe.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would vote for waiting to avoid confusing users.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good
b4a4f44
to
522faa4
Compare
@@ -64,7 +65,9 @@ const professionalEmailCardInformation: ProviderCardProps = { | |||
expandButtonLabel: translate( 'Select' ), | |||
providerKey: 'titan', | |||
showExpandButton: true, | |||
description: translate( 'Integrated email solution for your WordPress.com site.' ), | |||
description: translate( | |||
'Integrated email solution with powerful features. Manage your email and more on any device.' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 19 times:
translate( 'Easy-to-use email with incredibly powerful features. Manage your email and more on any device.' )
ES Score: 6
support: translate( '24/7 support via email' ), | ||
tools: translate( 'Integrated email management, Inbox, Calendar and Contacts' ), | ||
tools: translate( 'Inbox, Calendar and Contacts' ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 18 times:
translate( 'Inbox, calendars, and contacts' )
ES Score: 11
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've removed Integrated email management
as it's not a tool per see. Or maybe I don't understand what it refers to? If that means that we can manage mailboxes from Calypso then it's also the case for Google Workspace.
importing: translate( 'Easy to import your existing emails and contacts' ), | ||
storage: translate( '30GB storage' ), | ||
storage: translate( '30GB storage for emails and cloud storage' ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ String reuse speeds up translation and improves consistency. The following string might make a good alternative and has already been translated 22 times:
translate( '30GB or unlimited cloud storage' )
ES Score: 7
See 1 additional suggestions in the PR translation status page
@@ -64,7 +66,7 @@ const getTitanFeatures = ( isMonthlyProduct = true ) => { | |||
translate( 'Send and receive from your custom domain' ), | |||
translate( '30GB storage' ), | |||
translate( 'Email, calendars, and contacts' ), | |||
translate( 'One-click import of existing emails and contacts' ), | |||
translate( '24/7 support via email' ), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These changes are for the old Email Comparison
page that we only show in the domain upsell flow. I'm just making sure that we use the same list of features here.
if ( ! domain ) { | ||
return <></>; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This fixes an error triggered when refreshing the In-Depth Comparison
page.
@daledupreez @semihakocer : I've took your feedback into account, and refined the copy again. This is still open for debate, so do not hesitate to comment 🙂. I've also made some very minor CSS tweaks. |
The changes look good to me @stephanethomas! Thanks for all your work 🚢 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This LGTM! My only request is that we change two uses of "Include" to "Includes" before we request translation.
I also want to note that we have additional comments for the Professional Email features that we should look at in a follow-up PR, possibly after further discussion: p1643385695547649/1643101084.008900-slack-C01QR3S1QJH
522faa4
to
8ffd43a
Compare
This Pull Request is now available for translation here: https://translate.wordpress.com/deliverables/7124224 Thank you @stephanethomas for including a screenshot in the description! This is really helpful for our translators. |
Translation for this Pull Request has now been finished. |
…light email before the rest
…Email Comparison page
…price component This fixes the following error: Uncaught TypeError: Cannot read properties of undefined (reading 'type') at isRegisteredDomain (registered-domains.js:13:17) at eval (gsuite-supported-domain.js:28:100) at Array.filter (<anonymous>) at getGSuiteSupportedDomains (gsuite-supported-domain.js:23:18) at hasGSuiteSupportedDomain (gsuite-supported-domain.js:45:10) at GoogleWorkspacePrice (google-workspace.tsx:51:127) at renderWithHooks (react-dom.development.js:14985:18) at mountIndeterminateComponent (react-dom.development.js:17811:13) at beginWork (react-dom.development.js:19049:16) at HTMLUnknownElement.callCallback (react-dom.development.js:3945:14)
8ffd43a
to
0da85c9
Compare
This pull request updates the copy of the
Email Comparison
page as well as theIn-Depth Comparison
page to address a number of comments made internally on Slack. I've also made a number of refinements with the aim of making this copy more consistent as well as providing users with more points of comparison, so that they can chose the most appropriate solution for their needs (some features such as real-time collaboration should make it more obvious why Google Workspace and Professional Email have different price points):Email Comparison
pageIn-Depth Comparison
page (desktop)In-Depth Comparison
page (mobile)Purchases
pageNote I've also updated the label of Google Workspace on the
Purchases
page, so it mentions mailboxes rather than productivity tools first:Testing instructions
Note you will have to append
?flags=emails/in-depth-comparison
to the url of the page (and reload it) if you're testing those changes on a live branch as this feature has not been enabled on this environment yet:git checkout update/copy-in-email-comparison-pages
and start your server, or access a live branchEmails
pageAdd Email
button of that domain to access theEmail Comparison
pageSee how they compare
link to access theIn-Depth Comparison
pagePurchases
page