|
5 | 5 | The Intl Component
|
6 | 6 | ==================
|
7 | 7 |
|
8 |
| - A PHP replacement layer for the C `intl extension`_ that includes additional |
9 |
| - data from the ICU library. |
| 8 | + A PHP replacement layer for the C `intl extension`_ that also provides |
| 9 | + access to the localization data of the `ICU library`_. |
10 | 10 |
|
11 |
| -.. note:: |
| 11 | +.. versionadded:: 2.3 |
| 12 | + |
| 13 | + The Intl component was added in Symfony 2.3. In earlier versions of Symfony, |
| 14 | + you should use the Locale component instead. |
| 15 | + |
| 16 | +.. caution:: |
12 | 17 |
|
13 | 18 | The replacement layer is limited to the locale "en". If you want to use
|
14 | 19 | other locales, you should `install the intl extension`_ instead.
|
@@ -55,17 +60,98 @@ expose them manually by adding the following lines to your autoload code::
|
55 | 60 | $loader->registerPrefixFallback('/path/to/Icu/Resources/stubs');
|
56 | 61 | }
|
57 | 62 |
|
58 |
| -.. note:: |
| 63 | +.. sidebar:: ICU and Deployment Problems |
| 64 | + |
| 65 | + The intl extension internally uses the `ICU library`_ to obtain localization |
| 66 | + data such as number formats in different languages, country names and more. |
| 67 | + To make this data accessible to userland PHP libraries, Symfony2 ships a copy |
| 68 | + in the `ICU component`_. |
| 69 | + |
| 70 | + Depending on the ICU version compiled with your intl extension, a matching |
| 71 | + version of that component needs to be installed. Sounds complicated, but usually |
| 72 | + Composer does this for you automatically: |
| 73 | + |
| 74 | + * 1.0.*: when the intl extension is not available |
| 75 | + * 1.1.*: when intl is compiled with ICU 4.0 or higher |
| 76 | + * 1.2.*: when intl is compiled with ICU 4.4 or higher |
| 77 | + |
| 78 | + These versions are important when you deploy your application to a **server with |
| 79 | + a lower ICU version** than your development machines, because deployment will |
| 80 | + fail if |
| 81 | + |
| 82 | + * the development machines are compiled with ICU 4.4 or higher, but the |
| 83 | + server is compiled with a lower ICU version than 4.4; |
| 84 | + * the intl extension is available on the development machines but not on |
| 85 | + the server. |
| 86 | + |
| 87 | + For example, consider that your development machines ship ICU 4.8 and the server |
| 88 | + ICU 4.2. When you run ``php composer.phar update`` on the development machine, version |
| 89 | + 1.2.* of the ICU component will be installed. But after deploying the |
| 90 | + application, ``php composer.phar install`` will fail with the following error: |
| 91 | + |
| 92 | + .. code-block:: bash |
| 93 | +
|
| 94 | + $ php composer.phar install |
| 95 | + Loading composer repositories with package information |
| 96 | + Installing dependencies from lock file |
| 97 | + Your requirements could not be resolved to an installable set of packages. |
| 98 | +
|
| 99 | + Problem 1 |
| 100 | + - symfony/icu 1.2.x requires lib-icu >=4.4 -> the requested linked |
| 101 | + library icu has the wrong version installed or is missing from your |
| 102 | + system, make sure to have the extension providing it. |
| 103 | +
|
| 104 | + The error tells you that the requested version of the ICU component, version |
| 105 | + 1.2, is not compatible with PHP's ICU version 4.2. |
| 106 | + |
| 107 | + One solution to this problem is to run ``php composer.phar update`` instead of |
| 108 | + ``php composer.phar install``. It is highly recommended **not** to do this. The |
| 109 | + ``update`` command will install the latest versions of each Composer dependency |
| 110 | + to your production server and potentially break the application. |
| 111 | + |
| 112 | + A better solution is to fix your composer.json to the version required by the |
| 113 | + production server. First, determine the ICU version on the server: |
| 114 | + |
| 115 | + .. code-block:: bash |
| 116 | +
|
| 117 | + $ php -i | grep ICU |
| 118 | + ICU version => 4.2.1 |
| 119 | +
|
| 120 | + Then fix the ICU component in your composer.json file to a matching version: |
| 121 | + |
| 122 | + .. code-block:: json |
| 123 | +
|
| 124 | + "require: { |
| 125 | + "symfony/icu": "1.1.*" |
| 126 | + } |
| 127 | +
|
| 128 | + Set the version to |
| 129 | + |
| 130 | + * "1.0.*" if the server does not have the intl extension installed; |
| 131 | + * "1.1.*" if the server is compiled with ICU 4.2 or lower. |
| 132 | + |
| 133 | + Finally, run ``php composer.phar update symfony/icu`` on your development machine, test |
| 134 | + extensively and deploy again. The installation of the dependencies will now |
| 135 | + succeed. |
59 | 136 |
|
60 |
| - The stub implementation only supports the locale ``en``. |
61 | 137 |
|
62 | 138 | Writing and Reading Resource Bundles
|
63 | 139 | ------------------------------------
|
64 | 140 |
|
65 |
| -The :phpclass:`ResourceBundle` class is not and will not be supported. Instead, |
66 |
| -this component ships a set of readers and writers for reading and writing arrays |
67 |
| -(or array-like objects) from/to resource bundle files. The following classes |
68 |
| -are supported: |
| 141 | +The :phpclass:`ResourceBundle` class is currently by this component. Instead, |
| 142 | +it includes a set of readers and writers for reading and writing arrays (or |
| 143 | +array-like objects) from/to resource bundle files. The following classes are |
| 144 | +supported: |
| 145 | + |
| 146 | +* `TextBundleWriter`_ |
| 147 | +* `PhpBundleWriter`_ |
| 148 | +* `BinaryBundleReader`_ |
| 149 | +* `PhpBundleReader`_ |
| 150 | +* `BufferedBundleReader`_ |
| 151 | +* `StructuredBundleReader`_ |
| 152 | + |
| 153 | +Continue reading if you are interested in how to use these classes. Otherwise |
| 154 | +skip this section and jump to `Accessing ICU Data`_. |
69 | 155 |
|
70 | 156 | TextBundleWriter
|
71 | 157 | ~~~~~~~~~~~~~~~~
|
@@ -192,15 +278,21 @@ locale will be merged. In order to suppress this behavior, the last parameter
|
192 | 278 |
|
193 | 279 | echo $reader->readEntry('/path/to/bundle', 'en', array('Data', 'entry1'), false);
|
194 | 280 |
|
195 |
| -Provided Resource Bundles |
196 |
| -------------------------- |
| 281 | +Accessing ICU Data |
| 282 | +------------------ |
197 | 283 |
|
198 | 284 | The ICU data is located in several "resource bundles". You can access a PHP
|
199 | 285 | wrapper of these bundles through the static
|
200 |
| -:class:`Symfony\\Component\\Intl\\Intl` class. |
| 286 | +:class:`Symfony\\Component\\Intl\\Intl` class. At the moment, the following |
| 287 | +data is supported: |
| 288 | + |
| 289 | +* `Language and Script Names`_ |
| 290 | +* `Country Names`_ |
| 291 | +* `Locales`_ |
| 292 | +* `Currencies`_ |
201 | 293 |
|
202 |
| -Languages and Scripts |
203 |
| -~~~~~~~~~~~~~~~~~~~~~ |
| 294 | +Language and Script Names |
| 295 | +~~~~~~~~~~~~~~~~~~~~~~~~~ |
204 | 296 |
|
205 | 297 | The translations of language and script names can be found in the language
|
206 | 298 | bundle::
|
@@ -230,8 +322,8 @@ defaults to the current default locale::
|
230 | 322 | $languages = Intl::getLanguageBundle()->getLanguageNames('de');
|
231 | 323 | // => array('ab' => 'Abchasisch', ...)
|
232 | 324 |
|
233 |
| -Countries |
234 |
| -~~~~~~~~~ |
| 325 | +Country Names |
| 326 | +~~~~~~~~~~~~~ |
235 | 327 |
|
236 | 328 | The translations of country names can be found in the region bundle::
|
237 | 329 |
|
@@ -300,13 +392,17 @@ be found in the currency bundle::
|
300 | 392 | All methods (except for
|
301 | 393 | :method:`Symfony\\Component\\Intl\\ResourceBundle\\CurrencyBundleInterface::getFractionDigits`
|
302 | 394 | and
|
303 |
| -:method:`Symfony\\Component\\Intl\\ResourceBundle\\CurrencyBundleInterface::getRoundingIncrement()`) |
| 395 | +:method:`Symfony\\Component\\Intl\\ResourceBundle\\CurrencyBundleInterface::getRoundingIncrement`) |
304 | 396 | accept the translation locale as last, optional parameter, which defaults to the
|
305 | 397 | current default locale::
|
306 | 398 |
|
307 | 399 | $currencies = Intl::getCurrencyBundle()->getCurrencyNames('de');
|
308 | 400 | // => array('AFN' => 'Afghanische Afghani', ...)
|
309 | 401 |
|
310 |
| -.. _Packagist: https://packagist.org/packages/symfony/locale |
| 402 | +That's all you need to know for now. Have fun at coding! |
| 403 | + |
| 404 | +.. _Packagist: https://packagist.org/packages/symfony/intl |
| 405 | +.. _ICU component: https://packagist.org/packages/symfony/icu |
311 | 406 | .. _intl extension: http://www.php.net/manual/en/book.intl.php
|
312 | 407 | .. _install the intl extension: http://www.php.net/manual/en/intl.setup.php
|
| 408 | +.. _ICU library: http://site.icu-project.org/ |
0 commit comments