【发布时间】:2018-02-07 20:48:58
【问题描述】:
我的网站有一个托管服务提供商,它在服务器上提供 MessageFormatter 类(Linux,PHP 7.0.27),但它是一个旧的 ICU 版本(4.2.1),不支持我的消息 {number,plural,=0{# available} =1{# available} other{# available}} 和给出错误:
消息模式无效:构造函数失败
msgfmt_create:消息格式化程序创建失败:U_ILLEGAL_CHARACTER
...因为 =1 和 =2 符号。
我无法对服务器进行更改,如何强制使用 Yii2 提供的回退方法,效果很好?
【问题讨论】:
-
您是否安装了
php_intl扩展程序? -
@MuhammadOmerAslam 是的,这就是问题所在。如果只是没有安装旧版本,则不会有问题,因为会自动使用回退方法。
-
至少应该安装
ICU 4.8,并且有一个需求检查脚本,将/requirements.php复制到/web/requirements.php,然后使用浏览器通过http://localhost/requirements.php或终端php requirements.php访问它看看它打印了什么。并且应该有更多关于错误日志的信息。关于这个错误。 -
您在哪个环境中拥有
ICU < 4.8?甚至 Debian oldoldstable (wheezy) 也有ICU 4.8。 -
@MuhammadOmerAslam 看起来我的托管服务提供商正在使用 Red Hat 4.4.7(从 2012 年左右开始?),Linux 版本 2.6.32。
requirements.php也这么说 - ICU 太旧,ICU 数据丢失。而且他们不想在服务器上进行任何更改。
标签: php yii2 internationalization