format($date); } /** * Formats a DateTime according to a translated format * * @param DateTime $date * @param string $pattern * @return string */ function date_format_translation(DateTime $date, $pattern = 'Y-m-d') { return $date->format(__('Date', $pattern)); } /** * Converts a string into a DateTime according to the IntlDateFormatter * * @param $dateString * @param string $pattern * @param string|null $forceLocale * @return DateTime|null */ function parse_intl_date($dateString, $pattern = DATE_FORMAT_DATE, $forceLocale = null) { global $locale; $local_locale = $forceLocale || $locale; $dateFormatter = IntlDateFormatter::create( $local_locale, IntlDateFormatter::FULL, IntlDateFormatter::FULL, date_default_timezone_get(), IntlDateFormatter::GREGORIAN, $pattern ); $timestamp = $dateFormatter->parse($dateString); try { return (new DateTime())->setTimestamp($timestamp); } catch (Exception $e) { return null; } } /** * Converts a string into a DateTime according to a translated format * * @param string $dateString * @param string $pattern * @return DateTime */ function parse_translation_date($dateString, $pattern = 'Y-m-d') { return DateTime::createFromFormat(__('Date', $pattern), $dateString); } /* i18n helper functions */ use Symfony\Component\Translation\Loader\PoFileLoader; use Symfony\Component\Translation\Translator; class __i18n { private static $translator; private static $fallbacktranslator; public static function init($locale) { self::$translator = new Translator($locale); self::$translator->addLoader('pofile', new PoFileLoader()); self::$translator->addResource('pofile', ROOT_DIR . "po/{$locale}.po", $locale); # Fallback: # For Symfony/Translation, empty strings are valid, but in po files, untranslated strings are "". # This means we cannot use the standard $translator->setFallbackLocales() mechanism :( self::$fallbacktranslator = new Translator(DEFAULT_LANGUAGE); self::$fallbacktranslator->addLoader('pofile', new PoFileLoader()); self::$fallbacktranslator->addResource('pofile', ROOT_DIR . "po/" . DEFAULT_LANGUAGE . ".po", DEFAULT_LANGUAGE); } public static function translate($key) { return self::$translator->trans($key) ?: self::$fallbacktranslator->trans($key); } } __i18n::init($locale); function __($section, $key) { return __i18n::translate($key); } function __f($section, $key, $args) { $msg = __i18n::translate($key); $args = array_slice(func_get_args(), 2); return vsprintf($msg, $args); }