Инструкция по локализации названий категорий модуля "Pages" в произвольных ссылках

Цель

Сделать так, чтобы названия категорий (например, "Новости", "Блог") в ссылках на сайте автоматически переводились в зависимости от текущего языка, используя файлы локализации темы.

Концептуальный трек

    Например, есть некая тема сайта cleancot.
    Модуль page активен.
    Сайт поддерживает несколько языков (например, ru и en).
    Категории уже созданы в админке (Структура → Категории).

Шаг 1: Подготовка структуры категорий

    Создадим категории в админке:
        Зайди в Администрирование → Структура → Категории.
        Добавим категории для модуля page, например:
            Код: news, Название: "Новости".
            Код: blog, Название: "Блог".
        Поле "Название" (title) будет основой для локализации по умолчанию.
    Запомним коды категорий:
        Код (c=) используется в URL (например, page?c=news).

Шаг 2: Определение ключей локализации

    Для каждой категории создадим уникальный ключ в файлах локализации, привязанный к её коду.
    Префикс для ключей выберем, например, pagecat_ (чтобы не путать с другими строками).

Пример ключей:

    pagecat_news — для категории news.
    pagecat_blog — для категории blog.

Шаг 3: Редактирование файлов локализации темы

Добавим переводы в файлы локализации темы.

themes/cleancot/lang/cleancot.ru.lang.php

<?php
// Локализация названий категорий модуля "Pages"
$L['pagecat_news'] = 'Новости';
$L['pagecat_blog'] = 'Блог';


themes/cleancot/lang/cleancot.en.lang.php

<?php
// Localization of "Pages" module category titles
$L['pagecat_news'] = 'News';
$L['pagecat_blog'] = 'Blog';

Где:
    $L['pagecat_<код категории>'] — формат ключа, где <код категории> — это news, blog и т.д.
    Русский и английский варианты соответствуют языку файла.

Шаг 4: Использование в шаблонах

Теперь в произвольных ссылках можно использовать эти ключи через {PHP.L.pagecat_<код>}.
Пример в меню (header.tpl)

<ul class="nav">
    <!-- Ссылка на категорию 'news' -->
    <li class="nav-item">
        <a class="nav-link" href="{PHP|cot_url('page', 'c=news')}" title="{PHP.L.pagecat_news}">
            <i class="fa-solid fa-newspaper me-1"></i> {PHP.L.pagecat_news}
        </a>
    </li>
    <!-- Ссылка на категорию 'blog' -->
    <li class="nav-item">
        <a class="nav-link" href="{PHP|cot_url('page', 'c=blog')}" title="{PHP.L.pagecat_blog}">
            <i class="fa-solid fa-blog me-1"></i> {PHP.L.pagecat_blog}
        </a>
    </li>
</ul>

    {PHP|cot_url('page', 'c=news')} — генерирует URL (/page?c=news).
    {PHP.L.pagecat_news} — выводит "Новости" на русском или "News" на английском, в зависимости от текущего языка ({PHP.lang}).

Динамическая ссылка для текущей категории

Если категория берётся из контекста (например, {PAGE_CAT}):

<a href="{PHP|cot_url('page', 'c={PAGE_CAT}')}" title="{PHP.L.pagecat_{PAGE_CAT}}">{PHP.L.pagecat_{PAGE_CAT}}</a>

    {PAGE_CAT} — код текущей категории (например, news).
    {PHP.L.pagecat_{PAGE_CAT}} — подставляет pagecat_news, если {PAGE_CAT} = news.

Шаг 5: Настройка многоязычности

    Проверить текущий язык:
        {PHP.lang} — текущий язык сайта (например, ru или en), задаётся в config.php или через переключатель языка.
        Cotonti автоматически подтянет нужный файл локализации (cleancot.ru.lang.php или cleancot.en.lang.php).
    Убедитесь, что локализация работает:
        Должен быть включён механизм локализации.
        Если переключить язык на en, {PHP.L.pagecat_news} выведет "News".

Шаг 6: Тестирование

    Вставить код в header.tpl или другой шаблон.
    Переключить язык сайта:
        Русский: "Новости", "Блог".
        Английский: "News", "Blog".
    Проверить ссылки: они должны вести на /page?c=news и /page?c=blog.

Альтернативные решения

1. Использование встроенной i18n-структуры Cotonti

    Вместо файлов локализации темы можно переводить названия категорий через админку:
        Администрирование → Структура → Категории → [Выбрать категорию] → Переводы.
        Добавить перевод (например, "News" для news на английском).
        
В шаблоне:

<!-- IF {PHP.cfg.defaultlang} === {PHP.lang} -->
{PHP.structure.page.news.title}
<!-- ELSE -->
{PHP.i18n_structure.news.en.title}
<!-- ENDIF -->

    Плюсы: Не требует ручного редактирования файлов.
    Минусы: Нужно заполнять переводы для каждой категории в админке; могут быть сложности для динамических ссылок, но смотря в какой локации.

2. Динамическая локализация через PHP

    Создать плагин или хук в page.php:


function localize_category_title($cat_code) {
    global $L;
    $key = 'pagecat_' . $cat_code;
    return isset($L[$key]) ? $L[$key] : $cat_code;
}

В шаблоне:

 <a href="{PHP|cot_url('page', 'c=news')}">{PHP|localize_category_title('news')}</a>
    Плюсы: Гибкость, можно добавить логику (например, fallback на {PHP.structure.page.news.title}).
    Минусы: Нужно писать код, сложнее для новичков.

3. Использование глобальных строк локализации

Вместо уникальных ключей для категорий используй общие строки:

// cleancot.ru.lang.php
$L['News'] = 'Новости';
$L['Blog'] = 'Блог';
    
В шаблоне:

<a href="{PHP|cot_url('page', 'c=news')}">{PHP.L.News}</a>
    
    Плюсы: Просто и быстро.
    Минусы: Не связано с реальной структурой категорий, конфликты с другими модулями.

4. JSON-файлы локализации

    Храним переводы в JSON (например, themes/cleancot/lang/page_categories.json):
    
{
    "news": {"ru": "Новости", "en": "News"},
    "blog": {"ru": "Блог", "en": "Blog"}
}
    Парсим через плагин и выводим в шаблон.(его нужно создать)
    Плюсы: Удобно для больших проектов.
    Минусы: Требует дополнительного кода.

Что выбрать?

    Файлы локализации темы (основной способ) — лучший баланс простоты и гибкости.
    i18n-структура — если уже используешь многоязычность через админку.
    PHP-решение — для автоматизации и сложной логики.

Если вы хотите знать больше, - дополнительно иллюстрация логики как альтернатива, но так делать не желательно:

<!-- Проверяем, существует ли путь к категории 'news' в структуре страниц -->
<!-- IF {PHP.structure.page.news.path} -->
    <!-- Создаём пункт меню в навигации -->
    <li class="nav-item">
        <!-- Ссылка на категорию 'news' с динамическим URL и атрибутом title -->
        <a class="nav-link" href="{PHP|cot_url('page','c=news')}" title="{PHP.structure.page.news.title}">
            <!-- Иконка газеты из FontAwesome с небольшим отступом справа -->
            <i class="fa-solid fa-newspaper me-1"></i> 
            <!-- Проверяем, совпадает ли язык по умолчанию с текущим языком сайта -->
            <!-- IF {PHP.cfg.defaultlang} === {PHP.lang} -->
                <!-- Если да, выводим заголовок категории 'news' на языке по умолчанию -->
                {PHP.structure.page.news.title}
            <!-- Иначе, если текущий язык отличается от языка по умолчанию -->
            <!-- ELSE -->
                <!-- Проверяем, есть ли перевод заголовка категории 'news' на английский -->
                <!-- IF {PHP.i18n_structure.news.en.title} -->
                    <!-- Если перевод есть, выводим английский заголовок -->
                    {PHP.i18n_structure.news.en.title}
                <!-- Если перевода на английский нет -->
                <!-- ELSE -->
                    <!-- Выводим стандартную локализованную строку 'News' -->
                    {PHP.L.News}
                <!-- Конец проверки наличия английского перевода -->
                <!-- ENDIF -->
            <!-- Конец проверки языка -->
            <!-- ENDIF --> 
        </a>
    </li>
<!-- Конец условия существования пути категории 'news' -->
<!-- ENDIF -->

 

 

5 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 18.07.2026 14:46

  • Страница размещена: 22.03.2025 06:30
  • Последнее обновление: 22.03.2025 06:33

Похожие страницы

Заготовка плагина подписки на "Pages" по категориям
1 Заготовка, которая позволит написать плагин для Cotonti CMF, который позволит пользователям подписываться на обновления
Полное руководство по настройке ЧПУ для модуля Forums в Cotonti
2 Это руководство поможет вам настроить красивые URL для разделов, тем и сообщений форума Cotonti. В результате
Инструкция по установке фриланс-биржи на CMF Cotonti.
3 1. Распакуйте исходники в корневую директорию вашего сайта. 2. Создайте в директории datas/ файл config.php и
Инструкция по интеграции приема платежей в Cotonti
4  Эта инструкция предназначена для разработчиков, создающих расширения электронной коммерции (например,
Настройка структуры сайта в Cotonti. Инструкция.
5 Типовое руководство с наглядным примером по созданию структуры категорий на сайте Cotonti. Конфигурация модулей и
Cotonti Siena CMF • 26.04.2024 10:43 webitproff