NAME

Unicode::ICU::MessageFormat - ICU’s MessageFormat class

SYNOPSIS

use utf8;

my $formatter = Unicode::ICU::MessageFormat->new('en');

my $chars = $formatter->format('The time is {0, time} on {0, date}.', [time]);

# Named arguments are also acceptable:
my $chars = $formatter->format('The time is {now, time} on {now, date}.', { now => time() });

DESCRIPTION

This module facilitates formatting of ICU message pattern strings.

For a description of the message pattern format, see ICU’s documentation.

COMPATIBILITY

Named arguments require ICU 4.8 or later.

CONSTANTS

CAN_TAKE_NAMED_ARGUMENTS

A boolean that indicates whether format() can accept named arguments as well as positional.

METHODS

$obj = CLASS->new( [$LOCALE] )

Returns an instance of this class. If $LOCALE is not given then we’ll use ICU’s default.

$str = OBJ->format( $PATTERN [, \@ARGUMENTS | \%ARGUMENTS ] );

Formats the given $PATTERN with the given @ARGUMENTS and returns the resulting string.

Note the following important caveats:

Dates & Times

Unlike in ICU, dates & times are expressed in seconds rather than milliseconds.

Arguments

Arguments may be positional or (assuming a recent enough ICU) named.

Positional Arguments

If you give arguments as an array reference, then $PATTERN’s arguments MUST be a continuous sequence starting at 0. A “missing” argument will trigger an exception.

Note that ICU positional arguments are zero-indexed. This differs from Locale::Maketext and other systems that use 1-indexing. So if you do this:

# bad:
$formatter->format('My name is {1}.', ['Jonas'])

… you’ll get an exception. ({0} is what you want, not {1}.) If you really want, though, you could use named arguments; see below.

Named Arguments

NOTE: This library cannot handle named arguments for all ICU versions.

The above is probably easier to read and maintain as:

$formatter->format('My name is {name}.', { name => 'Jonas' })

You can also give named arguments for a positional-argument $PATTERN; in fact, if you do that, you can have “missing” arguments, e.g.:

# ok:
$formatter->format('My name is {1}.', { 1 => 'Jonas' })

$locale = OBJ->get_locale()

Returns OBJ’s configured locale.