Инструкция по локализации названий категорий модуля "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 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-01 22:41

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2025-03-22 06:30
  • Last update: 2025-03-22 06:33

Similar pages

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