]+src=[\'"](.*?)[\'"][^>]+>/i', rawurldecode($img), $matches); if ($match) { return $matches[1]; } return ''; } } if (!function_exists('lang_i18n')) { /** * 获取国际化语言包 * 根据请求页面path获取分组语言对应值 * * @param string $name 语言包名称 * @param array $vars 替换变量 * @param string $lang 语言标识 * @return string */ function lang_i18n(string $name, array $vars = [], string $lang = ''): string { if (is_null($name)) { return ''; } $path = strtolower(request()->controller() . '/' . request()->action()); $lang_key = "{$path}.{$name}"; if (!Lang::has($lang_key, $lang)) { return Lang::get($name, $vars, $lang); } return Lang::get($lang_key, $vars, $lang); } } if (!function_exists('date_format_i18n')) { /** * 格式化日期时间为指定语言 * @param int|string $datetime 要格式化的日期时间字符串 * @param string $lang 语言标识 * @param bool $keep_time 是否保留时间 * @return string */ function date_format_i18n(int|string $datetime, string $lang = '', bool $keep_time = false): string { // 处理语言标识,若未提供则使用当前语言设置,并转换为小写 $lang = $lang ?: Lang::getLangSet(); $lang = strtolower($lang); // 处理日期时间输入 if (is_numeric($datetime)) { // 若输入为数字,直接作为时间戳处理 $timestamp = (int)$datetime; } elseif (is_string($datetime)) { // 尝试将字符串转换为时间戳 $timestamp = strtotime($datetime); if ($timestamp === false) { return ''; } } else { return ''; } // 根据$datetime传值决定格式 $date_parts = []; if (is_numeric($datetime)) { $date_str = date('Y-m-d', $timestamp); $date_parts = explode('-', $date_str); } elseif (is_string($datetime)) { if (preg_match('/^\d{4}$/', $datetime)) { $date_parts = [$datetime]; } elseif (preg_match('/^\d{4}-\d{1,2}$/', $datetime)) { $date_parts = explode('-', $datetime); } elseif (preg_match('/^\d{4}-\d{1,2}-\d{1,2}(.{1,9})?$/', $datetime)) { $date_parts = explode('-', $datetime); } } // 定义默认格式 $fmt = ''; // 根据语言和日期部分数量设置日期格式 $format = [ 'zh-cn' => [0 => '', 1 => 'Y', 2 => 'Y-m', 3 => 'Y-m-d'], 'en-us' => [0 => '', 1 => 'Y', 2 => 'F Y', 3 => 'F j, Y'], 'default' => [0 => '', 1 => 'Y', 2 => 'Y-m', 3 => 'Y-m-d'] ]; $fmt = $format[$lang][count($date_parts)] ?? $format['default'][count($date_parts)]; // 若需要保留时间 if ($keep_time) { if ($lang === 'en-us') { $fmt .= ', g:i A'; } else { $fmt .= ' H:i:s'; } } return date($fmt, $timestamp); } }