Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2024-04-03 08:49
Avatar" alt="" class="rounded-circle border border-2 border-light" width="54" height="54">

Как настроить многоязычность для товаров, локализацию контента на разных языках в модулях "Задания", "Услуги", "Маркет" в пользовательском пакете (собрании) переработанных модулей и плагинов, в сборке скриптов фриланс биржи и маркетплейса.

Алгоритм действий для всех трех модулей одинаков.

Инструкцию рассмотрим на примере модуля, - market. Названия расширений используем по коду в админке в списке расширений.

Требования перед началом работы созданию мультиязычного контента, - структуры категорий и товаров маркетплейса.

1. Установленный модуль "MarketPlace" коммерческой версии - market.

2. Установленный и настроенный плагин "Content Internationalization" - i18n. Как его настроить инструкция здесь.

Имейте ввиду, пока не выполнен пункт№2 - нет смысла переходить к пункту№3

3. Устанавливаем плагин "Module Market Content Internationalization" - i18n4market и приступаем.

 

Ход работы и порядок действий

Всё начинается с мультиязычности (интернеционализации) самой структуры модуля.

Например, категорий много. Писать буду по своему, то есть для меня такой путь быстрее, но всегда можно одной и той же цели достичь разными путями.

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

Как правильно заполнять структуру категорий - это отдельная тема.

Путь первый: Идем в phpMyAdmin открываем свою базу и скролим в самый низ до префиксбазы_structure.

Жмем на имя  этой таблицы.

Жмем на кнопку "Экспорт".

Выбираем "CSV for MS Excel".

Жмем кнопку "Вперед".  - Смотрите скриншоты. на скриншоты можно нажимать, если нужно увеличить.

Открываем скачанный файл table_structure.csv, например "LibreOffice Calc".

Кликаем по ячейке "B1" и сортируем, не важно во возрастанию или убыванию.

Нас интересует все, что в колонке "structure_code", где слева в колонке "structure_area" напротив прописано "market" - выделяем и копируем.
Напишу по другому.
После сортировки, смотрим в колонке "structure_area", где у нас прописано "market", а напротив, в колонке "structure_code" справа у нас прописаны коды корневых (имеют точку после первого значения) категорий, которые нам нужны для мультиязычности.
Выделяем эти коди копируем, вставляем, например в текстовый документ программы "Notepad++" и форматируем весь текст так, чтобы всё было записано в однустроку через запятую. Никаких пробелов и энтеров. С форматированием закончили выделяем всё и копируем.

Путь второй: открываем две вкладки, - в одной структуру модуля market, а вдругой конфигурацию плагина i18n4market и из полей первой копируем коды корневых категорий в поле второго, в одну строку, через запятую.

2. Конфигурация плагина "Module Market Content Internationalization" - i18n4market.

Заходим в настройки, и справа от "Корневые категории для применения i18n4market" вставляем скопированные коды категорий.

В форме ниже, - Список локалей сайта и каждая локаль с новой строки, формат: locale_code|Заголовок локали, - как пример:

en|English
ru|Русский
ua|Українська

Всё. закрываем админку и идем прямо в список товаров.

3. Мультиязычность категорий модуля "маркетплейса", она же "Интернационализация структуры".

3.1. Открываем сразу два шаблона своей темы market.list.tpl и market.tpl - в обоих вставляем две кнопки

<!-- IF {PHP.usr.isadmin} OR {PHP.usr.maingrp} == 5 -->
<li>
<a href="{PHP|cot_url('admin', 'm=market')}" uk-tooltip="{PHP.L.market_admin_moder_mod}" title="{PHP.L.market_admin_moder_mod}" class="uk-btn-icon-fa uk-btn-dangrlight shadow-dangrlight">
  <i class="fa-solid fa-gear fa-spin fa-2xl"></i>
</a>
</li>
<!-- IF {PHP.cot_plugins_active.i18n4market} -->
<li>
<a href="{PHP|cot_url('i18n4market', 'm=structure')}" uk-tooltip="{PHP.L.i18n4market_structure}" title="{PHP.L.i18n4market_structure}" class="uk-btn-icon-fa uk-btn-dangrlight shadow-dangrlight">
  <i class="fa-solid fa-language fa-xl"></i>
</a>
</li>
<!-- ENDIF -->
<!-- ENDIF -->

Потом, что нужно всегда можно удалить.

Стили мои, никто не мешает сделать по-своему.

3.2 Шаблон market.tpl.

в нужном месте "под рукой" размещаем

<!-- IF {PHP.cot_plugins_active.i18n4market} -->
<div class="uk-card uk-card-small shadow-sldlight uk-background-blur-sldlight uk-card-hover uk-border-rounded uk-margin-medium-bottom">
  <div class="uk-card-body">
    <!-- BEGIN: I18N_LANG -->
    <p class="uk-card-title">{PHP.L.Language}:</p>
    <ul class="uk-list uk-list-divider">
      <!-- BEGIN: I18N_LANG_ROW -->
      <li>
        <a href="{I18N_LANG_ROW_URL}">{I18N_LANG_ROW_TITLE}</a>
      </li>
      <!-- END: I18N_LANG_ROW -->
    </ul>
    <!-- END: I18N_LANG -->
    <div class="buttons">{PAGE_I18N_TRANSLATE} {PAGE_I18N_DELETE}</div>
    <!-- IF {PHP.item_i18n4market_locales} == '' -->
    <a href="{PHP|cot_url('plug', 'e=i18n4market&m=market&a=add&id={PHP.item.item_id}')}" class="uk-button uk-button-success">{PHP.L.i18n4market_translate}</a>
    <!-- ENDIF -->
  </div>
</div>
<!-- IF {PHP.item_i18n4market_locales} > 1 -->
<!-- IF {PHP.item.ipage_locale} == 'en' OR {PHP.item.ipage_locale} == 'ua' -->
<!-- IF {PHP.i18n4market_admin} OR {PHP.usr.isadmin} -->
<div class="uk-card uk-card-small shadow-sldlight uk-background-blur-sldlight uk-card-hover uk-border-rounded uk-margin-medium-bottom">
  <div class="uk-card-body">
    <ul class="uk-list uk-list-divider">
      <!-- IF {PHP.item.ipage_locale} == 'en' -->
      <li>
        <a href="{PAGE_ADMIN_EDIT_URL}" class="uk-button uk-button-warning">{PHP.L.i18n4market_editing}</a>
      </li>
      <!-- ENDIF -->
      <!-- IF {PHP.item.ipage_locale} == 'ua' -->
      <li>
        <a href="{PAGE_ADMIN_EDIT_URL}" class="uk-button uk-button-primary">{PHP.L.i18n4market_editing}</a>
      </li>
      <!-- ENDIF -->
    </ul>
  </div>
</div>
<!-- ENDIF -->
<!-- ENDIF -->
<!-- ENDIF -->
<!-- ENDIF -->

Имейте ввиду, - код приведенный выше, это если у нас по дефолту стоит - русский, то есть в конфиге

$cfg['defaultlang'] = 'ru';	

3.3. Сам процесс интернеционализации структуры.

В пункте 3.1 в шаблон списка товаров и в саму карточку товара мы поставили по две кнопки, каждая вторая в каждом случае, - это кнопка со ссылкой на страницу создания англоязычного эквивалента названия категории и её описания, если в момент перехода по ссылке у нас был выбран английский язык интерфейса.

Если выбран русский - при переходе во ссылке откроется выбор локали, какую будем переводить, - имеется ввиду категории и описание. До самих товаров еще далеко. Когда переведем все категории, а уже только потом приступаем к переводу товаров.

Переводим структуру модуля маркет на английский

Переводим структуру модуля маркет на украинский

 

4. Перевод карточек товара (перевод публикаций в модуле маркетплейса)

Уже только после того, как перевели полностью на все языки структуру/категории приступаем к товарам.

4.1. Идем в любую карточку товара. в пункте №3.2 мы там прописали специальные кнопки для операций с переводом.

какой бы язык интерфейса сейчас бы не был выбран, - всё равно будет линк на перевод. смотрите скриншоты.

4.2. Жмем кнопку "перевести" и заполняем значения перевода, например у нас украинский.

4.3.  Сохранеямся и возращаемся в карточку товара.

По кнопке сохранения мы уже автоматом попадаем в украиноязычную версия нашей карточки товара, потому как переводили на украинский.

Теперь у нас появились дополнительные кнопки для управления - редактирование перевода и список уже существующих локализаций у этой карточки товара. смотрите скриншот.

4.4. Меняем язык интерфейса на английский

и у нас дополнительно появляется ссылка "Translate" - то есть перевести на английский. Жмем. переводим. сохраняемся.

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

Всё.

Автор: webitproff

03.04.2024

прим.0.9.25 (09.04.2024)

//		$display = ($hidePrivate && $isModule) ? cot_auth($extension, $code, 'W') : true;
		$display = ($hidePrivate && $isModule) ? cot_auth($extension, $code, 'R') : true;

 

This post was edited by webitproff (2024-07-02 11:22, 2 years ago)
Account