{{ $data->updated_at }}如何转换为法语格式日期(如20 Avril 2021)
针对你在Blade模板中要把$data->updated_at转成「日 法语全称月份 年」格式(比如示例的20 Avril 2021)的需求,直接用Laravel自带的Carbon时间对象能力就能搞定,完全不需要自己手动拆字符串、写法语月份映射表,具体实现如下:
核心实现逻辑
$data->updated_at在Laravel中默认就是已经实例化好的Carbon对象,自带多语言格式化能力,不需要额外做字符串类型转换。
直接在模板中输出(最快实现)
直接在原Blade变量的位置替换成带本地化调用的写法即可:
{{ ucfirst($data->updated_at->locale('fr_FR')->translatedFormat('d F Y')) }}
代码输出效果和你给的示例完全匹配:2021年4月20日就会渲染为20 Avril 2021。
这里要注意两个细节:
- 不要用Carbon自带的原生
format()方法,这个方法不会触发语言翻译,输出的永远是英文月份名 - 为什么要包一层
ucfirst():法语本地化输出的月份默认是全小写的(比如avril),加了这个函数就能把月份首字母转成大写,完全对齐示例的格式
如果是Carbon 2.0之前的旧版本,把translatedFormat换成formatLocalized即可,对应格式串改成%d %B %Y:
{{ ucfirst($data->updated_at->locale('fr_FR')->formatLocalized('%d %B %Y')) }}
项目级复用优化
如果你的项目里多个页面都需要输出法语格式的日期,别每次都重复写长串代码,直接在$data对应的模型类里加个访问器:
// 放到对应模型的类内部 public function getFrenchFormattedDateAttribute() { return ucfirst($this->updated_at->locale('fr_FR')->translatedFormat('d F Y')); }
之后在Blade模板里只要写短代码就能输出:
{{ $data->french_formatted_date }}
后续如果要调整日期格式,只需要改模型里这一处逻辑就行,不用全项目检索修改。
常见踩坑排查
- 如果输出的月份一直是英文,先检查PHP环境有没有开启
intl扩展,Carbon的多语言翻译是强依赖这个扩展的- 如果区域设置不生效,可以全局在服务启动的时候固定设置法语locale,不用每次调用方法的时候传
fr_FR参数
内容的提问来源于stack exchange,提问作者Saliou MBALO
相关产品推荐
相关产品推荐

