Symfony3中已设置fr本地化,Twig日期仍无法转为法语
解决Symfony3中Twig本地化日期显示英文的问题
我之前在Symfony3项目里也踩过这个坑,你的配置看起来框架层面的设置是对的,但大概率是漏掉了几个关键细节,下面给你逐个排查方向:
1. 先确认PHP的intl扩展是否正常工作
Twig的localizeddate过滤器完全依赖PHP的intl扩展,如果这个扩展没装或者没启用,不管你怎么配置locale,都会直接 fallback 到英文格式。
- 检查方法:在项目根目录执行
php -m,看输出列表里有没有intl;或者写个简单的测试脚本输出var_dump(extension_loaded('intl'))的结果。 - 如果没装,根据你的系统补装:
- Ubuntu/Debian:
sudo apt-get install php-intl - CentOS/RHEL:
sudo yum install php-intl - Windows:打开php.ini,去掉
extension=intl前面的注释,重启web服务器。
- Ubuntu/Debian:
2. 验证Symfony是否真的加载了法语locale
有时候配置文件里写了fr,但实际请求层面的locale被覆盖了(比如路由参数、session缓存、之前的测试设置)。你可以在Twig里直接输出{{ app.request.locale }},或者在控制器里打印$this->get('request_stack')->getCurrentRequest()->getLocale(),看返回值是不是fr。
如果显示不是fr,先清一下缓存试试:
php bin/console cache:clear --env=dev
3. 检查系统是否有法语locale数据
有些服务器的intl扩展没有预装法语的locale数据包,这时候即使扩展装了,也没法渲染法语日期。
- 检查系统locale列表:执行
locale -a,看输出里有没有fr_FR.utf8或者类似的条目。 - 如果没有,生成对应的locale:
- Ubuntu/Debian:
sudo locale-gen fr_FR.utf8 - CentOS/RHEL:
sudo localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
操作完记得重启PHP-FPM或者web服务器。
- Ubuntu/Debian:
4. 确认Twig Intl扩展的注册是否正确
你配置里用的Twig_Extensions_Extension_Intl是旧的命名空间,Symfony3后期更推荐使用完整的PSR-4命名空间,而且要确保你已经通过Composer安装了twig扩展包:
先确认依赖已安装:
composer require twig/extensions
然后把services配置改成:
services: twig.extension.intl: class: Twig\Extensions\IntlExtension tags: - { name: twig.extension }
5. 手动指定locale测试
可以先在Twig里手动指定locale参数测试:
{{ 'now' | localizeddate('full', 'none', 'fr') }}
如果手动指定后能显示法语日期,说明全局locale没有正确传递到Twig过滤器,这时候可以在控制器里手动设置请求locale:
public function indexAction(Request $request) { $request->setLocale('fr'); // 业务逻辑... }
按照上面的步骤逐一排查,应该就能解决日期显示英文的问题了。
内容的提问来源于stack exchange,提问作者Heri
相关产品推荐
相关产品推荐

