[wp-trac] [WordPress Trac] #63642: Passing stringy number to _n() can result in a plural when singular is intended
WordPress Trac
noreply at wordpress.org
Tue Jul 1 04:00:51 UTC 2025
#63642: Passing stringy number to _n() can result in a plural when singular is
intended
--------------------------+------------------------------
Reporter: dd32 | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: I18N | Version: 6.5
Severity: normal | Keywords: needs-unit-tests
Focuses: |
--------------------------+------------------------------
Through #59656 a new translation layer was added that replaced the less-
performant pomo class, for ''some operations''.
WordPress passes numeric strings around quite often when they come from
database queries, for example, as the return value of `wp_count_posts()`.
This when used with `_n()` can result in an stringy numeric value being
passed to the `$count` parameter.
Long story short, POMO's [https://github.com/WordPress/wordpress-
develop/blob/fb4ec6f5b4499208fef7032eb1db63fde8f70a77/src/wp-
includes/pomo/translations.php#L213-L215 Translations::translate_plural()]
casts `$count` to an integer before strict comparisons to `1`, where as
[https://github.com/WordPress/wordpress-
develop/blob/fb4ec6f5b4499208fef7032eb1db63fde8f70a77/src/wp-includes/l10n
/class-wp-translations.php#L127 WP_Translations::translate_plural()]'s
fallback pluralisation expects that it'll only ever be passed an integer
and strictly compares that.
This can cause `_n( 'Singular', 'Plural', '1' )` to return `Plural` as `1
!== '1'` but it depends upon which translation handler the translation
hits, as it will return `Singular` with a POMO handler, and likely return
`Singular` if a translation exists via `WP_Translations`.
PR incoming, which casts at the deepest point. Potentially these casts
should live at a higher level, but this is the status-quo.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/63642>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list