Symfonyob娱乐下载 2.6新增功能:告别ICU组件
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
如果您是Symfony开发ob娱乐下载人员,您可能遭受过臭名昭著的intl问题在安装或部署Symfony应用程序时。ob娱乐下载下面的错误消息是这个问题的常见症状:
12 3 4 5 6 7 8 9 10 11 12 13 14
从锁文件安装依赖项(包括require-dev)您的需求无法解析为可安装文件集的包。问题1 -安装请求为ob娱乐下载symfony / icu v1.2。X ->满足symfony/icu[v1ob娱乐下载.2.x]。- ob娱乐下载symfony/icu v1.2。X需要lib-icu >=4.4 ->请求的链接库icu安装了错误的版本或从您的系统中丢失,请确保有扩展提供它。问题2 - symfonob娱乐下载y/icu v1.2。X需要lib-icu >=4.4-> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it. - symfony/intl v2.5.0 requires symfony/icu ~1.0-RC -> satisfiable by symfony/icu[v1.2.x]. - Installation request为ob娱乐下载Symfony /intl v2.5.0 ->满足Symfony /intl[v2.5.0]。
好消息是欧宝平台是合法的吗在Syob娱乐下载mfony 2.6中,这个问题永远消失了.这与您安装PHP或特定操作系统的方式无关,您将永远不会再次看到此错误.此外,由于这个问题非常烦人,我们决定将其移植到以前的Symfony版本。ob娱乐下载这意味着在Symfony 2.3和2.5的新版本中,您将不会再看到这个问题ob娱乐下载.该问题将保留在Symfony 2.4中,因为不再维ob娱乐下载护该分支。
Symfony国际化的“大局”ob娱乐下载
为了更好地理解这个问题的原因及其解决方案,理解它是很重要的大局所涉及的项目和系统:
- 的系统的项目收集和维护国际化数据,例如国家和语言名称、货币元数据、数字格式、邮政编码和电话号码格式。CLDR数据用于苹果、谷歌、微软和IBM等公司开发的所有智能手机、操作系统和重要软件应用程序。
- 的ICU项目使用CLDR数据并在它们之上构建C和Java类,例如
NumberFormatter
,IntlDateFormatter
,排序器
而且ResourceBundle
. - 的PHP intl扩展使得一些ICU类可以在PHP中访问,但是它不捆绑CLDR数据。它使用系统上全局安装的数据(独立于PHP)。
- 的ob娱乐下载Symfony Icu组件包含所有CLDR数据,因为Symfony需要访问ob娱乐下载所有区域设置,独立于系统配置。我们甚至提供了不同的版本:如果你没有
intl
安装了扩展,你就有Icu了1.0.x
,它将数据以. php
文件。与intl
分机,你有提升
或1.2.x
将数据作为二进制文件发布,使用ResourceBundle
类。 - 的ob娱乐下载Symfony Intl组件做两件事:首先,它提供了对Icu组件数据的访问(
Intl:: *包()- >获得* ()
).其次,它为一些ICU类提供了部分PHP实现(NumberFormatter
)你可以在什么时候用intl
分机未安装。
理解问题
您可能知道,Composer使用两个名为composer.json
而且composer.lock
管理项目的依赖项。的composer.lock
文件存储已安装包版本的哈希值。
导致这个问题的工作流程通常如下:
- 开发一个,谁有
intl
扩展,安装或更新Symfony。ob娱乐下载 - 的
composer.lock
文件将包含Icu1.2.x
的版本。 - 开发一个提交
composer.lock
文件到存储库。 - 开发人员B,谁没有
intl
扩展,安装项目与通常作曲家安装
命令。 - 编写器尝试安装Icu
1.2.x
,这需要intl
,其结果就是臭名昭著的ob娱乐下载symfony / icu v1.2。X需要lib-icu >=4.4错误。 - 如果开发人员B执行
作曲家更新
命令,Composer将正确地检测到intl
未安装,将使用Icu1.0.x
.
理解解决方案
为了解决这个问题,我们Intl组件现在包含所有CLDR数据.结果,Icu组件已弃用因为不再需要了。
而且,当你没有intl
扩展安装,以前你只能访问CLDR数据在英语。现在,您可以访问所有地区的所有数据,而不管是否intl
是否安装。
考虑到CLDR数据中包含的大量信息,您可能会担心对Symfony总下载大小的影响。ob娱乐下载即使数据存储为JSON文件而不是二进制格式,压缩后的总大小也只有2 MB左右。
请注意这篇文章的大部分内容都是由Bernhard Schussek撰写的,他友好地向我解释了Symfony国际化子框架中涉及的所有部分。ob娱乐下载
评论
Intl README仍然显示:
替换层仅限于区域设置“en”。如果您想使用其他地区,则应该安装intl扩展。
?
我有一个基于Symfony 2.5的项目,需要在ob娱乐下载CentOS 6和PHP 5.5上运行。
所以我在作曲方面有以下几个方面
“php”:“> = 5.4.1之前”,
2ob娱乐下载.5“symfony / symfony”:“。*”,
[. .]
“ob娱乐下载symfony / icu”:“1.1.2”
在Symfony 2.5 -> 2.5.6的下一个版本ob娱乐下载后,我应该删除Symfony /icu依赖,它应该在EL6上正常工作?
最好的问候,
米甲
感谢所有贡献者的出色工作!
太好了。谢谢你修复这个!
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
Fabien Potencier is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now