Commit 56eb5c22d8 for wordpress.org

commit 56eb5c22d8be453f180158a9b493837f2284fc51
Author: Pascal Birchler <pascal.birchler@gmail.com>
Date:   Tue Sep 17 20:58:15 2024 +0000

    I18N: Add a new way to determine whether a translation is available.

    A new `has_translation()` function can be used to determine whether a translation exists for a given string.

    Props louiswol94, swissspidy, drzraf, ckanitz, tomhine, mchirag2002, samuelsilvapt.
    Fixes #52696.


    Built from https://develop.svn.wordpress.org/trunk@59029


    git-svn-id: http://core.svn.wordpress.org/trunk@58425 1a063a9b-81f0-0310-95a4-ce76da25c4cd

diff --git a/wp-includes/l10n.php b/wp-includes/l10n.php
index 038b916049..1f3532a40d 100644
--- a/wp-includes/l10n.php
+++ b/wp-includes/l10n.php
@@ -1988,3 +1988,17 @@ function wp_get_word_count_type() {

 	return $wp_locale->get_word_count_type();
 }
+
+/**
+ * Returns a boolean to indicate whether a translation exists for a given string with optional text domain and locale.
+ *
+ * @since 6.7.0
+ *
+ * @param string  $singular   Singular translation to check.
+ * @param string  $textdomain Optional. Text domain. Default 'default'.
+ * @param ?string $locale     Optional. Locale. Default current locale.
+ * @return bool  True if the translation exists, false otherwise.
+ */
+function has_translation( string $singular, string $textdomain = 'default', ?string $locale = null ): bool {
+	return WP_Translation_Controller::get_instance()->has_translation( $singular, $textdomain, $locale );
+}
diff --git a/wp-includes/l10n/class-wp-translation-controller.php b/wp-includes/l10n/class-wp-translation-controller.php
index 295e3fcac7..c68cf32add 100644
--- a/wp-includes/l10n/class-wp-translation-controller.php
+++ b/wp-includes/l10n/class-wp-translation-controller.php
@@ -434,4 +434,22 @@ final class WP_Translation_Controller {

 		return $this->loaded_translations[ $locale ][ $textdomain ] ?? array();
 	}
+
+	/**
+	 * Returns a boolean to indicate whether a translation exists for a given string with optional text domain and locale.
+	 *
+	 * @since 6.7.0
+	 *
+	 * @param string  $singular   Singular translation to check.
+	 * @param string  $textdomain Optional. Text domain. Default 'default'.
+	 * @param ?string $locale     Optional. Locale. Default current locale.
+	 * @return bool  True if the translation exists, false otherwise.
+	 */
+	public function has_translation( string $singular, string $textdomain = 'default', ?string $locale = null ): bool {
+		if ( null === $locale ) {
+			$locale = $this->current_locale;
+		}
+
+		return false !== $this->locate_translation( $singular, $textdomain, $locale );
+	}
 }
diff --git a/wp-includes/version.php b/wp-includes/version.php
index 5e802961e7..ea579c8f67 100644
--- a/wp-includes/version.php
+++ b/wp-includes/version.php
@@ -16,7 +16,7 @@
  *
  * @global string $wp_version
  */
-$wp_version = '6.7-alpha-59028';
+$wp_version = '6.7-alpha-59029';

 /**
  * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.