Перейти к основному содержимому

Переключатель языка

Порядок определения: префикс URL → Cookie → Базовая локаль (английский)

Текущий язык: Русский (ru)
Formatting locale: ru-RU

Переведённые сообщения

m.greeting({ name: 'World' }) Привет, World!
m.welcome_message() Добро пожаловать в демонстрацию интернационализации
m.sample_text() Этот текст переводится в зависимости от текущей локали.

Плюрализация

ICU MessageFormat handles pluralization rules per language.

m.items_count({ count: 0 }) 0 элементов
m.items_count({ count: 1 }) 1 элементов
m.items_count({ count: 2 }) 2 элементов
m.items_count({ count: 5 }) 5 элементов
m.items_count({ count: 42 }) 42 элементов

Форматирование дат и чисел

Formatting uses the browser's Intl API, decoupled from the translation locale.

Отформатированная дата 15 янв. 2025 г.
Отформатированная дата (long) среда, 15 января 2025 г.
Отформатированное число 1 234 567,89
Отформатированная валюта (EUR) 1 234,50 €
Отформатированная валюта (USD) 1 234,50 $
Отформатированный процент 85,4 %
Относительное время позавчера

Перевод контента (база данных)

The tc() helper translates JSON fields from the database, falling back through: current locale → English → first available.

tc(post.title, post.titleI18n, locale) Привет, мир
tc(post.description, post.descriptionI18n, locale) Это содержимое хранится в базе данных в формате JSON.

Коды ошибок

Domain error codes resolve to localized strings via errorMessage(code).

errorMessage(ErrorCode.AUTH_INVALID) Неверные учётные данные.
errorMessage(ErrorCode.VALIDATION_REQUIRED) Это поле обязательно.
errorMessage(ErrorCode.RATE_LIMITED) Слишком много запросов. Пожалуйста, подождите немного.
errorMessage(ErrorCode.RESOURCE_NOT_FOUND) Мы не смогли найти то, что вы ищете.

Типобезопасность

Ключи сообщений проверяются на этапе компиляции — отсутствующий ключ или неверный параметр вызывает ошибку сборки, а не ошибку времени выполнения.

← Back to Showcases

Думаете, этот паттерн можно сделать лучше? Расскажите как.

Оставить отзыв