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
相关产品推荐
相关产品推荐

