本文介绍三种在 php 中将日历的月份和星期名称本地化为法语的方法:使用 intl 扩展、自定义数组映射,以及注意事项(如 html 结构规范与弃用函数提醒)。
在构建多语言日历组件时,将日期名称(如“January”“Monday”)本地化为法语是常见需求。PHP 提供了多种实现方式,本文聚焦准确、可维护且符合现代实践的方案。
若服务器已启用 PECL intl 扩展(PHP 5.3+ 默认内置,建议启用),这是最健壮、可扩展的方案:
// 创建法语格式化器(fr_FR 区域设置)
$dateFormatter = \IntlDateFormatter::create(
'fr_FR', // 区域设置
\IntlDateFormatter::NONE,
\IntlDateFormatter::NONE,
date_default_timezone_get(),
\IntlDateFormatter::GREGORIAN,
'EEEE MMMM' // 完整星期名 + 完整月份名(如 "lundi janvier")
);
$timestamp = mktime(0, 0, 0, $month, 1, $year);
$date = new DateTime();
$date->setTimestamp($timestamp);
echo $dateFormatter->format($date); // 输出:lundi janvier(小写,符合法语习惯)? 提示:IntlDateFormatter 自动处理大小写、缩写、复数及文化特异性(如法语中月份和星期名通常小写),无需手动维护映射表。
若无法启用 intl,可使用预定义的法语名称数组,配合 da
te() 函数提取数字索引:
$days = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'];
$months = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
$firstDayOfMonth = mktime(0, 0, 0, $month, 1, $year);
$monthName = $months[date('n', $firstDayOfMonth) - 1]; // 'n' → 1-12,需减1得数组索引
$dayName = $days[date('N', $firstDayOfMonth) - 1]; // 'N' → 1=Mon, 7=Sun
// 更新你的原始代码:
$calendar = "