SiteLang
SiteLang является статическим классом для получения локализованных строк активной темы. Он автоматически доступен в обычных шаблонах сайта.Поддерживает
- общие переводы для всей темы
- отдельные переводы страниц и записей
- вложенные ключи через точку
- резервные значения
- наследование переводов языка по умолчанию
- безопасный вывод текста в HTML
Быстрый старт
<h1><?php echo SiteLang::html('catalog.title', 'Каталог'); ?></h1>Первый аргумент содержит путь к переводу, второй используется, если перевод не найден.
Файлы переводов
Переводы хранятся в папке lang активной темы. Название языковой папки соответствует префиксу языка:
lang/
ru/
common.php
index.php
404.php
page/
catalog.php
post/
news.php
en/
common.phpКаждый файл должен возвращать массив:
<?php
return [
'catalog' => [
'title' => 'Каталог',
'description' => 'Товары нашего магазина',
],
];Получение вложенного значения:
$title = SiteLang::get('catalog.title');Загружаемые файлы
| Контекст | Файл |
|---|---|
| Все страницы сайта | lang/{prefix}/common.php |
| Главная страница | lang/{prefix}/index.php |
| Страница ошибки | lang/{prefix}/404.php |
| Шаблон страницы | lang/{prefix}/page/{template}.php |
| Шаблон записи | lang/{prefix}/post/{template}.php |
Сначала загружаются общие переводы, затем переводы текущего шаблона.
Переводы текущего языка дополняют переводы языка по умолчанию. Поэтому необязательно повторять в каждом языке все существующие ключи.
Получение перевода
get(string $path, string $default = ''): string
Возвращает перевод без дополнительной обработки:
$title = SiteLang::get('catalog.title');Если ключ может отсутствовать, передайте резервное значение:
$title = SiteLang::get('catalog.title', 'Каталог');Если перевод не найден или найденное значение является массивом, метод возвращает резервное значение.
Путь к вложенному значению записывается через точку:
$text = SiteLang::get('navigation.catalog.title');Вывод в HTML
html(string $path, string $default = ''): string
Возвращает перевод с экранированными специальными HTML-символами:
<p><?php echo SiteLang::html('catalog.description'); ?></p>Резервное значение также экранируется:
<p><?php echo SiteLang::html('catalog.description', 'Описание каталога'); ?></p>Метод предназначен для вывода обычного текста. HTML-теги внутри перевода будут показаны как текст, а не обработаны браузером.
Все переводы
all(): array
Возвращает массив всех переводов, загруженных для текущей страницы:
$translations = SiteLang::all();В массив входят общие переводы и переводы текущего шаблона с учётом текущего языка и языка по умолчанию.
Важные замечания
- файлы переводов должны возвращать массив
- вложенные ключи разделяются точкой
get()возвращает только строковые и другие скалярные значения- для безопасного вывода текста в HTML используйте
html() - контекстный файл шаблона дополняет и переопределяет общие переводы
- отсутствующие переводы берутся из языка по умолчанию