~canonical-sysadmins/wordpress/4.8.1

« back to all changes in this revision

Viewing changes to wp-includes/locale.php

  • Committer: Barry Price
  • Date: 2016-08-17 04:50:12 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: barry.price@canonical.com-20160817045012-qfui81zhqnqv2ba9
Merge WP4.6 from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<?php
2
2
/**
3
 
 * Date and Time Locale object
 
3
 * Locale API
4
4
 *
5
5
 * @package WordPress
6
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' );
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();
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
 
}
 
7
 * @since 1.2.0
 
8
 */
 
9
 
 
10
/** WP_Locale class */
 
11
require_once ABSPATH . WPINC . '/class-wp-locale.php';
394
12
 
395
13
/**
396
14
 * Checks if current locale is RTL.