Spec-Zone.ru › Phalcon 3

Локализация

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

Spec-Zone.ru

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