Basic Usage
The common way to use Intl-Format is the Factory with already prepared formats for numbers, date, time and timezone values. There are some predefined type specifier that can be used with a prefix percent symbol, just like in sprintf.
$intlFormat = (new Budgegeria\IntlFormat\Factory())->createIntlFormat('en_US');
$date = new DateTime();
echo $intlFormat->format('Today is %date_short', $date);
// "Today is 3/1/16"
Like sprintf, you can have multiple values been formatted in your message:
$intlFormat = (new Budgegeria\IntlFormat\Factory())->createIntlFormat('en_US');
$date = new DateTime();
$number = 1002.25;
echo $intlFormat->format('At %time_short the value was %number', $date, $number);
// "At 5:30 AM the value was 1,002.25"
Intl-Format also supports argument swapping:
$intlFormat = (new Budgegeria\IntlFormat\Factory())->createIntlFormat('en_US');
$date = new DateTime();
$number = 1002.25;
echo $intlFormat->format('At %2$time_short the value was %1$number', $number, $date);
// "At 5:30 AM the value was 1,002.25"
In case something’s not right with the value for the given type specifier, a
Budgegeria\IntlFormat\Exception\InvalidValueException
is thrown. In case your type specifier isn’t well formed to
the given values, a Budgegeria\IntlFormat\Exception\InvalidTypeSpecifierException
is thown. Be sure to catch those
Exceptions.
You can catch every Exception of Intl-Format by using Budgegeria\IntlFormat\Exception\IntlFormatException
.
sprintf function
A custom implementation of the function sprintf
can be used to format values to php’s default locale:
// If en_US is the default locale of php
$date = new DateTime();
echo Budgegeria\IntlFormat\sprintf('Today is %date_short', $date);
// "Today is 3/1/16"
Predefined formats
Here are some lists of predefined type specifiers and their formats, that are already usable in Intl-Format.
Additional formatters
These formatters aren’t related to intl.
Create your custom formatter
You can extend this library with your own type specifiers and formats by using the Formatter interface
Budgegeria\IntlFormat\Formatter\FormatterInterface
.
use Budgegeria\IntlFormat\Formatter\FormatterInterface;
class MyFormatter implements FormatterInterface
{
public function has(string $typeSpecifier) : bool
{
return 'my_type_specifier' === $typeSpecifier;
}
public function formatValue(string $typeSpecifier, $value) : string
{
return $value . 'Bar';
}
}
$intlFormat = (new Budgegeria\IntlFormat\Factory())->createIntlFormat('en_US');
$intlFormat->addFormatter(new MyFormatter());
echo $intlFormat->format('My value is %my_type_specifier', 'foo');
// "My value is fooBar"
The method FormatterInterface::has()
checks if the given type specifier is part of your formatter. It is used internally
in the class Budgegeria\IntlFormat\IntlFormat
. If the type specifier is part of the formatter, the value will be
formatted with FormatterInterface::formatValue()
. Be sure to check if the given value is a valid one for your formatter
or throw a Budgegeria\IntlFormat\Exception\InvalidValueException
.
Overwriting
You can override a type specifier by adding a formatter containing an already existing type specifier to the IntlFormat instance. It doesn’t override a whole Formatter instance, only individual type specifier.