You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.1 KiB
PHTML

<?php
/**
* Locale class.
*
* Locale-related functionality.
*
* @link https://github.com/googleforcreators/web-stories-wp
*
* @copyright 2020 Google LLC
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
*/
/**
* Copyright 2020 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
declare(strict_types = 1);
namespace Google\Web_Stories;
use DateTime;
use DateTimeZone;
/**
* Locale class.
*/
class Locale {
/**
* Returns locale settings for use on the client side.
*
* @since 1.1.0
*
* @return array<string,mixed> Locale settings.
*/
public function get_locale_settings(): array {
global $wp_locale;
/* translators: Date format, see https://www.php.net/manual/en/datetime.format.php */
$default_date_format = __( 'd/m/Y', 'web-stories' );
/* translators: Date format, see https://www.php.net/manual/en/datetime.format.php */
$default_time_format = __( 'g:i a', 'web-stories' );
/**
* Date format value.
*
* @var string $date_format
*/
$date_format = get_option( 'date_format', $default_date_format );
if ( empty( trim( $date_format ) ) ) {
$date_format = $default_date_format;
}
/**
* Time format value.
*
* @var string $time_format
*/
$time_format = get_option( 'time_format', $default_time_format );
if ( empty( trim( $time_format ) ) ) {
$time_format = $default_time_format;
}
/**
* Time zone string.
*
* @var string $timezone_string
*/
$timezone_string = get_option( 'timezone_string', 'UTC' );
$timezone_abbr = '';
if ( ! empty( $timezone_string ) ) {
$timezone_date = new DateTime( 'now', new DateTimeZone( $timezone_string ) );
$timezone_abbr = $timezone_date->format( 'T' );
}
/**
* Start of week value.
*
* @var int|string $start_of_week
*/
$start_of_week = get_option( 'start_of_week', 0 );
/**
* GMT Offset.
*
* @var int $gmt_offset
*/
$gmt_offset = get_option( 'gmt_offset', 0 );
return [
'locale' => str_replace( '_', '-', get_user_locale() ),
'dateFormat' => $date_format,
'timeFormat' => $time_format,
'gmtOffset' => (float) $gmt_offset,
'timezone' => $timezone_string,
'timezoneAbbr' => $timezone_abbr,
'months' => array_values( $wp_locale->month ),
'monthsShort' => array_values( $wp_locale->month_abbrev ),
'weekdays' => array_values( $wp_locale->weekday ),
'weekdaysShort' => array_values( $wp_locale->weekday_abbrev ),
'weekdaysInitials' => array_values( $wp_locale->weekday_initial ),
'weekStartsOn' => (int) $start_of_week,
];
}
}