Локализация экстраполей в Cotonti

Статья поможет применить знания и сделать свои экстраполя полностью многоязычными. экстраполя нужно локализовать. Cotonti имеет встроенный умный механизм, который автоматически подставляет переводы заголовков полей и значений списков.

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

Экстраполя — это мощный инструмент Cotonti, который позволяет добавлять любые дополнительные данные к страницам, категориям структуры, пользователям, заказам и другим разделам сайта без изменения базы данных вручную. Вы создаёте поле один раз в админ-панели, и оно сразу появляется в формах редактирования и на сайте.

Но чтобы сайт выглядел профессионально на любом языке, экстраполя нужно локализовать. Cotonti имеет встроенный умный механизм, который автоматически подставляет переводы заголовков полей и значений списков. В этой статье мы разберём всё от А до Я: как именно работает система, куда писать строки перевода, какие приоритеты у ключей, как переводить заголовки, варианты выбора и выводить всё в шаблонах.

Статья поможет применить знания и сделать свои экстраполя полностью многоязычными.

Как Cotonti определяет заголовок экстраполя

Заголовок поля (то, что выводится тегом {PAGE_MYG_FIELD_TITLE}) формируется функцией cot_extrafield_title(). Она проверяет языковой массив $L (или Cot::$L) в следующем порядке приоритета:

  1. Самый высокий приоритет — ключ с префиксом, который вы передаёте вторым параметром: page_имяполя_title (для страниц) structure_имяполя_title (для категорий структуры)
  2. Второй приоритет — ключ с указанным location (местом хранения поля): pages_имяполя_title или structure_имяполя_title
  3. Третий приоритет — простой ключ: имяполя_title
  4. Если ничего не найдено — используется описание поля из базы (field_description).
  5. Если и оно пустое — просто техническое имя поля.

Это значит: вы можете переопределить заголовок именно для страниц или именно для структуры, даже если поле используется в нескольких местах.

Как локализовать значения полей (списки выбора)

Функция cot_build_extrafields_data() отвечает за вывод значения поля на сайте. Для полей типа:

  • select
  • radio
  • checklistbox

система автоматически ищет перевод в массиве $L по ключу: имяполя_значение

Пример: если поле color имеет вариант red, то перевод будет в строке $L['color_red'] = 'Красный';

Для checklistbox (множественный выбор) каждый выбранный пункт переводится отдельно и склеивается через разделитель.

Остальные типы полей (input, textarea, datetime, country и т.д.) перевод не требуют — они выводятся как есть или через парсер.

Пошаговая инструкция: создаём и локализуем экстраполе

Шаг 1. Создаём поле в админ-панели Перейдите: Управление сайтом → Прочее → Экстраполя → Добавить.

Пример настроек поля для страниц:

  • Таблица: pages
  • Имя поля: mycolor (только латинские буквы и подчёркивание)
  • Тип: select
  • Варианты: red, green, blue
  • Описание: Цвет товара (это будет заголовок по умолчанию)
  • Сохраняем.

Поле создано. Теперь оно доступно в редактировании страниц как page_mycolor.

Шаг 2. Создаём файл локализации Предположим, вы разрабатываете плагин myproducts. Создайте файл: plugins/myproducts/lang/myproducts.ru.lang.php

Начните его стандартно:

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

Шаг 3. Добавляем перевод заголовка Самый правильный и рекомендуемый способ — использовать префикс page_:

PHP
 
$L['page_mycolor_title'] = 'Цвет товара';

Если вы хотите отдельный заголовок именно для структуры (категорий), добавьте:

PHP
 
$L['structure_mycolor_title'] = 'Цвет категории';

Можно добавить и простой ключ на всякий случай:

PHP
 
$L['mycolor_title'] = 'Цвет';

Шаг 4. Локализуем варианты выбора Для нашего поля mycolor:

PHP
 
$L['mycolor_red'] = 'Красный';
$L['mycolor_green'] = 'Зелёный';
$L['mycolor_blue'] = 'Синий';

Готово! Теперь всё переведено.

Шаг 5. Создаём английскую версию Скопируйте файл и переименуйте в myproducts.en.lang.php. Замените значения:

PHP
 
$L['page_mycolor_title'] = 'Product color';
$L['mycolor_red'] = 'Red';
$L['mycolor_green'] = 'Green';
$L['mycolor_blue'] = 'Blue';

При смене языка сайта все экстраполя автоматически переключатся.

Вывод экстраполей в шаблонах (самый частый случай)

В любом шаблоне страниц (page.tpl, page.add.tpl, page.edit.tpl и т.д.) используйте стандартные теги:

HTML
 
<!-- Заголовок поля -->
{PAGE_MYCOLOR_TITLE}
<!-- Значение поля -->
{PAGE_MYCOLOR}

Для структуры (в шаблонах категорий):

HTML
 
{CAT_MYCOLOR_TITLE}: {CAT_MYCOLOR}

Cotonti автоматически вызывает cot_extrafield_title() с правильным префиксом (page_ или structure_) и cot_build_extrafields_data(), поэтому переводы подхватываются без единой строки кода в шаблоне.

Если нужно вывести только сырое значение (без перевода):

HTML
 
{PAGE_MYCOLOR_VALUE}

Примеры локализации разных типов полей

1. Поле типа radio Варианты в админке: yes,no В lang-файле:

PHP
 
$L['page_delivery_title'] = 'Доставка';
$L['delivery_yes'] = 'С доставкой';
$L['delivery_no'] = 'Самовывоз';

2. Поле типа checklistbox (множественный выбор) Варианты: wifi,parking,pool В lang-файле:

PHP
 
$L['page_amenities_title'] = 'Удобства';
$L['amenities_wifi'] = 'Wi-Fi';
$L['amenities_parking'] = 'Парковка';
$L['amenities_pool'] = 'Бассейн';

На сайте выбранные пункты выведутся через запятую с переводами.

3. Поле типа select с параметрами Если в настройках поля указан параметр separator= | , то в lang-файле ничего дополнительно делать не нужно — перевод вариантов работает так же.

4. Поле типа country Перевод не нужен — Cotonti использует встроенный список стран из языкового файла системы.

Как использовать локализацию в своём плагине или модуле

Если вы пишете собственный модуль и выводите экстраполя вручную, используйте те же функции:

PHP
 
$exfld_title = cot_extrafield_title($exfld, 'page_'); // для страниц
$value = cot_build_extrafields_data('page', $exfld, $page_data['page_mycolor']);

Пример из реального кода (как это делает сам Cotonti в модуле pages):

PHP
 
$tag = mb_strtoupper($exfld['field_name']);
$exfld_title = cot_extrafield_title($exfld, 'page_');
$temp_array[$tag . '_TITLE'] = $exfld_title;
$temp_array[$tag] = cot_build_extrafields_data('page', $exfld, $value);

Вы можете точно так же делать в своих плагинах — передавайте 'page_' или 'structure_' как префикс, и всё будет работать с вашими переводами.

Полезные советы и частые ошибки

  • Всегда используйте префикс page_ или structure_ — это самый надёжный способ.
  • Если поле используется только в одном месте, можно обойтись простым ключом имяполя_title.
  • Для Transifex и коллективных переводов пишите только строковые ключи — никаких массивов.
  • После изменения lang-файла очистите кэш (Управление сайтом → Очистка кэша).
  • Если заголовок не переводится — проверьте порядок приоритетов: сначала ищется page_mycolor_title.
  • Описание поля в админке (field_description) используется только как запасной вариант.
  • Для полей типа datetime, filesize, currency перевод значения не требуется.

Заключение

Теперь вы полностью владеете механизмом локализации экстраполей в Cotonti. Вы знаете:

  • как работает приоритет ключей в cot_extrafield_title(),
  • как переводить варианты списков через cot_build_extrafields_data(),
  • куда и какие строки писать в файлах .lang.php,
  • как выводить переведённые поля в шаблонах без единой строчки PHP,
  • как использовать те же функции в своих расширениях.

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

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-03 18:32

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 08:03
  • Last update: 2026-03-01 08:05

Similar pages

Локализация экстраполей в Cotonti Общий обзор
1 Локализация экстраполей в CotontiПолное практическое руководство для разработчиков: от механики движка до вывода в
Локализация экстраполей в Cotonti (пример: статус товара)
2 Локализация экстраполей в Cotonti: подробная инструкция на конкретном примере для начинающих разработчиковВведение
Локализация экстраполей в Cotonti Пошаговая инструкция на примере поля "статус товара"
3 Экстраполя в Cotonti: полное руководство по созданию и локализации значенийВведениеCotonti — мощная и гибкая CMS с
Локализация значений экстраполей в TPL-шаблоне
4 Если вы уже начали знакомиться с API Cotonti Siena, то наверняка успели заметить,что вывод значений экстраполей с типом
API экстраполей в Cotonti (Extrafields API)
5 API экстраполей (Extrafields API)Экстраполя служат для дополнения определенными данными какие-либо сущности на сайте.