Cakephp i18n-构造函数失败-Intl异常

Cakephp i18n-构造函数失败-Intl异常,cakephp,internationalization,translation,intl,po,Cakephp,Internationalization,Translation,Intl,Po,我最近从我用Cakephp构建的应用程序中提取了字符串,这要归功于它们令人敬畏的i18n外壳。 然后我进行了翻译(从法语到英语),并将文件放在src/Locale中: src/ Locale/ default.po fr/ default.po 区域设置/文件夹中的第一个default.po的格式如下: msgid "View" msgstr "" fr/文件夹中的default.po: msgid "View" msgstr

我最近从我用Cakephp构建的应用程序中提取了字符串,这要归功于它们令人敬畏的i18n外壳。 然后我进行了翻译(从法语到英语),并将文件放在src/Locale中:

src/
    Locale/
        default.po 
        fr/
            default.po
区域设置/文件夹中的第一个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/…)不应该存在


这就成功了……

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


这就成功了…

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

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

请注意翻译字符串中的无效占位符
{}
,它当然应该是
{0}
以供参考: 我也遇到了同样的问题,结果是我的.po文件中出现了语法错误。就我而言:

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

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

您是否添加了此
使用蛋糕\I18n\I18n控制器顶部的行?而且你的本地代码可能是错误的。这将是
br\u FR
每当收到错误时,请始终发布完整的堆栈跟踪(理想情况下是从日志中以适当可读的方式复制),因为您可以看到调试工具包以某种方式参与其中。另外,请始终提及您的确切CakePHP版本(在
vendor/CakePHP/CakePHP/version.txt
中的最后一行),在这种情况下,也请提及调试工具包版本(
vendor/CakePHP/debug_kit/version.txt
)-谢谢@tarikul05是的,我添加了用法
Cake\I18n\I18n
。我不确定bf_FR,请看一下核心cakephp语言环境文件夹中的示例:)@ndm yep很抱歉!我编辑了我的帖子:-)如果这不是输出中的一个怪癖,那么
Cake\I18n\Translator::translate()
中的格式模式会更改,其中的空格无效(
{0,number,#,…
)。您是否为这些数字模式添加了翻译?在您的
default.po
文件中,或在其他可能存在的消息文件中?您是否添加了此
use-Cake\I18n\I18n;
行控制器顶部?您的本地代码也可能错误。如果收到错误,将是
br\u FR
,请始终发布完整的stacktrace(理想情况下是从日志中以适当可读的方式复制而来),正如您所看到的,调试工具包在某种程度上涉及其中。另外,请始终提及您的确切CakePHP版本(供应商/CakePHP/CakePHP/version.txt中的最后一行),在本例中,还包括调试工具包版本(
vendor/cakephp/debug\u kit/VERSION.txt
)-谢谢!@tarikul05是的,我添加了使用
Cake\I18n\I18n
。我不确定bf\u FR,请从核心cakephp区域设置文件夹查看此示例:)@ndm yep很抱歉!我编辑了我的帖子:-)如果这不是输出中的怪癖,格式模式会在
Cake\I18n\Translator::translate()
中更改,其中的空格无效(
{0,number,#,…
)。您是否在
default.po
文件或其他可能存在的邮件文件中添加了这些数字模式的翻译?