Spec-Zone.ru › Phalcon 2

Локализация

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API