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