Completed
Push — master ( a7cd2a...eabd6c )
by Stephen
38:42
created

WP_Locale   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 380
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0
Metric Value
wmc 19
lcom 1
cbo 0
dl 0
loc 380
rs 10

12 Methods

Rating   Name   Duplication   Size   Complexity  
C init() 0 109 8
A rtl_src_admin_notice() 0 4 1
A get_weekday() 0 3 1
A get_weekday_initial() 0 3 1
A get_weekday_abbrev() 0 3 1
A get_month() 0 3 1
A get_month_abbrev() 0 3 1
A get_meridiem() 0 3 1
A register_globals() 0 7 1
A __construct() 0 4 1
A is_rtl() 0 3 1
A _strings_for_pot() 0 8 1
1
<?php
2
/**
3
 * Date and Time Locale object
4
 *
5
 * @package WordPress
6
 * @subpackage i18n
7
 */
8
9
/**
10
 * Class that loads the calendar locale.
11
 *
12
 * @since 2.1.0
13
 */
14
class WP_Locale {
15
	/**
16
	 * Stores the translated strings for the full weekday names.
17
	 *
18
	 * @since 2.1.0
19
	 * @var array
20
	 */
21
	public $weekday;
22
23
	/**
24
	 * Stores the translated strings for the one character weekday names.
25
	 *
26
	 * There is a hack to make sure that Tuesday and Thursday, as well
27
	 * as Sunday and Saturday, don't conflict. See init() method for more.
28
	 *
29
	 * @see WP_Locale::init() for how to handle the hack.
30
	 *
31
	 * @since 2.1.0
32
	 * @var array
33
	 */
34
	public $weekday_initial;
35
36
	/**
37
	 * Stores the translated strings for the abbreviated weekday names.
38
	 *
39
	 * @since 2.1.0
40
	 * @var array
41
	 */
42
	public $weekday_abbrev;
43
44
	/**
45
	 * Stores the default start of the week.
46
	 *
47
	 * @since 4.4.0
48
	 * @var string
49
	 */
50
	public $start_of_week;
51
52
	/**
53
	 * Stores the translated strings for the full month names.
54
	 *
55
	 * @since 2.1.0
56
	 * @var array
57
	 */
58
	public $month;
59
60
	/**
61
	 * Stores the translated strings for the abbreviated month names.
62
	 *
63
	 * @since 2.1.0
64
	 * @var array
65
	 */
66
	public $month_abbrev;
67
68
	/**
69
	 * Stores the translated strings for 'am' and 'pm'.
70
	 *
71
	 * Also the capitalized versions.
72
	 *
73
	 * @since 2.1.0
74
	 * @var array
75
	 */
76
	public $meridiem;
77
78
	/**
79
	 * The text direction of the locale language.
80
	 *
81
	 * Default is left to right 'ltr'.
82
	 *
83
	 * @since 2.1.0
84
	 * @var string
85
	 */
86
	public $text_direction = 'ltr';
87
88
	/**
89
	 * The thousands separator and decimal point values used for localizing numbers.
90
	 *
91
	 * @since 2.3.0
92
	 * @access public
93
	 * @var array
94
	 */
95
	public $number_format;
96
97
	/**
98
	 * Sets up the translated strings and object properties.
99
	 *
100
	 * The method creates the translatable strings for various
101
	 * calendar elements. Which allows for specifying locale
102
	 * specific calendar names and text direction.
103
	 *
104
	 * @since 2.1.0
105
	 * @access private
106
	 *
107
	 * @global string $text_direction
108
	 * @global string $wp_version
109
	 */
110
	public function init() {
111
		// The Weekdays
112
		$this->weekday[0] = /* translators: weekday */ __('Sunday');
113
		$this->weekday[1] = /* translators: weekday */ __('Monday');
114
		$this->weekday[2] = /* translators: weekday */ __('Tuesday');
115
		$this->weekday[3] = /* translators: weekday */ __('Wednesday');
116
		$this->weekday[4] = /* translators: weekday */ __('Thursday');
117
		$this->weekday[5] = /* translators: weekday */ __('Friday');
118
		$this->weekday[6] = /* translators: weekday */ __('Saturday');
119
120
		// The first letter of each day.
121
		$this->weekday_initial[ __( 'Sunday' ) ]    = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Sunday initial' );
122
		$this->weekday_initial[ __( 'Monday' ) ]    = /* translators: one-letter abbreviation of the weekday */ _x( 'M', 'Monday initial' );
123
		$this->weekday_initial[ __( 'Tuesday' ) ]   = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Tuesday initial' );
124
		$this->weekday_initial[ __( 'Wednesday' ) ] = /* translators: one-letter abbreviation of the weekday */ _x( 'W', 'Wednesday initial' );
125
		$this->weekday_initial[ __( 'Thursday' ) ]  = /* translators: one-letter abbreviation of the weekday */ _x( 'T', 'Thursday initial' );
126
		$this->weekday_initial[ __( 'Friday' ) ]    = /* translators: one-letter abbreviation of the weekday */ _x( 'F', 'Friday initial' );
127
		$this->weekday_initial[ __( 'Saturday' ) ]  = /* translators: one-letter abbreviation of the weekday */ _x( 'S', 'Saturday initial' );
128
129
		// Abbreviations for each day.
130
		$this->weekday_abbrev[__('Sunday')]    = /* translators: three-letter abbreviation of the weekday */ __('Sun');
131
		$this->weekday_abbrev[__('Monday')]    = /* translators: three-letter abbreviation of the weekday */ __('Mon');
132
		$this->weekday_abbrev[__('Tuesday')]   = /* translators: three-letter abbreviation of the weekday */ __('Tue');
133
		$this->weekday_abbrev[__('Wednesday')] = /* translators: three-letter abbreviation of the weekday */ __('Wed');
134
		$this->weekday_abbrev[__('Thursday')]  = /* translators: three-letter abbreviation of the weekday */ __('Thu');
135
		$this->weekday_abbrev[__('Friday')]    = /* translators: three-letter abbreviation of the weekday */ __('Fri');
136
		$this->weekday_abbrev[__('Saturday')]  = /* translators: three-letter abbreviation of the weekday */ __('Sat');
137
138
		// The Months
139
		$this->month['01'] = /* translators: month name */ __( 'January' );
140
		$this->month['02'] = /* translators: month name */ __( 'February' );
141
		$this->month['03'] = /* translators: month name */ __( 'March' );
142
		$this->month['04'] = /* translators: month name */ __( 'April' );
143
		$this->month['05'] = /* translators: month name */ __( 'May' );
144
		$this->month['06'] = /* translators: month name */ __( 'June' );
145
		$this->month['07'] = /* translators: month name */ __( 'July' );
146
		$this->month['08'] = /* translators: month name */ __( 'August' );
147
		$this->month['09'] = /* translators: month name */ __( 'September' );
148
		$this->month['10'] = /* translators: month name */ __( 'October' );
149
		$this->month['11'] = /* translators: month name */ __( 'November' );
150
		$this->month['12'] = /* translators: month name */ __( 'December' );
151
152
		// The Months, genitive
153
		$this->month_genitive['01'] = /* translators: month name, genitive */ _x( 'January', 'genitive' );
0 ignored issues
show
Bug introduced by
The property month_genitive does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
154
		$this->month_genitive['02'] = /* translators: month name, genitive */ _x( 'February', 'genitive' );
155
		$this->month_genitive['03'] = /* translators: month name, genitive */ _x( 'March', 'genitive' );
156
		$this->month_genitive['04'] = /* translators: month name, genitive */ _x( 'April', 'genitive' );
157
		$this->month_genitive['05'] = /* translators: month name, genitive */ _x( 'May', 'genitive' );
158
		$this->month_genitive['06'] = /* translators: month name, genitive */ _x( 'June', 'genitive' );
159
		$this->month_genitive['07'] = /* translators: month name, genitive */ _x( 'July', 'genitive' );
160
		$this->month_genitive['08'] = /* translators: month name, genitive */ _x( 'August', 'genitive' );
161
		$this->month_genitive['09'] = /* translators: month name, genitive */ _x( 'September', 'genitive' );
162
		$this->month_genitive['10'] = /* translators: month name, genitive */ _x( 'October', 'genitive' );
163
		$this->month_genitive['11'] = /* translators: month name, genitive */ _x( 'November', 'genitive' );
164
		$this->month_genitive['12'] = /* translators: month name, genitive */ _x( 'December', 'genitive' );
165
166
		// Abbreviations for each month.
167
		$this->month_abbrev[ __( 'January' ) ]   = /* translators: three-letter abbreviation of the month */ _x( 'Jan', 'January abbreviation' );
168
		$this->month_abbrev[ __( 'February' ) ]  = /* translators: three-letter abbreviation of the month */ _x( 'Feb', 'February abbreviation' );
169
		$this->month_abbrev[ __( 'March' ) ]     = /* translators: three-letter abbreviation of the month */ _x( 'Mar', 'March abbreviation' );
170
		$this->month_abbrev[ __( 'April' ) ]     = /* translators: three-letter abbreviation of the month */ _x( 'Apr', 'April abbreviation' );
171
		$this->month_abbrev[ __( 'May' ) ]       = /* translators: three-letter abbreviation of the month */ _x( 'May', 'May abbreviation' );
172
		$this->month_abbrev[ __( 'June' ) ]      = /* translators: three-letter abbreviation of the month */ _x( 'Jun', 'June abbreviation' );
173
		$this->month_abbrev[ __( 'July' ) ]      = /* translators: three-letter abbreviation of the month */ _x( 'Jul', 'July abbreviation' );
174
		$this->month_abbrev[ __( 'August' ) ]    = /* translators: three-letter abbreviation of the month */ _x( 'Aug', 'August abbreviation' );
175
		$this->month_abbrev[ __( 'September' ) ] = /* translators: three-letter abbreviation of the month */ _x( 'Sep', 'September abbreviation' );
176
		$this->month_abbrev[ __( 'October' ) ]   = /* translators: three-letter abbreviation of the month */ _x( 'Oct', 'October abbreviation' );
177
		$this->month_abbrev[ __( 'November' ) ]  = /* translators: three-letter abbreviation of the month */ _x( 'Nov', 'November abbreviation' );
178
		$this->month_abbrev[ __( 'December' ) ]  = /* translators: three-letter abbreviation of the month */ _x( 'Dec', 'December abbreviation' );
179
180
		// The Meridiems
181
		$this->meridiem['am'] = __('am');
182
		$this->meridiem['pm'] = __('pm');
183
		$this->meridiem['AM'] = __('AM');
184
		$this->meridiem['PM'] = __('PM');
185
186
		// Numbers formatting
187
		// See http://php.net/number_format
188
189
		/* translators: $thousands_sep argument for http://php.net/number_format, default is , */
190
		$thousands_sep = __( 'number_format_thousands_sep' );
191
192
		if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) {
193
			// Replace space with a non-breaking space to avoid wrapping.
194
			$thousands_sep = str_replace( ' ', '&nbsp;', $thousands_sep );
195
		} else {
196
			// PHP < 5.4.0 does not support multiple bytes in thousands separator.
197
			$thousands_sep = str_replace( array( '&nbsp;', '&#160;' ), ' ', $thousands_sep );
198
		}
199
200
		$this->number_format['thousands_sep'] = ( 'number_format_thousands_sep' === $thousands_sep ) ? ',' : $thousands_sep;
201
202
		/* translators: $dec_point argument for http://php.net/number_format, default is . */
203
		$decimal_point = __( 'number_format_decimal_point' );
204
205
		$this->number_format['decimal_point'] = ( 'number_format_decimal_point' === $decimal_point ) ? '.' : $decimal_point;
206
207
		// Set text direction.
208
		if ( isset( $GLOBALS['text_direction'] ) )
209
			$this->text_direction = $GLOBALS['text_direction'];
210
		/* translators: 'rtl' or 'ltr'. This sets the text direction for WordPress. */
211
		elseif ( 'rtl' == _x( 'ltr', 'text direction' ) )
212
			$this->text_direction = 'rtl';
213
214
		if ( 'rtl' === $this->text_direction && strpos( $GLOBALS['wp_version'], '-src' ) ) {
215
			$this->text_direction = 'ltr';
216
			add_action( 'all_admin_notices', array( $this, 'rtl_src_admin_notice' ) );
217
		}
218
	}
219
220
	/**
221
	 * Outputs an admin notice if the /build directory must be used for RTL.
222
	 *
223
	 * @since 3.8.0
224
	 * @access public
225
	 */
226
	public function rtl_src_admin_notice() {
227
		/* translators: %s: Name of the directory (build) */
228
		echo '<div class="error"><p>' . sprintf( __( 'The %s directory of the develop repository must be used for RTL.' ), '<code>build</code>' ) . '</p></div>';
229
	}
230
231
	/**
232
	 * Retrieve the full translated weekday word.
233
	 *
234
	 * Week starts on translated Sunday and can be fetched
235
	 * by using 0 (zero). So the week starts with 0 (zero)
236
	 * and ends on Saturday with is fetched by using 6 (six).
237
	 *
238
	 * @since 2.1.0
239
	 * @access public
240
	 *
241
	 * @param int $weekday_number 0 for Sunday through 6 Saturday
242
	 * @return string Full translated weekday
243
	 */
244
	public function get_weekday($weekday_number) {
245
		return $this->weekday[$weekday_number];
246
	}
247
248
	/**
249
	 * Retrieve the translated weekday initial.
250
	 *
251
	 * The weekday initial is retrieved by the translated
252
	 * full weekday word. When translating the weekday initial
253
	 * pay attention to make sure that the starting letter does
254
	 * not conflict.
255
	 *
256
	 * @since 2.1.0
257
	 * @access public
258
	 *
259
	 * @param string $weekday_name
260
	 * @return string
261
	 */
262
	public function get_weekday_initial($weekday_name) {
263
		return $this->weekday_initial[$weekday_name];
264
	}
265
266
	/**
267
	 * Retrieve the translated weekday abbreviation.
268
	 *
269
	 * The weekday abbreviation is retrieved by the translated
270
	 * full weekday word.
271
	 *
272
	 * @since 2.1.0
273
	 * @access public
274
	 *
275
	 * @param string $weekday_name Full translated weekday word
276
	 * @return string Translated weekday abbreviation
277
	 */
278
	public function get_weekday_abbrev($weekday_name) {
279
		return $this->weekday_abbrev[$weekday_name];
280
	}
281
282
	/**
283
	 * Retrieve the full translated month by month number.
284
	 *
285
	 * The $month_number parameter has to be a string
286
	 * because it must have the '0' in front of any number
287
	 * that is less than 10. Starts from '01' and ends at
288
	 * '12'.
289
	 *
290
	 * You can use an integer instead and it will add the
291
	 * '0' before the numbers less than 10 for you.
292
	 *
293
	 * @since 2.1.0
294
	 * @access public
295
	 *
296
	 * @param string|int $month_number '01' through '12'
297
	 * @return string Translated full month name
298
	 */
299
	public function get_month($month_number) {
300
		return $this->month[zeroise($month_number, 2)];
301
	}
302
303
	/**
304
	 * Retrieve translated version of month abbreviation string.
305
	 *
306
	 * The $month_name parameter is expected to be the translated or
307
	 * translatable version of the month.
308
	 *
309
	 * @since 2.1.0
310
	 * @access public
311
	 *
312
	 * @param string $month_name Translated month to get abbreviated version
313
	 * @return string Translated abbreviated month
314
	 */
315
	public function get_month_abbrev($month_name) {
316
		return $this->month_abbrev[$month_name];
317
	}
318
319
	/**
320
	 * Retrieve translated version of meridiem string.
321
	 *
322
	 * The $meridiem parameter is expected to not be translated.
323
	 *
324
	 * @since 2.1.0
325
	 * @access public
326
	 *
327
	 * @param string $meridiem Either 'am', 'pm', 'AM', or 'PM'. Not translated version.
328
	 * @return string Translated version
329
	 */
330
	public function get_meridiem($meridiem) {
331
		return $this->meridiem[$meridiem];
332
	}
333
334
	/**
335
	 * Global variables are deprecated. For backwards compatibility only.
336
	 *
337
	 * @deprecated For backwards compatibility only.
338
	 * @access private
339
	 *
340
	 * @global array $weekday
341
	 * @global array $weekday_initial
342
	 * @global array $weekday_abbrev
343
	 * @global array $month
344
	 * @global array $month_abbrev
345
	 *
346
	 * @since 2.1.0
347
	 */
348
	public function register_globals() {
349
		$GLOBALS['weekday']         = $this->weekday;
350
		$GLOBALS['weekday_initial'] = $this->weekday_initial;
351
		$GLOBALS['weekday_abbrev']  = $this->weekday_abbrev;
352
		$GLOBALS['month']           = $this->month;
353
		$GLOBALS['month_abbrev']    = $this->month_abbrev;
354
	}
355
356
	/**
357
	 * Constructor which calls helper methods to set up object variables
358
	 *
359
	 * @since 2.1.0
360
	 */
361
	public function __construct() {
362
		$this->init();
363
		$this->register_globals();
0 ignored issues
show
Deprecated Code introduced by
The method WP_Locale::register_globals() has been deprecated with message: For backwards compatibility only.

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
364
	}
365
366
	/**
367
	 * Checks if current locale is RTL.
368
	 *
369
	 * @since 3.0.0
370
	 * @return bool Whether locale is RTL.
371
	 */
372
	public function is_rtl() {
373
		return 'rtl' == $this->text_direction;
374
	}
375
376
	/**
377
	 * Register date/time format strings for general POT.
378
	 *
379
	 * Private, unused method to add some date/time formats translated
380
	 * on wp-admin/options-general.php to the general POT that would
381
	 * otherwise be added to the admin POT.
382
	 *
383
	 * @since 3.6.0
384
	 */
385
	public function _strings_for_pot() {
386
		/* translators: localized date format, see http://php.net/date */
387
		__( 'F j, Y' );
388
		/* translators: localized time format, see http://php.net/date */
389
		__( 'g:i a' );
390
		/* translators: localized date and time format, see http://php.net/date */
391
		__( 'F j, Y g:i a' );
392
	}
393
}
394
395
/**
396
 * Checks if current locale is RTL.
397
 *
398
 * @since 3.0.0
399
 *
400
 * @global WP_Locale $wp_locale
401
 *
402
 * @return bool Whether locale is RTL.
403
 */
404
function is_rtl() {
405
	global $wp_locale;
406
	return $wp_locale->is_rtl();
407
}
408