i18n modified - Модифицированный плагин мультиязычности для Cotonti
Особенности модификации: расширенная интеграции с дополнительными полями (экстраполя), улучшенние интерактивности управления переводами страниц, генерации SEO-тегов hrefl
i18n modified: обзор возможностей и функционала плагина мультиязычности для Cotonti
Оглавление
- Введение
- Общая философия и назначение
- Состав плагина и архитектура
- Ключевые сущности
- Настройки плагина
- Работа с локалями
- Определение включённости i18n для категории
- Перевод структуры
- Перевод страниц
- Дополнительные поля в переводах
- Переключатель языков в header
- Теги страниц
- Переопределение тегов страницы
- Переопределение заголовка и описания
- Интеграция с tags
- Интеграция с trashcan
- Права и безопасность
- Мультиязычные URL
- Шаблоны и теги
- Административный интерфейс
- Логирование и сообщения
- SEO-возможности
- Практические сценарии
- Особенности и ограничения
- Заключение
Введение
Плагин i18n modified представляет собой модифицированную версию штатного расширения для мультиязычности интерфейса сайта и статей, работающего в составе CMF Cotonti. Плагин обеспечивает поддержку многоязычного контента в модуле Pages, в ядре и в других расширениях. Плагин ориентирован на сайты, где требуется не только менять язык интерфейса, но и вести полноценные переводы статей, категорий и дополнительных полей.
Версия, обозначенная в файлах, — 2.10-1.0.13. Дата — 19 сентября 2026 года. Авторы — Cotonti Team и webitproff. Плагин распространяется под лицензией BSD. В качестве обязательного модуля требуется "page", а в качестве рекомендуемых плагинов — search и tags. Это сразу задаёт область применения: прежде всего контентные сайты, каталоги, статьи, документация, мультиязычные проекты, построенные на модуле Pages.
Главная особенность модификации, заключается в расширенной интеграции с дополнительными полями, улучшенной работе с языковыми версиями страниц, поддержке выбора локали при редактировании перевода, генерации SEO-тегов hreflang и x-default, а также в исправлениях для корректной работы переключателя языков в административной панели.
Ниже — подробный обзор функционала, основанный исключительно на предоставленных файлах. Я не буду домысливать то, чего в них нет, и не буду предполагать наличие возможностей, которые не подтверждаются кодом или языковыми строками. Все выводы сделаны на основе анализа структуры плагина, языкового файла, функций, обработчиков страниц, шаблонных тегов и конфигурации.
Общая философия и назначение
Плагин решает две большие задачи. Первая — мультиязычность интерфейса. Это значит, что пользователь может переключать язык сайта, а интерфейсные строки, названия категорий, заголовки страниц и другие элементы отображаются на выбранном языке. Вторая задача — мультиязычный контент. Это значит, что одна и та же статья или страница может иметь несколько языковых версий, каждая из которых хранится отдельно и может быть отредактирована независимо.
При этом плагин не пытается автоматически переводить контент. Он предоставляет инструменты для ручного создания переводов. Администратор или переводчик выбирает язык, заполняет поля перевода, сохраняет их. Оригинал страницы остаётся неизменным, а перевод хранится в отдельной таблице. Это классический подход, который позволяет сохранить целостность основного контента и одновременно дать возможность посетителям читать сайт на разных языках.
Важно, что плагин умеет работать не только со страницами, но и со структурой — то есть с категориями. Это значит, что можно переводить не только заголовки и тексты статей, но и названия разделов, их описания. Для сайтов с большим количеством категорий это критично, потому что без перевода структуры навигация на другом языке выглядит неполноценной.
Ещё одна важная особенность — интеграция с дополнительными полями. Плагин позволяет создавать переводы не только для стандартных полей страницы (заголовок, описание, текст), но и для произвольных дополнительных полей, которые были добавлены через систему extrafields. Это открывает возможность вести мультиязычные каталоги, где переводятся характеристики товаров, технические описания, свойства и другие структурированные данные.
Наконец, плагин заботится о SEO. В предоставленных файлах есть генерация тегов alternate с атрибутом hreflang, а также тега x-default. Это помогает поисковым системам понимать, какие языковые версии страницы существуют и какую из них показывать пользователям с определёнными языковыми предпочтениями. Также формируется полный IETF-тег для атрибута lang в теге html, что соответствует современным стандартам.
Состав плагина и архитектура
Судя по файлам, плагин имеет модульную структуру. В нём можно выделить несколько слоёв.
Первый слой — языковой файл. Он содержит информацию о плагине, настройки и строки интерфейса. В предоставленном русском файле локализации есть название, описание, примечание, а также строки для конфигурации и пользовательского интерфейса. Отдельно перечислены строки для перевода страниц, структуры, удаления, добавления, редактирования, выбора локали, сообщений об ошибках и успешных действиях.
Второй слой — функции API. В файле с функциями определены основные операции: загрузка локалей, загрузка переводов структуры, получение перевода категории, получение перевода страницы, список локалей для категории и страницы, проверка включённости интернационализации для категории, построение пути категории с учётом перевода, сохранение перевода, интеграция с тегами. Эти функции образуют ядро плагина и используются другими частями.
Третий слой — обработчики страниц. Есть отдельный файл для перевода страниц, который обрабатывает добавление, редактирование и удаление переводов. Есть файл для перевода структуры, который работает в административной части. Есть файлы, которые подключаются к хукам и добавляют теги в шаблоны: header.tpl, page.tpl, а также переопределяют теги страницы в функции генерации.
Четвёртый слой — конфигурация. В установочном файле перечислены параметры: cats, locales, omitmain, rewrite, cookie. Эти параметры определяют, какие категории участвуют в мультиязычности, какие локали доступны, как строится URL, нужно ли запоминать язык в cookie.
Пятый слой — интеграция с extrafields. Есть файл, который добавляет таблицу переводов страниц в белый список дополнительных полей. Это позволяет администратору создавать дополнительные поля специально для переводов.
Шестой слой — интеграция с tags. Если плагин tags установлен, i18n modified добавляет в таблицу связей тегов колонку с локалью и меняет первичный ключ. Это позволяет хранить теги отдельно для каждого языка.
Седьмой слой — интеграция с trashcan. Если плагин trashcan активен и настроен на корзину страниц, то при удалении перевода он сначала помещается в корзину.
Такая архитектура делает плагин достаточно гибким. Он не монолитен: каждая часть отвечает за свою задачу. При этом все части связаны через общие функции и таблицы.
Ключевые сущности
Чтобы понимать работу плагина, нужно разобраться в нескольких ключевых сущностях.
- Локаль — это языковой код, например, ru, en, ua, pl. В настройках плагина локали задаются списком, каждая строка которого имеет формат «код|Название». Например, en|English. Название используется для отображения в переключателе языков. Код используется в URL и в базе данных.
- Язык по умолчанию — это основной язык сайта. Он берётся из общей конфигурации Cotonti. Плагин автоматически добавляет его в список локалей, если его там нет. Для языка по умолчанию могут действовать особые правила: например, параметр языка может опускаться в URL, если включена соответствующая настройка.
- Fallback-язык — это язык, который используется, если для текущей локали нет перевода. В файлах он упоминается как i18n_fallback. Судя по логике, если перевода нет, отображается оригинал на языке по умолчанию. Это стандартное поведение для мультиязычных систем.
- Активная локаль — это язык, выбранный пользователем в данный момент. Он передаётся через параметр l в URL, может храниться в cookie, если включена соответствующая настройка.
- Перевод страницы — это запись в отдельной таблице, которая содержит заголовок, описание, текст и дополнительные поля для конкретной страницы и конкретной локали. Переводы страниц могут добавляться, редактироваться и удаляться. Каждый перевод имеет автора, дату, локали.
- Перевод структуры — это запись в другой таблице, которая содержит заголовок и описание категории для конкретной локали. Переводы структуры управляются только администратором.
- Дополнительные поля перевода — это поля, созданные через extrafields для таблицы переводов страниц. Они позволяют хранить произвольные данные на разных языках.
- Категории, участвующие в i18n — это корневые категории, перечисленные в настройке cats. Если категория не входит в этот список, то механизмы мультиязычности для неё могут не применяться. Проверка выполняется через определение родителей категории.
- Оригинал — это исходная страница или категория на языке по умолчанию. Оригинал не перезаписывается переводом. Перевод существует параллельно.
- Локализованное — это перевод страницы или категории. В интерфейсе перевода показываются оба варианта: оригинал и локализованное значение.
Настройки плагина
В установочном файле перечислены пять основных настроек. Рассмотрим их подробно.
- cats — «Category codes». Это список кодов категорий, для которых включается интернационализация. В русском языковом файле подсказка уточняет: «Коды категорий через запятую». То есть администратор указывает, какие категории должны поддерживать переводы. Если категория не указана, она, вероятно, не будет участвовать в мультиязычности. Это позволяет не перегружать переводом те разделы, где он не нужен.
- locales — «Site locales». Это список локалей сайта. В русском файле подсказка: «Каждая локаль с новой строки, формат: locale_code|Заголовок локали». То есть каждая строка содержит код и отображаемое название, разделённые вертикальной чертой. Например, en|English. Этот список используется для построения переключателя языков, для выбора локали при переводе, для проверки допустимости локали.
- omitmain — «Omit language parameter in the URL if pointing to main language». Это переключатель. Если он включён, то для основного языка параметр языка может не добавляться в URL. Это делает ссылки на основном языке более чистыми. Если выключен, то параметр языка добавляется всегда. В русском файле настройка описана как «Опускать параметр языка в URL, если он указывает на основной язык».
- rewrite — «Enable URL overwrite for language parameter». Включает ЧПУ для параметра языка. В русском файле подсказка: «Требует ручного обновления .htaccess». То есть если администратор хочет, чтобы язык в URL выглядел как часть пути, а не как параметр, нужно включить эту настройку и вручную обновить правила перенаправления на сервере. Это важный момент: плагин не делает этого автоматически.
- cookie — «Remember language selection in cookie». Если включено, выбранный язык запоминается в cookie. Тогда при следующем визите пользователь автоматически увидит сайт на выбранном языке. В русском файле: «Запоминать выбранный язык в cookie».
Эти пять настроек образуют базовую конфигурацию. Из языкового файла также видно, что есть строки для пояснений к этим настройкам, то есть администратор видит подсказки на русском языке.
Работа с локалями
Локали загружаются специальной функцией. Она разбивает строку на строки, каждую строку делит по вертикальной черте, обрезает пробелы, проверяет, что код и название не пусты, и добавляет локаль в массив. Если языка по умолчанию нет в списке, он добавляется автоматически. При этом название берётся из общего списка языков Cotonti, если там есть, иначе используется сам код.
Это значит, что администратор может не указывать язык по умолчанию в настройках, и плагин всё равно будет знать о его существовании. Но для полноты картины лучше указывать все языки, которые используются на сайте.
Список локалей используется в нескольких местах. Во-первых, для переключателя языков в header. Во-вторых, для выбора локали при добавлении или редактировании перевода страницы. В-третьих, для выбора локали при переводе структуры. В-четвёртых, для проверки, что переданная локаль допустима.
В переключателе языков для каждой локали формируется ссылка с сохранением текущих GET-параметров. Это важно: если пользователь находится на странице с фильтрами или параметрами, при переключении языка они не теряются. Если включена настройка omitmain и текущая локаль совпадает с fallback-языком, параметр l удаляется из URL. Если включена cookie и язык сохранён в cookie, логика omitmain может не применяться. Это сделано для того, чтобы избежать дублирования URL и конфликтов.
Также в переключателе определяется класс selected для активного языка. Это позволяет стилизовать текущий язык в шаблоне.
Определение включённости i18n для категории
Плагин проверяет, включена ли интернационализация для конкретной категории. Для этого он получает список категорий из настройки cats, разбивает его по запятой, обрезает пробелы и проверяет, входит ли первый родитель категории в этот список. Если входит — интернационализация включена. Если нет — выключена.
Такая логика позволяет включать мультиязычность только для определённых корневых разделов. Например, можно сделать мультиязычным каталог товаров, но не трогать блог или новости. Это удобно, потому что не все разделы сайта нуждаются в переводе.
Функция проверки может вызываться многократно, поэтому она кэширует список категорий в статической переменной. Это снижает нагрузку на базу данных и ускоряет работу.
Перевод структуры
Перевод структуры доступен только администратору. Это следует из проверки прав: перед выполнением сценария вызывается блокировка, если у пользователя нет прав администратора i18n.
Сценарий работы перевода структуры выглядит так. Сначала администратор выбирает локаль. Если локаль не выбрана или равна языку по умолчанию, отображается список локалей для выбора. Если локаль выбрана, отображается таблица категорий с полями для перевода.
В таблице для каждой категории показывается оригинальный заголовок и описание, а также поля для ввода перевода заголовка и описания. Администратор может изменить перевод и сохранить. При сохранении плагин проходит по всем переданным кодам категорий, сравнивает новые значения со старыми. Если перевод был пустым и остался пустым — ничего не делается. Если перевод был пустым, а стал заполненным — выполняется вставка. Если перевод был заполнен, а стал пустым — выполняется удаление. Если перевод изменился — выполняется обновление.
После сохранения формируются сообщения о количестве добавленных, обновлённых и удалённых элементов. Эти сообщения используют строки языкового файла с подстановкой числа. Также ведётся лог: добавление, редактирование, удаление переводов категорий.
В таблице перевода структуры есть пагинация. Количество элементов на странице берётся из общей настройки maxrowsperpage, если она задана и положительна, иначе используется значение по умолчанию 15. Это позволяет комфортно работать с большим количеством категорий.
Перед отображением таблицы плагин загружает переводы структуры из базы данных и сохраняет их в кэш, если кэширование включено. Это ускоряет последующие запросы.
Если в настройке cats не указаны категории, администратору выводится предупреждение со ссылкой на страницу настройки плагина. Это помогает быстро исправить конфигурацию.
Таким образом, перевод структуры — это полноценный административный инструмент с пагинацией, массовым сохранением, сообщениями и логированием.
Перевод страниц
Перевод страниц — более сложный процесс, потому что он доступен не только администратору, но и переводчикам, и авторам. В файле обработчика страниц есть три основные ветки: добавление, редактирование и удаление.
Добавление перевода. Сначала проверяется, что страница существует и идентификатор корректен. Если страницы нет, выдаётся 404. Затем загружаются данные страницы. Если действие — добавление, перевод не загружается, создаётся пустой массив. Если действие — редактирование, загружается существующий перевод для указанной локали.
При добавлении перевода сначала проверяется метод запроса. Если это POST, импортируется выбранная локаль. Проверяется, что локаль входит в список доступных. Если нет — ошибка «Неверная локаль». Затем проверяется, нет ли уже перевода для этой страницы и этой локали. Если есть — ошибка «Перевод уже существует». Затем формируется массив данных перевода: идентификатор страницы, локаль, идентификатор переводчика, имя переводчика, дата, заголовок, описание, текст. Также импортируются дополнительные поля, если они есть. Проверяется длина заголовка: если меньше двух символов — ошибка «Название слишком короткое». Если ошибок нет, запись вставляется в базу. Затем выполняются хуки, выводится сообщение «Добавлено», ведётся лог, формируется URL страницы с учётом локали и выполняется перенаправление.
Если запрос не POST или есть ошибки, отображается форма добавления перевода. В форме есть селектор локали, который исключает язык по умолчанию и уже существующие переводы. Показывается оригинальный заголовок, описание и текст страницы, а также поля для ввода перевода. Для текста используется текстовый редактор. Дополнительные поля выводятся в шаблон отдельными блоками.
Редактирование перевода. Редактирование доступно, если перевод существует и пользователь является администратором i18n, или имеет право редактирования, или является автором перевода. При POST импортируется новая локаль. Проверяется её допустимость. Если локаль изменилась, проверяется, нет ли уже перевода для новой локали. Если есть — ошибка. Затем обновляются дата, заголовок, описание, текст. Если локаль изменилась, она также обновляется. Импортируются дополнительные поля с передачей старых значений. Если есть ошибки, форма отображается снова с заполненными полями. Если ошибок нет, выполняется обновление записи в базе. Затем хуки, сообщение «Обновлено», лог, формирование URL и перенаправление.
В форме редактирования также есть селектор локали. Он исключает язык по умолчанию и занятые локали, кроме текущей. Значение селектора берётся из POST при ошибке или из текущей локали. Поля формы заполняются введёнными данными при ошибке или текущими данными перевода. Дополнительные поля выводятся аналогично добавлению.
Удаление перевода. Удаление доступно администратору или автору перевода. Если плагин trashcan активен и настроен на корзину страниц, перевод сначала помещается в корзину. Затем запись удаляется из базы. Выполняются хуки, выводится сообщение «Удалено», ведётся лог, формируется URL страницы и выполняется перенаправление.
Если действие не распознано или права недостаточны, выдаётся сообщение об ошибке.
Таким образом, перевод страниц — это полноценный CRUD-интерфейс с проверками, сообщениями, логированием, поддержкой дополнительных полей и интеграцией с корзиной.
Дополнительные поля в переводах
Одна из ключевых особенностей модификации — глубокая интеграция с дополнительными полями. В файле обработчика страниц видно, что при добавлении и редактировании перевода загружается конфигурация дополнительных полей для таблицы переводов страниц. Затем в цикле по каждому полю формируется имя поля с префиксом, импортируется значение из POST с учётом старого значения, и сохраняется в массив данных перевода.
В форме перевода для каждого дополнительного поля генерируется элемент ввода и заголовок. Эти данные передаются в шаблон. Для каждого поля формируются теги с верхним регистром имени поля, а также общие теги EXTRAFLD. Это позволяет выводить дополнительные поля в шаблоне как по отдельности, так и в цикле.
В файле, который добавляет таблицу переводов в белый список дополнительных полей, указано, что для таблицы i18n_pages можно создавать дополнительные поля. В описании указано, что теги для шаблона — это I18N_PAGE_FORM_XXXXX и I18N_PAGE_FORM_XXXXX_TITLE. Это значит, что администратор может создать дополнительное поле, например, «material», и в шаблоне перевода использовать тег I18N_PAGE_FORM_MATERIAL.
Кроме того, дополнительные поля переводов выводятся в header и в page.tags. В header формируются теги I18N_HEADER_XXXXX, I18N_HEADER_XXXXX_TITLE, I18N_HEADER_XXXXX_VALUE. В page.tags формируются теги I18N_XXXXX_TITLE, I18N_XXXXX, I18N_XXXXX_VALUE, а также динамический блок EXTRAFLD.
В pagetags.main дополнительные поля переводов добавляются в массив тегов страницы с префиксом I18N_PAGE_. Если перевода нет, теги сбрасываются в пустые значения.
Таким образом, дополнительные поля могут использоваться не только в форме перевода, но и в любом месте шаблона: в header, в карточке страницы, в списках, в SEO-тегах. Это делает систему очень гибкой.
Переключатель языков в header
В файле header.tags.php реализован переключатель языков и генерация SEO-тегов. Рассмотрим его возможности.
Сначала строится выпадающий список языков. Для каждой локали определяется класс selected, если она совпадает с текущей. Сохраняются все GET-параметры. Если включена настройка omitmain и локаль совпадает с fallback-языком, параметр l удаляется. Если включена cookie и язык сохранён в cookie, условие omitmain может не применяться. Определяется, находимся ли мы внутри плагина, и формируется URL. Если мы в админ-панели, URL строится с префиксом admin. Это исправление важно, потому что без него переключение языка в админке могло бы вести на неправильный URL.
Затем в шаблон передаются теги: URL, код локали, флаг (для английского используется флаг Великобритании), заголовок, класс, selected. Эти теги могут использоваться в header.tpl для отрисовки переключателя.
Далее устанавливается полный IETF-тег для атрибута lang. Для этого используется карта соответствия коротких кодов и полных тегов. Например, ua преобразуется в uk-UA. Если соответствия нет, используется короткий код. Полученное значение передаётся в шаблон как HTML_LANG. Это позволяет в header.tpl использовать <html lang="{HTML_LANG}">.
Затем генерируются теги alternate hreflang для переведённых страниц. Если мы на странице модуля page и есть идентификатор, получается список локалей, на которые переведена страница. Для каждой локали, кроме языка по умолчанию, формируется URL с параметром l и тег link с атрибутом hreflang. Также формируется тег x-default. Если omitmain включён, x-default указывает на URL без языкового префикса. Если выключен — с префиксом языка по умолчанию. Все теги передаются в шаблон как ALTERNATE_TAGS.
Наконец, в header передаются дополнительные поля перевода. Если перевод существует и есть дополнительные поля, для каждого поля формируются теги I18N_HEADER_XXXXX, I18N_HEADER_XXXXX_TITLE, I18N_HEADER_XXXXX_VALUE. Значение обрабатывается через парсер и экранируется. Если перевода нет, теги сбрасываются.
Таким образом, header получает всё необходимое: переключатель, правильный lang, hreflang, x-default и дополнительные поля.
Теги страниц
В файле page.tags.php назначаются теги для страницы. Если интернационализация включена, формируется список локалей для страницы. Если переводы есть, строится переключатель языков для страницы. Для каждой локали формируется URL с учётом алиаса или идентификатора, добавляется параметр l, если нужно. Передаются теги URL, код, заголовок, класс, selected.
Если у пользователя есть право на запись, добавляются теги для перевода. Если перевод существует и пользователь может его редактировать, добавляется ссылка на редактирование. Если перевода нет и количество локалей меньше общего числа, добавляется кнопка «Перевести».
Если пользователь администратор, добавляется кнопка удаления перевода с подтверждением.
Также выводятся дополнительные поля перевода: для каждого поля формируются теги I18N_XXXXX_TITLE, I18N_XXXXX, I18N_XXXXX_VALUE, а также динамический блок EXTRAFLD.
Это позволяет в шаблоне page.tpl выводить переключатель языков, кнопки управления переводом и дополнительные поля.
Переопределение тегов страницы
В файле pagetags.main.php переопределяются теги страницы в функции генерации. Если интернационализация включена и текущий язык не основной, загружается перевод категории. Если перевод категории есть, формируются URL категории, URL валидации, URL редактирования, путь категории, хлебные крошки, заголовок категории, описание категории. Также добавляются ссылки администратора: редактировать, утвердить, отправить на утверждение. Если перевод категории отсутствует, используется оригинал.
Если есть перевод страницы, формируются URL страницы, заголовок, хлебные крошки, описание, текст, обрезанный текст, признак обрезки, ссылка «Читать далее», дата обновления. Также добавляются дополнительные поля перевода.
Если перевода нет, теги дополнительных полей сбрасываются.
Если у пользователя есть право на запись и перевод существует, добавляется ссылка на редактирование перевода.
Все эти теги объединяются с основными тегами страницы. Это позволяет шаблонам страницы использовать переведённые значения автоматически.
Переопределение заголовка и описания
В файле page.main.php показано, как переопределяются заголовок, подзаголовок и описание страницы. Если интернационализация включена и текущий язык не основной, загружается перевод страницы и перевод категории. Если перевод страницы есть, формируются параметры заголовка с учётом переведённого заголовка и переведённой категории. Устанавливается подзаголовок и описание. Затем данные перевода объединяются с данными страницы. Это значит, что все последующие обработчики видят уже переведённые значения.
Это важный момент: плагин не просто добавляет отдельные теги, он подменяет данные страницы на перевод, если он есть. Это обеспечивает согласованность работы всех модулей и шаблонов.
Интеграция с tags
Если плагин tags установлен, i18n modified добавляет поддержку локалей в теги. В функции установки интеграции проверяется, установлен ли tags. Если да, подключается API тегов. Затем проверяется, есть ли в таблице связей тегов колонка tag_locale. Если нет, она добавляется. После этого удаляется первичный ключ и создаётся новый, включающий tag_locale. Это позволяет хранить теги отдельно для каждого языка.
Это значит, что на мультиязычном сайте теги могут быть переведены или, по крайней мере, привязаны к языку. Это полезно для SEO и навигации.
Интеграция с trashcan
Если плагин trashcan активен и настроен на корзину страниц, при удалении перевода страницы он сначала помещается в корзину. Для этого загружается запись перевода, формируется описание и вызывается сервис корзины. Только после этого запись удаляется из таблицы переводов. Это позволяет восстановить удалённый перевод, если он был удалён по ошибке.
Права и безопасность
В плагине используются несколько уровней прав. Переменные i18n_admin, i18n_write, i18n_read, i18n_edit, i18n_notmain, i18n_locale, i18n_fallback. Они определяют, что пользователь может делать.
Администратор i18n может переводить структуру, редактировать и удалять любые переводы. Пользователь с правом записи может добавлять переводы, редактировать свои переводы. Автор перевода может редактировать и удалять свой перевод. Гость может только читать.
Проверки прав выполняются перед выполнением действий. Если прав недостаточно, выдаётся сообщение об ошибке или перенаправление.
Также проверяется допустимость локали, дубликаты переводов, длина заголовка. Это предотвращает некорректные данные.
Мультиязычные URL
Плагин поддерживает несколько режимов URL. Параметр языка может передаваться как l в строке запроса. Если включена настройка rewrite, язык может быть частью ЧПУ. Если включена настройка omitmain, для основного языка параметр может опускаться. Если включена cookie, выбранный язык запоминается.
Это даёт гибкость: можно сделать простые URL для основного языка и языковые префиксы для остальных. Можно использовать ЧПУ, но для этого нужно вручную обновить .htaccess.
Шаблоны и теги
Плагин использует несколько шаблонов: i18n.page.tpl для формы перевода страницы, i18n.structure.tpl для таблицы перевода структуры, i18n.locales.tpl для выбора локали. Также он добавляет теги в header.tpl и page.tpl.
В header.tpl могут использоваться теги I18N_LANG_ROW_URL, I18N_LANG_ROW_CODE, I18N_LANG_ROW_TITLE, I18N_LANG_ROW_CLASS, I18N_LANG_ROW_SELECTED, HTML_LANG, ALTERNATE_TAGS, I18N_HEADER_XXXXX.
В page.tpl могут использоваться теги I18N_LANG_ROW_*, PAGE_I18N_TRANSLATE, PAGE_I18N_DELETE, I18N_XXXXX, I18N_EXTRAFIELD_TITLE, I18N_EXTRAFIELD_VALUE.
В шаблоне перевода страницы используются теги I18N_ACTION, I18N_TITLE, I18N_ORIGINAL_LANG, I18N_LOCALIZED_LANG, I18N_PAGE_TITLE, I18N_PAGE_DESC, I18N_PAGE_TEXT, I18N_IPAGE_TITLE, I18N_IPAGE_DESC, I18N_IPAGE_TEXT, I18N_PAGE_FORM_XXXXX, I18N_PAGE_FORM_XXXXX_TITLE, I18N_PAGE_FORM_EXTRAFLD, I18N_PAGE_FORM_EXTRAFLD_TITLE.
В шаблоне структуры используются теги I18N_ACTION, I18N_ORIGINAL_LANG, I18N_TARGET_LANG, I18N_CATEGORY_ROW_TITLE, I18N_CATEGORY_ROW_DESC, I18N_CATEGORY_ROW_CODE_NAME, I18N_CATEGORY_ROW_CODE_VALUE, I18N_CATEGORY_ROW_ITITLE_NAME, I18N_CATEGORY_ROW_ITITLE_VALUE, I18N_CATEGORY_ROW_IDESC_NAME, I18N_CATEGORY_ROW_IDESC_VALUE, I18N_CATEGORY_ROW_ODDEVEN, I18N_PAGINATION_PREV, I18N_PAGNAV, I18N_PAGINATION_NEXT.
Это позволяет полностью настроить внешний вид под конкретный шаблон.
Административный интерфейс
Административный интерфейс включает настройки плагина, перевод структуры и управление дополнительными полями. Настройки находятся в общей конфигурации плагинов. Перевод структуры доступен через отдельный раздел. Дополнительные поля для переводов создаются через общий интерфейс extrafields.
В настройках администратор указывает категории, локали, режим omitmain, rewrite, cookie. В переводе структуры выбирает локаль, заполняет заголовки и описания категорий. В extrafields создаёт поля для таблицы i18n_pages.
Логирование и сообщения
Плагин ведёт лог действий: добавление, редактирование, удаление переводов страниц и категорий. Сообщения выводятся пользователю: «Добавлено», «Обновлено», «Удалено», «Неверная локаль», «Перевод уже существует», «Название слишком короткое», «Нет товаров» и другие. Количество добавленных, обновлённых и удалённых элементов структуры выводится с подстановкой числа.
Это помогает администратору контролировать изменения и быстро реагировать на ошибки.
SEO-возможности
Плагин генерирует полный IETF-тег для атрибута lang, теги alternate hreflang для переведённых страниц, тег x-default. Это улучшает индексацию мультиязычных страниц поисковыми системами. Также переводятся заголовки, описания, meta-теги, что положительно сказывается на SEO.
Практические сценарии
- Добавление нового языка. Администратор добавляет локаль в настройках, указывает код и название. Язык появляется в переключателе. Затем переводит структуру и страницы.
- Перевод статьи. Автор открывает страницу, нажимает «Перевести», выбирает локаль, заполняет заголовок, описание, текст, дополнительные поля. Сохраняет. Перевод появляется на сайте.
- Перевод категории. Администратор заходит в перевод структуры, выбирает локаль, заполняет заголовки и описания категорий. Сохраняет.
- Настройка ЧПУ. Администратор включает rewrite, обновляет .htaccess. Язык становится частью URL.
- Запоминание языка. Администратор включает cookie. Пользователь выбирает язык, и он сохраняется.
- Удаление перевода. Администратор или автор удаляет перевод. Если trashcan активен, перевод попадает в корзину.
Особенности и ограничения
Плагин работает с модулем page. Для других модулей поддержка может отсутствовать. Для ЧПУ требуется ручное обновление .htaccess. Локали задаются вручную. Категории для i18n указываются через запятую. Дополнительные поля создаются через extrafields. Интеграция с tags и trashcan опциональна.
Заключение
i18n modified — это мощный инструмент для создания мультиязычных сайтов на Cotonti. Он сочетает в себе переключатель языков, перевод структуры, перевод страниц, поддержку дополнительных полей, SEO-теги, интеграцию с tags и trashcan. Гибкие настройки позволяют адаптировать его под разные сценарии. Административный интерфейс даёт полный контроль над переводами. Система прав разграничивает доступ. Логирование и сообщения помогают отслеживать изменения. Всё это делает плагин подходящим для серьёзных мультиязычных проектов, где важны не только интерфейсные строки, но и полноценный перевод контента.
Купить i18n modified - Модифицированный плагин мультиязычности для Cotonti по низким ценам. Интернет-магазин предлагает заказать i18n modified - Модифицированный плагин мультиязычности для Cotonti, просмотреть полное описание, детальные характеристики, фото товара и актуальные цены со скидкамиОффлайн
webitproff
Последняя авторизация: 20.09.2026 04:00
- Дата размещения 19.09.2026 09:01
- Обновлено 19.09.2026 09:10
Последние сообщения
- i18n modified - Модифицированный плагин мультиязычности
webitproff, 19.09.2026 07:55i18n modified - Модифицированный плагин мультиязычности
- Пропали ссылки на плагины в шаблонах
webitproff, 19.09.2026 06:07еще по теме, если есть ложное срабатывание при проверке активности плагина, - читать статью “Баг в ядре Cotonti при проверки активности плагина с всего одним хуком”
- Market PRO + всё, что связано с ЧПУ
webitproff, 13.09.2026 01:11частиный functions.custom.php <?php /** * Файл: system/functions.custom.php * * Читать инструкцию https://github.com/webitproff/functions.custom.php-cotonti/blob/main/README.md * * Пользоват...
- Market PRO + всё, что связано с ЧПУ
webitproff, 13.09.2026 01:09пресет правил/plugins/urleditor/presets/marketplace.datforums m=posts&q=&d= forums/{forums_url_structure()}/page{$d} forums m=posts&q=* forums/{forums_url_structure()} forums ...
- Tab "вкладка товаров" на странице профиля пользователя
webitproff, 13.09.2026 00:43Подробное описание файла market.userdetails.php1. Общая информация Параметр Значение Имя файла market.userdetails.php Расположение modules/market/market.userdetails.php Хук Cotonti users.details.ta...
- Multicat Market - Плагин для CMF Cotonti
webitproff, 11.09.2026 23:11Multicat MarketПлагин для модуля Market v5+ CMF Cotonti, позволяющий назначать одному товару (странице модуля Market) сразу несколько категорий структуры market. Вся реализация выполнена через стандар...
- Market PRO — модуль интернет-магазина и торговой площадки для Cotonti
webitproff, 10.09.2026 13:44Market PRO — модуль интернет-магазина и торговой площадки для CotontiГотовое решение для создания как классического интернет-магазина с одним продавцом, так и полноценной торговой площадки (маркетплей...
- Полное руководство по функции cot_market_enum()
webitproff, 10.09.2026 02:56Полное руководство по функции cot_market_enum()Функция cot_market_enum() — это мощный генератор списков товаров для модуля Market в Cotonti. Она позволяет вывести товары в любом месте сайта: на главно...
- В формах добавления и редактирования пропали картинки
webitproff, 09.09.2026 17:21Решил я “допекти” модуль товаров под котонти верону основательно. в процессе доработок тестирую, по привычке по ссылке гружу картинку к товару и какой-то там эрор без смысловой нагрузки и картинки нет...
- Инструкция: вывод в шаблон имени и ссылки на профиль пользователя в Cotonti
webitproff, 07.09.2026 15:15Инструкция: вывод имени и ссылки на профиль пользователя в CotontiВ этой инструкции описано, как получить данные о пользователе (текущем или владельце любой сущности) и передать их в шаблон в виде трё...
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.