From b7aadef64d8a30d19e0cd5be35b2622d75656f0f Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Tue, 30 Jan 2024 14:01:11 +0000 Subject: [PATCH] I18N: Improve singular lookup of pluralized strings. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensures that looking up a singular that is also used as a pluralized string works as expected. This improves compatibility for cases where for example both `__( 'Product' )` and `_n( 'Product', 'Products’, num )` are used in a project, where both will use the same translation for the singular version. Although such usage is not really recommended nor documented, it must continue to work in the new i18n library in order to maintain backward compatibility and maintain expected behavior. See #59656. Built from https://develop.svn.wordpress.org/trunk@57386 git-svn-id: http://core.svn.wordpress.org/trunk@56892 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../l10n/class-wp-translation-file.php | 19 ++++++++++++++++++- wp-includes/version.php | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/wp-includes/l10n/class-wp-translation-file.php b/wp-includes/l10n/class-wp-translation-file.php index 93842bec10..f920ab1388 100644 --- a/wp-includes/l10n/class-wp-translation-file.php +++ b/wp-includes/l10n/class-wp-translation-file.php @@ -203,7 +203,24 @@ abstract class WP_Translation_File { $this->parse_file(); } - return $this->entries[ $text ] ?? false; + if ( isset( $this->entries[ $text ] ) ) { + return $this->entries[ $text ]; + } + + /* + * Handle cases where a pluralized string is only used as a singular one. + * For example, when both __( 'Product' ) and _n( 'Product', 'Products' ) + * are used, the entry key will have the format "ProductNULProducts". + * Fall back to looking up just "Product" to support this edge case. + */ + foreach( $this->entries as $key => $value ) { + if ( str_starts_with( $key, $text . "\0" ) ) { + $parts = explode( "\0", $value ); + return $parts[0]; + } + } + + return false; } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 525b25e05f..21e4a2365e 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.5-alpha-57385'; +$wp_version = '6.5-alpha-57386'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.