Локализация
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 (английский, США)
- zh-Hant-TW (китайский, традиционное письмо, Тайвань)
- fr-CA, fr-FR (французский для Канады и Франции соответственно)
Форматирование сообщений на основе регионального формата
Часть создания локализованного приложения заключается в создании склеенных, лишенных языковой привязки сообщений. MessageFormatter позволяет создавать такие сообщения.
Вывод чисел, отформатированных в соответствии с определенным региональным форматом:
// Prints € 4 560
$formatter = new MessageFormatter("fr_FR", "€ {0, number, integer}");
echo $formatter->format(array(4560));
// Prints USD$ 4,560.5
$formatter = new MessageFormatter("en_US", "USD$ {0, number}");
echo $formatter->format(array(4560.50));
// Prints ARS$ 1.250,25
$formatter = new MessageFormatter("es_AR", "ARS$ {0, number}");
echo $formatter->format(array(1250.25));
Форматирование сообщений с использованием шаблонов даты и времени:
//Setting parameters
$time = time();
$values = array(7, $time, $time);
// Prints "At 3:50:31 PM on Apr 19, 2012, 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. 2012, 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–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/intl.html