Освоение PHP MessageFormatter: практическое руководство по мощной локализации

Привет, коллеги-разработчики! Сегодня мы окунемся в увлекательный мир форматирования сообщений PHP с использованием класса MessageFormatter. Если вы хотите повысить уровень своей игры по локализации и обеспечить удобство работы пользователям по всему миру, вы попали по адресу. В этой статье мы рассмотрим несколько методов и примеры кода, которые помогут вам использовать возможности MessageFormatter. Давайте начнем!

  1. Создание экземпляра MessageFormatter

Для начала создадим экземпляр MessageFormatter:

$message = "Hello, {name}! You have {count, plural, one{# notification} other{# notifications}}.";
$formatter = new MessageFormatter('en_US', $message);

В этом примере мы используем английский язык (США) и шаблон сообщения, включающий заполнители для динамического контента.

  1. Форматирование сообщений

После создания экземпляра MessageFormatterвы можете форматировать сообщения, передавая соответствующие значения заполнителям:

$name = "John";
$count = 3;
$formattedMessage = $formatter->format(['name' => $name, 'count' => $count]);
echo $formattedMessage;

Вывод будет таким: «Привет, Джон! У вас 3 уведомления». Обратите внимание, как значения заполнителей заменяются в форматированном сообщении.

  1. Множественное число

Множественное число — обычное требование при локализации. MessageFormatterпредоставляет мощный синтаксис для обработки форм множественного числа:

$message = "{count, plural, one{You have one notification.} other{You have # notifications.}}";
$formatter = new MessageFormatter('en_US', $message);
$count = 1;
echo $formatter->format(['count' => $count]); // Output: "You have one notification."
$count = 5;
echo $formatter->format(['count' => $count]); // Output: "You have 5 notifications."
  1. Выбор параметров

Иногда вам нужно выбрать конкретный вариант на основе значения. MessageFormatterпозволяет легко это сделать:

$message = "{gender, select, male{He is a programmer.} female{She is a programmer.} other{They are programmers.}}";
$formatter = new MessageFormatter('en_US', $message);
$gender = 'male';
echo $formatter->format(['gender' => $gender]); // Output: "He is a programmer."
$gender = 'female';
echo $formatter->format(['gender' => $gender]); // Output: "She is a programmer."
  1. Форматирование валюты

Если вы имеете дело с форматированием денежных единиц, MessageFormatterпоможет вам:

$message = "The total amount is {amount, number, currency}";
$formatter = new MessageFormatter('en_US', $message);
$amount = 42.99;
echo $formatter->format(['amount' => $amount]); // Output: "The total amount is $42.99."
  1. Форматирование даты и времени

Форматирование даты и времени в разных регионах упрощается с помощью MessageFormatter:

$message = "Today is {date, date, short} and the time is {time, time, medium}";
$formatter = new MessageFormatter('en_US', $message);
$date = new DateTime();
$time = new DateTime();
echo $formatter->format(['date' => $date, 'time' => $time]);

В результате будет выведено что-то вроде: «Сегодня 14.03.24, время 14:30:45».

Поздравляем! Теперь вы узнали о нескольких полезных методах работы с MessageFormatterв PHP. С помощью этих методов вы можете создавать динамические и локализованные сообщения, которые обеспечат удобство работы для пользователей по всему миру. Так что давайте, попробуйте и поднимите свою игру по локализации на новый уровень!