wp/wp-includes/class-wp-locale.php
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
child 22 8c2e4d02f4ef
--- a/wp/wp-includes/class-wp-locale.php	Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/class-wp-locale.php	Fri Sep 05 18:40:08 2025 +0200
@@ -13,14 +13,16 @@
  * @since 2.1.0
  * @since 4.6.0 Moved to its own file from wp-includes/locale.php.
  */
+#[AllowDynamicProperties]
 class WP_Locale {
 	/**
 	 * Stores the translated strings for the full weekday names.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $weekday;
+	public $weekday = array();
 
 	/**
 	 * Stores the translated strings for the one character weekday names.
@@ -31,41 +33,46 @@
 	 * @see WP_Locale::init() for how to handle the hack.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $weekday_initial;
+	public $weekday_initial = array();
 
 	/**
 	 * Stores the translated strings for the abbreviated weekday names.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $weekday_abbrev;
+	public $weekday_abbrev = array();
 
 	/**
 	 * Stores the translated strings for the full month names.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $month;
+	public $month = array();
 
 	/**
 	 * Stores the translated strings for the month names in genitive case, if the locale specifies.
 	 *
 	 * @since 4.4.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $month_genitive;
+	public $month_genitive = array();
 
 	/**
 	 * Stores the translated strings for the abbreviated month names.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $month_abbrev;
+	public $month_abbrev = array();
 
 	/**
 	 * Stores the translated strings for 'am' and 'pm'.
@@ -73,9 +80,10 @@
 	 * Also the capitalized versions.
 	 *
 	 * @since 2.1.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var string[]
 	 */
-	public $meridiem;
+	public $meridiem = array();
 
 	/**
 	 * The text direction of the locale language.
@@ -91,9 +99,10 @@
 	 * The thousands separator and decimal point values used for localizing numbers.
 	 *
 	 * @since 2.3.0
+	 * @since 6.2.0 Initialized to an empty array.
 	 * @var array
 	 */
-	public $number_format;
+	public $number_format = array();
 
 	/**
 	 * The separator string used for localizing list item separator.
@@ -104,6 +113,16 @@
 	public $list_item_separator;
 
 	/**
+	 * The word count type of the locale language.
+	 *
+	 * Default is 'words'.
+	 *
+	 * @since 6.2.0
+	 * @var string
+	 */
+	public $word_count_type;
+
+	/**
 	 * Constructor which calls helper methods to set up object variables.
 	 *
 	 * @since 2.1.0
@@ -123,7 +142,6 @@
 	 * @since 2.1.0
 	 *
 	 * @global string $text_direction
-	 * @global string $wp_version     The WordPress version string.
 	 */
 	public function init() {
 		// The weekdays.
@@ -201,8 +219,10 @@
 		$this->meridiem['AM'] = __( 'AM' );
 		$this->meridiem['PM'] = __( 'PM' );
 
-		// Numbers formatting.
-		// See https://www.php.net/number_format
+		/*
+		 * Numbers formatting.
+		 * See https://www.php.net/number_format
+		 */
 
 		/* translators: $thousands_sep argument for https://www.php.net/number_format, default is ',' */
 		$thousands_sep = __( 'number_format_thousands_sep' );
@@ -217,7 +237,7 @@
 
 		$this->number_format['decimal_point'] = ( 'number_format_decimal_point' === $decimal_point ) ? '.' : $decimal_point;
 
-		/* translators: used between list items, there is a space after the comma */
+		/* translators: Used between list items, there is a space after the comma. */
 		$this->list_item_separator = __( ', ' );
 
 		// Set text direction.
@@ -228,6 +248,9 @@
 		} elseif ( 'rtl' === _x( 'ltr', 'text direction' ) ) {
 			$this->text_direction = 'rtl';
 		}
+
+		// Set the word count type.
+		$this->word_count_type = $this->get_word_count_type();
 	}
 
 	/**
@@ -332,6 +355,7 @@
 	 *
 	 * For backward compatibility only.
 	 *
+	 * @since 2.1.0
 	 * @deprecated For backward compatibility only.
 	 *
 	 * @global array $weekday
@@ -339,8 +363,6 @@
 	 * @global array $weekday_abbrev
 	 * @global array $month
 	 * @global array $month_abbrev
-	 *
-	 * @since 2.1.0
 	 */
 	public function register_globals() {
 		$GLOBALS['weekday']         = $this->weekday;
@@ -388,4 +410,30 @@
 	public function get_list_item_separator() {
 		return $this->list_item_separator;
 	}
+
+	/**
+	 * Retrieves the localized word count type.
+	 *
+	 * @since 6.2.0
+	 *
+	 * @return string Localized word count type. Possible values are `characters_excluding_spaces`,
+	 *                `characters_including_spaces`, or `words`. Defaults to `words`.
+	 */
+	public function get_word_count_type() {
+
+		/*
+		 * translators: If your word count is based on single characters (e.g. East Asian characters),
+		 * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
+		 * Do not translate into your own language.
+		 */
+		$word_count_type = is_null( $this->word_count_type ) ? _x( 'words', 'Word count type. Do not translate!' ) : $this->word_count_type;
+
+		// Check for valid types.
+		if ( 'characters_excluding_spaces' !== $word_count_type && 'characters_including_spaces' !== $word_count_type ) {
+			// Defaults to 'words'.
+			$word_count_type = 'words';
+		}
+
+		return $word_count_type;
+	}
 }