Ubuntu16.04下Symfony2.8已装intl仍报本地化异常求助
我来帮你排查这个问题!你已经安装了intl扩展但还是遇到这个报错,大概率是下面几个原因之一,咱们逐个解决:
1. 确认Web服务器使用的PHP版本和CLI一致
你用php -i | grep intl查看的是CLI版本的PHP配置,但你的Web服务器(Apache/Nginx)可能在用另一个PHP版本(比如PHP-FPM)。比如Ubuntu 16.04里,CLI默认是7.0,但Apache可能还在用5.6?
- 先检查Web环境的PHP状态:在项目根目录新建一个
info.php,内容写<?php phpinfo(); ?>,访问这个页面查看intl扩展是否加载,以及PHP版本和CLI是否一致。 - 如果版本不一致(比如Web用PHP5.6),给对应版本安装intl扩展:
sudo apt-get install php5.6-intl,然后重启Web服务器:sudo service apache2 restart(Nginx的话用sudo service nginx restart)。
2. 确保ICU库包含西班牙语Locale
intl扩展依赖ICU库,Ubuntu默认的ICU包可能没预装全语言的locale。你需要安装西班牙语的ICU语言包:
- 执行命令:
sudo apt-get install language-pack-es-base - 然后重启Web服务器和PHP-FPM(如果用了FPM:
sudo service php7.0-fpm restart)。
3. 强制Symfony使用intl扩展而非纯PHP实现
有时候即使装了intl扩展,Symfony可能还是 fallback到纯PHP的Intl组件(因为扩展没被正确识别)。你可以在app/config/config.yml里强制启用intl扩展:
framework: translator: { fallback: "%locale%" } intl: enabled: true
然后清除Symfony缓存:php app/console cache:clear(生产环境加上--env=prod)。
4. 验证intl扩展是否真的支持'es' locale
在CLI里运行一段测试代码,看看intl能不能识别西班牙语locale:
<?php $formatter = new IntlDateFormatter('es', IntlDateFormatter::FULL, IntlDateFormatter::FULL); echo $formatter->format(time()); ?>
如果运行这个脚本报错,说明你的intl扩展确实不支持'es',那需要升级ICU库:
sudo apt-get update sudo apt-get upgrade libicu-dev php7.0-intl
升级完成后重启相关服务。
内容的提问来源于stack exchange,提问作者Sephy
相关产品推荐
相关产品推荐

