Cakephp i18n - 构造函数失败 - 国际异常

Cakephp i18n - Constructor failed - Intl Exception

我最近从使用 Cakephp 构建的应用程序中提取了字符串,这要感谢它们出色的 i18n Shell。 然后我做了一个翻译(从法语到英语)并将文件放在 src/Locale:

src/
    Locale/
        default.po 
        fr/
            default.po

Locale/文件夹中的第一个default.po格式如下:

msgid "View"
msgstr ""

fr/文件夹中的default.po:

msgid "View"
msgstr "Vue"

在我的 App Controller 中,我想测试翻译:

public function initialize()
{
      parent::initialize();
      I18n::locale('fr');
      ...
}

但是我得到以下错误:

我尝试在网上查找信息,但一无所获。我也在几台机器上试过。

我做错了什么?

谢谢大家!

编辑:

蛋糕版本为3.3.12

调试工具包版本为 3.3.12

Error.log :

2017-03-14 17:18:54 Error: [IntlException] Constructor failed
Request URL: /
Stack Trace:
#0 /www/fitadmin/admin/vendor/cakephp/cakephp/src/I18n/Formatter/IcuFormatter.php(89): MessageFormatter->__construct('fr', '{0, number, #, ...') 
#1 /www/fitadmin/admin/vendor/cakephp/cakephp/src/I18n/Formatter/IcuFormatter.php(52): Cake\I18n\Formatter\IcuFormatter->_formatMessage('fr', '{0, number, #, ...', Array)
#2 /www/fitadmin/admin/vendor/cakephp/cakephp/src/I18n/Translator.php(150): Cake\I18n\Formatter\IcuFormatter->format('fr', '{0, number, #, ...', Array)
#3 /www/fitadmin/admin/vendor/cakephp/cakephp/src/I18n/functions.php(84): Cake\I18n\Translator->translate('{0,number,#,###...', Array)
#4 /www/fitadmin/admin/vendor/cakephp/cakephp/src/I18n/Number.php(92): __d('cake', '{0,number,#,###...', 2.2256164550781)
#5 /www/fitadmin/admin/vendor/cakephp/debug_kit/src/Panel/TimerPanel.php(125): Cake\I18n\Number::toReadableSize(2333728)
#6 /www/fitadmin/admin/vendor/cakephp/debug_kit/src/ToolbarService.php(191): DebugKit\Panel\TimerPanel->summary()
#7 /www/fitadmin/admin/vendor/cakephp/debug_kit/src/Routing/Filter/DebugBarFilter.php(139): DebugKit\ToolbarService->saveData(Object(Cake\Network\Request), Object(Cake\Network\Response))
#8 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Event/EventManager.php(426): DebugKit\Routing\Filter\DebugBarFilter->afterDispatch(Object(Cake\Event\Event), Object(Cake\Network\Request), Object(Cake\Network\Response))
#9 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#10 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#11 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(100): Cake\Http\ActionDispatcher->dispatchEvent('Dispatcher.afte...', Array)
#12 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/BaseApplication.php(83): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#13 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#14 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(62): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#15 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#16 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#17 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#18 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(81): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#19 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#20 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#21 /www/fitadmin/admin/vendor/cakephp/cakephp/src/Http/Server.php(90): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#22 /www/fitadmin/admin/webroot/index.php(37): Cake\Http\Server->run()
#23 {main}

阅读@ndm 的评论后,我查看了我的 .po 文件并试图从 cakephp 供应商文件夹中删除翻译。我注意到有一些不应该存在的绝对路径 (C: /xampp/...)。

成功了...

供参考: 我遇到了同样的问题,结果证明是我的 .po 文件中的语法错误。就我而言:

msgid "My name is {0}"
msgstr "Jag heter {}"

注意翻译字符串中的无效占位符 {},当然应该是 {0}.