Skip to content
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

Comments Title: Make non-editable #40817

Merged
merged 9 commits into from
May 6, 2022
Merged

Conversation

ockham
Copy link
Contributor

@ockham ockham commented May 4, 2022

What?

Make the Comments Title text non-editable by the user, i.e. hard-wire it to read "... responses to ...", while only retaining the option to display or hide the comments count and post title, respectively.

Why?

See this Slack discussion. Basically, using a <PlainText /> component with a placeholder to allow editing a string between a comment count and a post title breaks i18n.

How?

In order to be able to use a properly i18n'd string (via sprintf() with placeholders, _() and _n()), we have to say good-bye to allowing the user to edit that string, and instead add a bunch of conditionals to determine which i18n'd string to render, depending on whether or not we're showing the comments count and/or post title 😅

As a consequence, we need to remove the singleCommentLabel and multipleCommentsLabel attributes. A deprecation and corresponding test fixture is included in the PR.

Testing Instructions

  • On trunk, open the Site Editor. Navigate to the templates list, and select the Single Post template for editing.
  • Insert the Comment Query Loop block.
  • Select the Comments Title block (which is the first child of the Comments Query Loop block), and edit the placeholder by typing (e.g. replies to).
  • In the Block Inspector (sidebar), switch the block's Editing Mode to "Singular", and change edit the placeholder there as well (by changing it e.g. to One reply to .
  • Save the template.
  • Create a new post in the Post Editor, publish it, and view it. Post a comment to it. Verify that the Comments Title uses the text that you entered earlier.
  • Now switch to this PR's branch and rebuild Gutenberg.
  • Reload the post you were viewing. Verify that the Comments Title now uses the default text (e.g. One response to (rather than reply).
  • Navigate back to the Site Editor for the Single Post Template. Verify that it still loads the block properly. Verify that the Comments Title no longer reflects your earlier change, but is now also showing the default.
  • Select the Comments Title block, and change one of its remaining settings (e.g. disable "Show post title"). Save the template.
  • Switch to the Code Editor. Verify that the now-deprecated attributes (singleCommentLabel and multipleCommentsLabel) are gone.
  • Navigate to the post you created earlier, and view it. Verify that the change you made in the Site Editor took effect.

Screenshots or screencast

Before After
Bildschirmfoto 2022-05-04 um 19 03 40 Bildschirmfoto 2022-05-04 um 19 04 34

@ockham ockham added [Type] Bug An existing feature does not function as intended [Block] Comments Title Affects the Comments Title Block labels May 4, 2022
@ockham ockham self-assigned this May 4, 2022
@ockham ockham added this to In progress in Comments Loop block via automation May 4, 2022
@github-actions
Copy link

github-actions bot commented May 4, 2022

Size Change: +4.63 kB (0%)

Total Size: 1.23 MB

Filename Size Change
build/block-library/index.min.js 177 kB +53 B (0%)
build/components/index.min.js 227 kB +4.62 kB (+2%)
build/compose/index.min.js 11.3 kB +1 B (0%)
build/customize-widgets/index.min.js 11 kB -5 B (0%)
build/edit-navigation/index.min.js 15.8 kB -4 B (0%)
build/edit-post/index.min.js 30.1 kB -16 B (0%)
build/edit-site/index.min.js 47.4 kB -15 B (0%)
build/edit-widgets/index.min.js 16.3 kB -3 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.51 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 151 kB
build/block-editor/style-rtl.css 15 kB
build/block-editor/style.css 15 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 95 B
build/block-library/blocks/comments/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.53 kB
build/block-library/blocks/cover/style.css 1.53 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 333 B
build/block-library/blocks/group/editor.css 333 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.95 kB
build/block-library/blocks/navigation/style.css 1.94 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 395 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 69 B
build/block-library/blocks/post-comments-form/editor.css 69 B
build/block-library/blocks/post-comments-form/style-rtl.css 521 B
build/block-library/blocks/post-comments-form/style.css 521 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 527 B
build/block-library/blocks/post-comments/style.css 527 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.3 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.5 kB
build/block-library/style.css 11.5 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47 kB
build/components/style-rtl.css 15 kB
build/components/style.css 15 kB
build/core-data/index.min.js 14.5 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.66 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.58 kB
build/edit-navigation/style-rtl.css 4.05 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.02 kB
build/edit-post/style.css 7.02 kB
build/edit-site/style-rtl.css 7.95 kB
build/edit-site/style.css 7.93 kB
build/edit-widgets/style-rtl.css 4.41 kB
build/edit-widgets/style.css 4.4 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.67 kB
build/editor/style.css 3.67 kB
build/element/index.min.js 4.3 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.1 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.16 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@ockham ockham marked this pull request as ready for review May 4, 2022 17:08
Comment on lines +113 to +114
/* translators: %s: Post title. */
placeholder = sprintf( __( 'One response to %s' ), postTitle );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines +117 to +122
/* translators: 1: Number of comments, 2: Post title. */
_n(
'%1$s response to %2$s',
'%1$s responses to %2$s',
commentsCount
),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

);
}
} else if ( commentsCount === 1 ) {
placeholder = __( 'One response' );
Copy link
Contributor Author

@ockham ockham May 4, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

placeholder = sprintf( __( 'Responses to %s' ), postTitle );
}
} else if ( commentsCount === 1 ) {
placeholder = __( 'Response' );
Copy link
Contributor Author

@ockham ockham May 4, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

} else if ( commentsCount === 1 ) {
placeholder = __( 'Response' );
} else {
placeholder = __( 'Responses' );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

} else {
placeholder = sprintf(
/* translators: %s: Number of comments. */
_n( '%s responses', '%s responses', commentsCount ),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

String doesn't exist in Core yet. However, this is arguably needed to fix the issue at the core of this PR (use sprintf with placeholders).

} else if ( showPostTitle ) {
if ( commentsCount === 1 ) {
/* translators: %s: Post title. */
placeholder = sprintf( __( 'Response to %s' ), postTitle );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

String doesn't exist in Core yet. However, this is arguably needed to fix the issue at the core of this PR (use sprintf with placeholders).

@ockham ockham mentioned this pull request May 4, 2022
13 tasks
Copy link
Contributor

@peterwilsoncc peterwilsoncc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added some notes inline.

The main issue is the early translation of the number within the PHP leading to unexpected results.

'%1$s responses to %2$s',
$comments_count
),
$comments_count,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$comments_count,
number_format_i18n( $comments_count ),

$comments_title = sprintf(
/* translators: %s: Number of comments. */
_n( '%s responses', '%s responses', $comments_count ),
$comments_count
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$comments_count
number_format_i18n( $comments_count )

@@ -22,8 +22,8 @@ function render_block_core_comments_title( $attributes ) {
$show_post_title = ! empty( $attributes['showPostTitle'] ) && $attributes['showPostTitle'];
$show_comments_count = ! empty( $attributes['showCommentsCount'] ) && $attributes['showCommentsCount'];
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => $align_class_name ) );
$post_title = $show_post_title ? sprintf( '"%1$s"', get_the_title() ) : null;
$comments_count = number_format_i18n( get_comments_number() );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
$comments_count = number_format_i18n( get_comments_number() );
$comments_count = get_comments_number();

For the conditions and for the _n() calls this needs to be in integer form to work. In Japanese this will get translated to and have unexpected results below.

Copy link
Contributor

@cbravobernal cbravobernal May 5, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took the code from WordPress Core, and it seems that get_comments_number returns a string always.
Screenshot 2022-05-05 at 11 26 18

In Core, is not failing due to using == (Equal instead of Identical) on both translate_plural() L154 and select_plural_form() L122

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW, the docs say

Return
(string|int) If the post exists, a numeric string representing the number of comments the post has, otherwise 0.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posting this Slack message by @peterwilsoncc:

My main concern was the translation early, as the number will get converted outside the 0-9 character set in some languages.

I thought I was seeing an int when testing but that have been a numeric string.

I overall agree that using an i18n'd number (which is turned into a string that might contain non-numeric characters) seems problematic for _n() calls 🤔 Maybe we can err on the side of caution and do something similar as the theme-compat code in Core that @c4rl0sbr4v0 mentioned:

  • Use number_format_i18n( get_comments_number() ) only to substitute sprintf() placeholders
  • Use get_comments_number() as argument in _n(), and in conditions.

We can continue to use the $comments_count variable for one of those. (I'd lean towards number_format_i18n( get_comments_number() ) since it's longer.)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or maybe it's safest to drop the $comments_count variable altogether to make the difference a bit more explicit.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the code, putting the number format only on the sprint, but keeping $comments_count as a variable for comparisons and _n function.

$single_default_comment_label = $show_post_title ? __( 'Response to' ) : __( 'Response' );
if ( $show_comments_count ) {
$single_default_comment_label = $show_post_title ? __( 'One response to' ) : __( 'One response' );
if ( $show_comments_count && ! empty( $comments_count ) ) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The effect of the empty() is that if the comment count is enabled, zero comments will result in Responses or Responses on Post Title. Due to the try... catch in the JavaScript I suspect this could display differently in the editor.

Is that the intent?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the empty() was added because it's kind of a counterpart to the commentsCount !== undefined criterion on R110? cc/ @c4rl0sbr4v0

FWIW, I added that there in order to avoid an undefined responses to "Post Title" flash while loading. (This is only relevant to the Post Editor, where we're fetching the actual comments on the post, whereas in the Site Editor, we're using 3 hard-wired placeholders.)

Anyway, on the frontend, we bail early if there are no comments.

So I think we can safely remove the empty() criterion here

Suggested change
if ( $show_comments_count && ! empty( $comments_count ) ) {
if ( $show_comments_count ) {

(We might need to make sure we're using the correct variable type on R110 if we end up changing $comments_count's definition, see.)

@gziolo gziolo added the Internationalization (i18n) Issues or PRs related to internationalization efforts label May 5, 2022
@priethor priethor added this to In progress in WordPress 6.0.1 Editor via automation May 5, 2022
@priethor priethor removed this from In progress in WordPress 6.0.1 Editor May 5, 2022
@ockham
Copy link
Contributor Author

ockham commented May 5, 2022

Changes LGTM, but since I'm the PR author, I can't give formal approval. @peterwilsoncc Would ya mind? 🙏 😊

Copy link
Contributor

@peterwilsoncc peterwilsoncc left a 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, thanks.

@ockham ockham merged commit 9e2c238 into trunk May 6, 2022
Comments Loop block automation moved this from In progress to Done May 6, 2022
@ockham ockham deleted the remove/editable-comments-title branch May 6, 2022 06:46
@github-actions github-actions bot added this to the Gutenberg 13.3 milestone May 6, 2022
@adamziel adamziel added the Backport to WP 6.6 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label May 6, 2022
@gziolo
Copy link
Member

gziolo commented May 6, 2022

I cherry-picked this PR for WordPress 6.0 RC2 with 2560ee0.

@gziolo gziolo removed the Backport to WP 6.6 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label May 6, 2022
gziolo pushed a commit that referenced this pull request May 6, 2022
* Comments Title: Make non-editable

* Avoid showing 'undefined' while loading

* Update php to handle conditionals

* Rename comment title variable

* Add initial deprecation

* Add supports deprecation

* Add integration test for deprecation

* Remove not needed check

* Number format only on sprintf

Co-authored-by: Carlos Bravo <[email protected]>
@pandammonium
Copy link

I came here to find out why the comments title isn't editable. I get it, but I think the hard-coded HTML nevertheless has a problem.

Double quotation marks are hard-coded as part of the non-editable title, which is the norm in American English (AmE). However, in other varieties of English and in other languages, the quotation marks may be different. For example, in British English (BrE), single quotes are typically used (with some exceptions).

Is it possible to change the quotation marks used for
<!-- wp:comments-title {"showPostTitle":true} /-->
from the hard-coded ones (“…”) to <q>…</q> tags instead?

For example, instead of outputting this HTML:
<h2 id="comments" class="wp-block-comments-title">3 responses to “My blog post”</h2>
could this HTML be output instead:
<h2 id="comments" class="wp-block-comments-title">3 responses to <q>My blog post</q></h2>?

The result would be:
3 responses to “My blog post” [AmE]
or:
3 responses to ‘My blog post‘ [BrE],
with other languages using «…», « … », „…“, etc. as appropriate.

Not only would this help with internationalisation, but it would mean that the quotation marks fit the style used elsewhere on a given website (assuming that <q> tags are used elsewhere).

@cbravobernal
Copy link
Contributor

Thanks, @pandammonium, for the feedback!

I've looked for <q> tags on the code, and it would be the first time they appear in WordPress or the main themes. But that doesn't mean we should not add it, as the facts you mention are completely fine!

If only I had to add a caveat, the string '&#8220;%s&#8221;' is translatable, so I guess translators can use the quotation marks they prefer rather than being automated by the browser.

We can create a PR to address it if we want to get some more feedback, as we will change the markup, and maybe it will affect some themes. But it is a really quick win, just changing the quotation marks &#8220; and &#8221; per the q tag as you mention in this file:

$post_title = sprintf( __( '&#8220;%s&#8221;' ), get_the_title() );

$post_title = sprintf( '<q>%s</q>?', get_the_title()

Do you want to address it? I will be glad to review it and help in case you need it 😄

@pandammonium
Copy link

pandammonium commented Jun 15, 2022

Thanks for responding, @c4rl0sbr4v0! I agree with your caveat. A PR might be a good idea to see if <q> should be introduced elsewhere in the codebase.

I'd like to address it, but I don't know where to start 🤪 Please do help!

@ockham
Copy link
Contributor Author

ockham commented Jun 15, 2022

If only I had to add a caveat, the string '&#8220;%s&#8221;' is translatable, so I guess translators can use the quotation marks they prefer rather than being automated by the browser.

By consequence, isn't this particular issue something that can be addressed by "translating" the quotation marks in the British English language pack (assuming that it's widely agreed upon that single quotes should be used here)?

@pandammonium
Copy link

pandammonium commented Jun 15, 2022

assuming that it's widely agreed upon that single quotes should be used here

New Hart's Rules, a reputable style guide in the UK that deals with British, American and other varieties of English, states (§9.2.3):

Modern British practice is normally to enclose quoted matter between single quotation marks, and to use double quotation marks for a quotation within a quotation:
'Have you any idea', he said, 'what "red mercury" is?'
The order is often reversed in newspapers, and uniformly in US practice:
"Have you any idea," he said, "what 'red mercury' is?"

It's true in practice: compare a book published in the UK to one published in the USA.

By consequence, isn't this particular issue something that can be addressed by "translating" the quotation marks in the British English language pack … ?

That might be a better idea, yes, although it looks to me like all the double quotation marks have been 'translated' to double ones already. Furthermore, I don't see this particular instance in the list of translations, and I don't know how to add it. (I'm not really familiar with translations, tbh.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Comments Title Affects the Comments Title Block Internationalization (i18n) Issues or PRs related to internationalization efforts [Type] Bug An existing feature does not function as intended
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

None yet

6 participants