Локализация
Phalcon написан на C как расширение для PHP. Существует расширение PECL, предоставляющее функции для локализации приложений PHP, называемые intl. Начиная с PHP 5.4/5.5, это расширение включено в PHP. Его документацию можно найти на страницах официальной документации PHP.
Phalcon не предлагает эту функциональность, так как создание такого компонента было бы дублированием существующего кода.
В приведенных ниже примерах мы покажем, как реализовать функциональность расширения intl в приложениях, работающих на Phalcon.
Данное руководство не претендует на полное описание расширения intl. Для получения подробной информации обратитесь к документации расширения.
Определение оптимального локального языка
Существует несколько способов определения оптимального локального языка с помощью intl. Один из них — проверка заголовка HTTP «Accept-Language»:
$locale = Locale::acceptFromHttp($_SERVER["HTTP_ACCEPT_LANGUAGE"]); // Locale could be something like "en_GB" or "en" echo $locale;
Нижеприведенный метод возвращает идентификатор языка. Он используется для получения языковых, культурных или региональных настроек из API локального языка.
Примеры идентификаторов включают:
- en-US (английский, США)
- ru-RU (русский, Россия)
- zh-Hant-TW (китайский, традиционная письменность, Тайвань)
- fr-CA, fr-FR (французский для Канады и Франции соответственно)
Форматирование сообщений на основе локального языка
Создание локализованного приложения включает в себя создание склеенных сообщений, нейтральных к языку. MessageFormatter позволяет создавать такие сообщения.
Вывод чисел, отформатированных в соответствии с локальным языком:
// 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]);
Форматирование сообщений с использованием шаблонов времени и даты:
// Setting parameters
$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 предоставляет возможности сравнения строк с поддержкой соответствующих упорядочиваний, чувствительных к локальному языку. Ниже приведены примеры использования этого класса:
// Create a collator using Spanish locale
$collator = new Collator("es");
// Returns that the strings are equal, in spite of the emphasis on the "o"
$collator->setStrength(Collator::PRIMARY);
var_dump($collator->compare("una canción", "una cancion"));
// Returns that the strings are not equal
$collator->setStrength(Collator::DEFAULT_VALUE);
var_dump($collator->compare("una canción", "una cancion"));
Транслитерация
Transliterator обеспечивает транслитерацию строк:
$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
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/intl.html