Локализация и языковые переводы плагинов и модулей в Cotonti

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

Локализация плагинов и модулей в Cotonti: полный практический разбор от принципов до вывода в шаблонах

Введение

Локализация расширений в Cotonti — это не просто перевод текста интерфейса. Это системный механизм, встроенный в архитектуру движка, который позволяет:

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

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

Материал построен по принципу «от базовых понятий к практической реализации». Прочитав статью частями, вы получите целостное понимание механизма.


1. Архитектура локализации в Cotonti

1.1. Единый реестр языковых строк

В Cotonti используется глобальный массив:

  • $L — основной реестр языковых строк;
  • $Ls — отдельный реестр форм слов для склонений (используется с cot_declension()).

Все языковые файлы, подключаемые системой, объединяются в единый массив. Это означает:

  • строки из ядра,
  • строки из модулей,
  • строки из плагинов

в итоге находятся в одном пространстве имен.

Важное следствие

Нельзя использовать произвольные короткие ключи. Они могут перезаписать существующие системные строки.

Правильный подход — использовать уникальный префикс расширения.


2. Где располагаются файлы локализации

2.1. Путь к языковым файлам

Для плагина:

plugins/plug_name/lang/plugin_name.ru.lang.php

Для модуля: 

modules/module_name/lang/module_name.ru.lang.php

ru — двухбуквенный код языка.

Файл подключается автоматически при загрузке расширения.


3. Структура языкового файла

Минимальная структура:

<?php
defined('COT_CODE') or die('Wrong URL.');

$L['myplg_title'] = 'Заголовок';

Обязательная проверка defined('COT_CODE') защищает файл от прямого вызова.


4. Основные строки: как правильно создавать

4.1. Правило именования

Если плагин называется reviews, используем префикс rev_.

Правильно:

$L['rev_add_review'] = 'Добавить отзыв';
$L['rev_delete_review'] = 'Удалить отзыв';

Неправильно:

$L['title'] = 'Заголовок';

4.2. Использование в PHP-коде

 
echo $L['rev_add_review'];
 

Пример с ошибкой:

 
cot_error($L['rev_text_too_short'], 'rev_text');
 

Передача в шаблон:

 
$t->assign(array(
    'REV_BUTTON_TEXT' => $L['rev_add_review']
));
 

5. Формы числительных и массив $Ls

Русский язык требует корректных окончаний.

Для этого используется функция:

 
cot_declension()
 

5.1. Определение форм

В языковом файле:

 
$Ls['Reviews'] = 'отзыв, отзыва, отзывов';
 

5.2. Использование в коде

 
$text = 'Всего '.cot_declension(5, 'Reviews');
 

Результат:

 
Всего 5 отзывов
 

5.3. Использование напрямую

 
$text = cot_declension(3, 'страница, страницы, страниц');
 

Но предпочтительно использовать $Ls.


6. Использование языковых строк в шаблонах

В шаблоне:

 
{PHP.L.rev_add_review}
 

Для склонений:

 
{PHP.count|cot_declension($this, 'Reviews')}
 

Если $count = 3, вывод будет:

 
3 отзыва
 

7. Локализация конфигурации расширения

7.1. Определение переменной в setup-файле

 
sort=01:select:ID,Title,Date:ID:Default sorting column
 

7.2. Локализация

 
$L['cfg_sort'] = 'Сортировка по умолчанию';
$L['cfg_sort_params'] = 'ID:По ID, Title:По заголовку, Date:По дате';
$L['cfg_sort_hint'] = 'Сортировка производится по возрастанию';
 

Шаблон формирования:

 
$L['cfg_'.$varname]
$L['cfg_'.$varname.'_params']
$L['cfg_'.$varname.'_hint']
 

8. Системные строки расширения

Обязательные строки описания:

 
$L['info_name'] = 'Отзывы';
$L['info_desc'] = 'Система пользовательских отзывов';
$L['info_notes'] = 'Требует модуль Pages';
 

Отображаются в панели управления.


9. Заголовок standalone-плагина

Если плагин работает по хуку standalone:

 
$L['reviews_title'] = 'Отзывы пользователей';
 

Ключ формируется как:

 
$L[$extname.'_title']
 

10. Администрирование (hook tools)

В коде нужно вручную инициализировать:

 
$adminhelp = $L['rev_admin_help'];
$adminsubtitle = $L['rev_admin_title'];
 

И определить их в языковом файле:

 
$L['rev_admin_help'] = 'Здесь вы можете управлять отзывами.';
$L['rev_admin_title'] = 'Администрирование отзывов';
 

11. Локализация экстра-полей

Если создано поле:

 
rating
 

Можно определить:

 
$L['page_rating_title'] = 'Оценка материала';
 

В шаблоне:

 
{PAGE_RATING_TITLE}
 

12. Локализация списков (современный формат)

Нельзя использовать массивы:

Неправильно:

 
$L['cfg_status_params'] = array('Активен', 'Отключен');
 

Правильно:

 
$L['cfg_status_params'] = 'Активен, Отключен';
 

Если ключ-значение:

 
$L['cfg_mode_params'] = 'simple:Простой, advanced:Расширенный';
 

13. Использование ресурсов ($R)

Ресурс — это шаблон строки.

Определение:

 
$R['rev_stat'] = $L['rev_total'].': {$total}, '.$L['rev_today'].': {$today}';
 

Использование:

 
$data = array(
    'total' => 100,
    'today' => 5
);

echo cot_rc('rev_stat', $data);
 

14. Полный пример языкового файла

 
<?php
defined('COT_CODE') or die('Wrong URL.');

/* Информация о расширении */
$L['info_name'] = 'Отзывы';
$L['info_desc'] = 'Плагин отзывов для сайта';

/* Основные строки */
$L['rev_add'] = 'Добавить отзыв';
$L['rev_delete'] = 'Удалить отзыв';
$L['rev_title'] = 'Отзывы';

/* Конфигурация */
$L['cfg_moderation'] = 'Премодерация отзывов';
$L['cfg_moderation_hint'] = 'Если включено — отзывы публикуются после проверки';

/* Склонения */
$Ls['Reviews'] = 'отзыв, отзыва, отзывов';

/* Администрирование */
$L['rev_admin_title'] = 'Управление отзывами';
$L['rev_admin_help'] = 'Здесь отображается список отзывов';
 

15. Полный цикл работы перевода

Теперь рассмотрим последовательность:

Шаг 1. Создаём файл

 
plugins/reviews/lang/reviews.ru.lang.php
 

Шаг 2. Определяем строки

 
$L['rev_add'] = 'Добавить отзыв';
$Ls['Reviews'] = 'отзыв, отзыва, отзывов';
 

Шаг 3. Используем в коде

 
echo $L['rev_add'];

echo cot_declension($count, 'Reviews');
 

Шаг 4. Используем в шаблоне

 
{PHP.L.rev_add}
{PHP.count|cot_declension($this, 'Reviews')}
 

16. Ключевые правила, которые нельзя нарушать

  1. Всегда используйте уникальный префикс.
  2. Не используйте массивы в языковых файлах.
  3. Склонения храните в $Ls.
  4. Для конфигурации используйте шаблон cfg_.
  5. Не выводите текст напрямую в коде — только через $L.

17. Частые ошибки новичков

  • Жёстко прописанные строки в PHP.
  • Отсутствие префикса.
  • Использование массивов вместо строк.
  • Неправильное использование cot_declension.

Заключение

Локализация в Cotonti — это строгая, но логичная система.

Если соблюдать структуру:

  • файл → строки → код → шаблон,
  • префиксы,
  • разделение $L и $Ls,
  • правила конфигурации,

то расширение становится полностью независимым от языка интерфейса.

Грамотно организованный перевод делает модуль:

  • расширяемым,
  • совместимым с коллективным переводом,
  • удобным для сопровождения,
  • безопасным при обновлениях.

Освоив механизм локализации, вы автоматически повышаете качество своих расширений и делаете их пригодными для публичного распространения.

4 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: 2026-03-01 07:55
  • Last update: 2026-03-07 13:21

Similar pages

Шаблоны основных модулей фриланс-биржи и их назначение
1 Шаблоны основных модулей фриланс-биржи и их назначение Шаблоны модуля Projects:     projects.add.tpl - форма
Установка плагинов
2 Установка плагинов 1. Введение Что такое Расширение По сути — это PHP-скрипт (или их набор), включаемый в заранее
Перевод и локализация дистрибутива Cotonti Siena
3 В дистрибутиве Cotonti присутствуют два основных языка -- английский и русский. В дополнение к ним активно
Локализация экстраполей в Cotonti
4 Локализация экстраполей в Cotonti: полное пошаговое руководство для начинающих разработчиковЭкстраполя — это мощный
Локализация экстраполей в Cotonti Общий обзор
5 Локализация экстраполей в CotontiПолное практическое руководство для разработчиков: от механики движка до вывода в