Локализация и языковые переводы плагинов и модулей в 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 минут чтения Sodium Carbonate

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

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

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

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 20.07.2026 00:04

  • Страница размещена: 01.03.2026 07:55
  • Последнее обновление: 07.03.2026 13:21

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

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