You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twig format_datetime过滤器无法显示法语日期问题求助

问题描述

尝试使用Twig的format_datetime过滤器以法语显示日期,示例代码:

'2024-05-05 23:39:12'|format_datetime(locale='fr', pattern="EEEE dd MMMM YYYY")

预期显示:Dimanche 05 Mai 2024,实际显示:Sunday 05 May 2024

环境配置

  • Symfony 6.4
  • "twig/extra-bundle": "^3.9"
  • "twig/intl-extra": "^3.9"
  • Docker使用php:8.3-fpm-alpine镜像,已安装并配置intl扩展
  • 应用默认区域设置为fr

补充:该代码在PHP 8.1环境下可正常工作


解决方法

1. 补全Alpine镜像的法语区域数据

Alpine Linux采用musl libc,默认镜像中的ICU区域数据不完整,缺少法语相关的本地化资源。在Dockerfile中添加以下命令安装完整ICU数据或法语专属区域包:

# 安装完整ICU数据包
RUN apk add --no-cache icu-data-full

# 或仅安装法语区域数据
RUN apk add --no-cache icu-libs icu-data-fr

2. 明确指定完整区域标识

在Twig模板中使用fr_FR而非fr作为locale参数,避免区域匹配模糊:

'2024-05-05 23:39:12'|format_datetime(locale='fr_FR', pattern="EEEE dd MMMM YYYY")

也可在Symfony配置文件config/packages/framework.yaml中强制设置intl默认区域:

framework:
    default_locale: 'fr'
    intl:
        default_locale: 'fr_FR'

3. 设置容器系统区域环境变量

在Dockerfile中添加系统级区域环境变量,确保PHP intl扩展读取正确的本地化配置:

ENV LANG=fr_FR.UTF-8
ENV LC_ALL=fr_FR.UTF-8

4. 检查并升级ICU版本

PHP 8.3的intl扩展对ICU版本有要求,可在容器内执行以下命令查看当前ICU版本:

php -r "echo INTL_ICU_VERSION . PHP_EOL;"

若版本过低,执行以下命令升级ICU相关包:

RUN apk add --no-cache --upgrade icu-libs icu-data-full

内容的提问来源于stack exchange,提问作者lokiloq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:17:02