01 Интернационализация
Phalcon написан на C как расширение для PHP. Существует расширение PECL, которое предлагает функции интернационализации для PHP-приложений, называемых intl. Начиная с PHP 5.4 / 5.5 это расширение связано с PHP. Его документацию можно найти на страницах официального руководства PHP.
Phalcon не предлагает эту функциональность, так как создание такого компонента будет реплицировать существующий код.
В приведенных ниже примерах мы покажем вам, как реализовать функциональность расширения intl в приложениях, работающих на Phalcon.
Узнать лучший доступный Locale
Существует несколько способов узнать наилучший доступный язык с помощью intl. Один из них - проверить заголовок HTTP-Accept-Language
:
<?php $locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); // Язык может быть чем-то вроде 'en_GB' или 'en' echo $locale;
Ниже метод возвращает локаль. Он используется для получения языка, культуры или регионального поведения из API Locale.
Примеры идентификаторов включают:
- en-US (Английский, Соединенные Штаты)
- ru-RU (Россия, Россия)
- zh-Hant-TW (Китайский, традиционный, Тайвань)
- fr-CA, fr-FR (Французский для Канады и Франции соответственно)
Форматирование сообщений на основе языка
Часть создания локализованного приложения - это создание конкатенированных сообщений, нейтральных для языка. MessageFormatter позволяет создавать эти сообщения.
Печать номеров, отформатированных на основе некоторых локалей:
<?php // Prints € 4 560 $formatter = new MessageFormatter('fr_FR', '€ {0, number, integer}'); echo $formatter->format([4560]); // Prints USD$ 4,560.5 $formatter = new MessageFormatter('en_US', 'USD$ {0, number}'); echo $formatter->format([4560.50]); // Prints ARS$ 1.250,25 $formatter = new MessageFormatter('es_AR', 'ARS$ {0, number}'); echo $formatter->format([1250.25]);
Форматирование сообщений с использованием шаблонов времени и даты:
<?php // Настройка параметров $time = time(); $values = [7, $time, $time]; // Prints 'At 3:50:31 PM on Apr 19, 2015, there was a disturbance on planet 7.' $pattern = 'At {1, time} on {1, date}, there was a disturbance on planet {0, number}.'; $formatter = new MessageFormatter('en_US', $pattern); echo $formatter->format($values); // Prints 'À 15:53:01 le 19 avr. 2015, il y avait une perturbation sur la planète 7.' $pattern = 'À {1, time} le {1, date}, il y avait une perturbation sur la planète {0, number}.'; $formatter = new MessageFormatter('fr_FR', $pattern); echo $formatter->format($values);
Локально-чувствительное сравнение
Класс Collator предоставляет возможность сравнения строк с поддержкой соответствующих пользовательских настроек сортировки. Проверьте приведенные ниже примеры использования этого класса:
<?php // Создание коллаборатора с использованием испанского языка $collator = new Collator('es'); // Возвращает, что строки равны, несмотря на акцент на 'o' $collator->setStrength(Collator::PRIMARY); var_dump($collator->compare('una canción', 'una cancion')); // Возвращает, что строки не равны $collator->setStrength(Collator::DEFAULT_VALUE); var_dump($collator->compare('una canción', 'una cancion'));
Транслитерация
Transliterator обеспечивает транслитерацию строк:
<?php $id = 'Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();'; $transliterator = Transliterator::create($id); $string = "garçon-étudiant-où-L'école"; echo $transliterator->transliterate($string); // garconetudiantoulecole