Установка и настройки
Функции
                                                <?php

$lang = lang();

// or

$lang = MULTIGURALanguage::get();
                                            

Функция возвращает код активного языка.

                                                <?php

$args = [
    'use' => 'code', // Options: code | title
    'container' => 'div',
    'flag' => true
];


$html = languages($args);

// or

$html = MULTIGURALanguage::render($args);
                                            

Функция возвращает переключатель языков.

 

Возвращаемое значение — это HTML-код без каких-либо стилей.

 

Функция языков подчиняется встроенному механизму кэширования MULTIGURA (Redis / Memcached), как указано в характеристиках.

                                                <?php

$args = [
    'container' => 'nav'
];


$html = menu($location, $args);

// or

$html = MULTIGURAMenu::render($location, $args);

// Example #1: menu('primary', ['container' => 'nav']);
// Example #2: menu('secondary', ['container' => 'nav']);
                                            

Функция возвращает меню на основе его расположения.

 

В качестве альтернативы вы можете использовать функцию wp_nav_menu напрямую.

 

Функция меню подчиняется встроенному механизму кэширования MULTIGURA (Redis / Memcached), как указано в характеристиках.

                                                <?php

$bool = MULTIGURATranslation::in($element_id, $menu = false);

return $bool; // boolean
                                            

Функция проверяет наличие перевода в базе данных.

 

Принимает параметр $element_id типа int и возвращает значение типа boolean.

 

Параметр $menu = true указывает функции проверять запись на основе значения константы MULTIGURA_MENU_ELEMENT_TYPE.

                                                <?php

$id = MULTIGURATranslation::id($element_id, $menu = false);

return $id; // int | null
                                            

Функция возвращает ID группы перевода, если он существует.

 

Принимает параметр $element_id типа int и возвращает int или null.

 

Параметр $menu = true указывает функции искать идентификатор группы перевода на основе значения константы MULTIGURA_MENU_ELEMENT_TYPE.

                                                <?php

$data = MULTIGURATranslation::all($element_id, $menu = false);

return $data; // array
                                            

Функция возвращает массив ID переводов, исключая исходный элемент.

 

Принимает параметр $element_id типа int и возвращает значение типа array.

 

Параметр $menu = true указывает функции возвращать массив идентификаторов перевода на основе значения константы MULTIGURA_MENU_ELEMENT_TYPE.

                                                <?php

$data = MULTIGURATranslation::list($element_id, $menu = false);

return $data; // array
                                            

Функция возвращает полный массив ID переводов.

 

Принимает параметр $element_id типа int и возвращает массив array.

 

Параметр $menu = true указывает функции возвращать массив идентификаторов перевода на основе значения константы MULTIGURA_MENU_ELEMENT_TYPE.

                                                <?php

$result = MULTIGURA\Translation::object($element_id, $menu = false);

return $result; // array | null
                                            

Функция возвращает все записи группы перевода в виде массива объектов.

 

Принимает параметр $element_id типа int, параметр $menu типа boolean и возвращает значение типа array или null.

 

Параметр $menu = true указывает функции возвращать результат на основе значения константы MULTIGURA_MENU_ELEMENT_TYPE.

                                                <?php

$type = MULTIGURATranslation::type($element_id, $menu = false);

return $type; // string | null
                                            

Функция возвращает тип перевода.

 

Принимает параметр $element_id типа int и возвращает значение типа string или null.

 

Возвращаемое значение может быть page, post или любым другим типом записи, который вы создали. Также может быть nav_menu, если элемент является объектом типа меню.

                                                <?php

$lang = MULTIGURATranslation::language_code($element_id, $element_type);

return $lang; // string | null
                                            

Функция возвращает код языка перевода.

 

Принимает параметры $element_id типа int, $element_type типа string и возвращает значение типа string или null.

                                                <?php

$bool = MULTIGURATranslation::original($element_id, $element_type);

return $bool; // boolean
                                            

Функция проверяет, является ли перевод исходным.

 

Принимает параметры $element_id типа int, $element_type типа string и возвращает значение типа boolean.

                                                <?php

$slug = MULTIGURATranslation::slug($element_id);

return $slug; // string | null
                                            

Функция возвращает слаг из исходного перевода.

 

Принимает параметр $element_id типа int и возвращает значение типа string или null.

                                                <?php

$result = MULTIGURATranslation::remove($element_id, $element_type);

return $result; // int | boolean
                                            

Функция удаляет перевод из базы данных.

 

Принимает параметры $element_id типа int, $element_type типа string и возвращает значение типа int или boolean.

 

Значение типа int указывает, сколько записей было удалено, в то время как значение типа boolean будет false, если записи не были удалены.

                                                <?php

$result = MULTIGURATranslation::delete($group_id);

return $result; // int | boolean
                                            

Функция удаляет всю группу переводов из базы данных.

 

Принимает параметр $group_id типа int и возвращает значение типа int или boolean.

 

Значение типа int указывает, сколько записей было удалено, в то время как значение типа boolean будет false, если записи не были удалены.

                                                <?php

$bool = MULTIGURATranslation::exists($group_id, $lang);

return $bool; // boolean
                                            

Функция проверяет, существует ли группа переводов для конкретного языка.

 

Принимает параметры $group_id типа int, $lang типа string и возвращает значение типа boolean.

                                                <?php

$data = MULTIGURATranslation::select($group_id);

return $data; // array
                                            

Функция возвращает массив переводов.

 

Принимает параметр $group_id типа int и возвращает значение типа array.

                                                <?php

$lang = MULTIGURATranslation::source_language_code($group_id);

return $lang; // string | null
                                            

Функция возвращает код языка исходной из группы переводов.

 

Принимает параметр $group_id типа int и возвращает значение типа string или null.

                                                <?php

$id = MULTIGURATranslation::source_id($group_id);

return $id; // int | null
                                            

Функция возвращает идентификатор исходной из группы переводов.

 

Принимает параметр $group_id типа int и возвращает значение типа int или null.

                                                <?php

$id = MULTIGURATranslation::element_id($group_id, $lang);

return $id; // int | null
                                            

Функция возвращает идентификатор элемента группы переводов для конкретного языка.

 

Принимает параметры $group_id типа int, $lang типа string и возвращает значение типа int или null.

                                                <?php

$data = [
    'element_id' => 10,
    'element_type' => 'post',
    'language_code' => 'en'
];


$id = MULTIGURATranslation::add($data);

return $id; // int


$data['group_id'] = 5;
$data['source_language_code'] = 'ge';

$id = MULTIGURATranslation::add($data);

return $id; // int
                                            

Функция создает запись перевода в базе данных.

 

Каждый перевод имеет идентификатор группы. В первом примере параметр $data не включает атрибут group_id, что означает, что он будет автоматически сгенерирован с использованием принципа “последний + 1”.

Функция принимает параметр $data типа array и возвращает значение типа int, которое в данном случае представляет идентификатор записи в базе данных.

                                                <?php

$id = MULTIGURATranslation::generate_id();

return $id; // int
                                            

Функция генерирует идентификатор группы с использованием принципа “последний + 1”.

 

Функция возвращает значение типа int, которое в данном случае представляет потенциальный идентификатор группы переводов в базе данных.

                                                <?php

$id = MULTIGURATranslation::source($element_type);

return $id; // array
                                            

Функция возвращает массив идентификаторов элементов исходного перевода.

 

Принимает параметр $element_type типа string и возвращает значение типа array.

                                                <?php

$result = MULTIGURA\Translation::get($element_type, $lang);

return $result; // array | null
                                            

Функция возвращает идентификаторы перевода на основе их типа и кода языка.

 

Принимает параметр $element_type типа массив, параметр $lang типа строка и возвращает значение типа массив или null.

                                                <?php

$name = MULTIGURATranslation::table();

return $name; // string
                                            

Функция возвращает имя таблицы переводов.

Фильтры и модификации данных
                                                <?php

add_filter('multigura_language_data', function (array $data) {

    $data['ka'] = [
        'icon'   => 'ge.png',
        'locale' => 'ka_GE',
        'title'  => 'Georgian [KA]'
    ];

    unset($data['ge']);

    return $data;

}, 10, 1);
                                            

Для использования фильтров необходимо создать плагин в директории mu-plugins, в котором будут записаны нужные фильтры.

 

Пример демонстрирует фильтр multigura_language_data, который позволяет модифицировать существующие данные языка или добавить новый язык.

                                                <?php

add_filter('multigura_translatable_content', function (array $data) {
    $data[] = 'custom-posttype';
    return $data;
}, 10, 1);
                                            

В процессе индивидуальной разработки может возникнуть необходимость включить технический тип записи, который мы создали, в массив переводимого контента MULTIGURA. Для этого нам потребуется фильтр multigura_translatable_content.

                                                <?php

add_filter('multigura_translatable_taxonomy', function (array $data) {
    $data[] = 'custom-taxonomy';
    return $data;
}, 10, 1);
                                            

В процессе индивидуальной разработки может возникнуть необходимость включить созданную нами пользовательскую таксономию в массив MULTIGURA. Для этого нам потребуется фильтр multigura_translatable_taxonomy.

                                                <?php

add_filter('multigura_translations_table', function (string $table) {
    global $wpdb;
    return $wpdb -> prefix . 'mg_translations';
}, 10, 1);
                                            

MULTIGURA использует только одну обязательную таблицу, которая по умолчанию называется wp_translations (префикс + имя). Если мы хотим изменить имя таблицы, нам потребуется фильтр multigura_translations_table.

 

В предоставленном примере, после регистрации фильтра, плагин будет использовать таблицу wp_mg_translations, что минимизирует риск конфликтов с таблицами WordPress или других установленных плагинов.

 

Важно отметить, что фильтр должен быть зарегистрирован до активации плагина.

                                                <?php

add_filter('multigura_translations_text_table', function (string $table) {
    global $wpdb;
    return $wpdb -> prefix . 'mg_translations_text';
}, 10, 1);
                                            

MULTIGURA использует дополнительную таблицу в модуле TEXT, когда источник перевода выбран как БАЗА ДАННЫХ. По умолчанию таблица называется wp_translations_text (префикс + имя). Если мы хотим изменить имя таблицы, нам потребуется фильтр multigura_translations_text_table.

 

В предоставленном примере, после регистрации фильтра, плагин будет использовать таблицу wp_mg_translations_text.

 

Важно отметить, что фильтр должен быть зарегистрирован до активации плагина.

Шорткоды
                                                [multigura_languages]

[multigura_languages flag=true]
                                            

Шорткод возвращает переключатель языков.

                                                [multigura_menu location=primary]

[multigura_menu location=secondary]
                                            

Шорткод возвращает меню на основе его расположения.

                                                [multigura_lang]
                                            

Получение кода языка.

Кэширование
                                                MULTIGURA_CACHE=true
MULTIGURA_CACHE_TYPE=memcached
MULTIGURA_CACHE_HOST=memcached
MULTIGURA_CACHE_PORT=11211

// or

define('MULTIGURA_CACHE', true);
define('MULTIGURA_CACHE_TYPE', 'redis');
define('MULTIGURA_CACHE_HOST', 'redis');
define('MULTIGURA_CACHE_PORT', 11211);
                                            

Для улучшения производительности MULTIGURA интегрирует модуль кэширования и использует его для кэширования HTML, генерируемого функциями меню и языков.

 

Модуль поддерживает решения для кэширования Memcached и Redis.

 

Включение и использование модуля просты — достаточно добавить предоставленную конфигурацию в файл wp-config.php или .env

Меню, Медиа и Виджеты
Модуль перевода текста
                                                // Example for standard WordPress using MO format
wp-content/languages/main/main.en.mo
wp-content/languages/main/main.ge.mo

// Example for Bedrock (Roots) using JSON format
web/app/languages/main/main.en.json
web/app/languages/main/main.ge.json

// MULTIGURA structure
WP_LANG_DIR/TEXTDOMAIN/TEXTDOMAIN.LANG.FORMAT (MO | JSON)
                                            

Модуль TEXT плагина позволяет переводить статические тексты на сайте. Для этого можно использовать стандартные файлы в формате MO или JSON.

 

При использовании переводов в форматах MO или JSON файлы должны быть размещены в стандартной директории languages, следуя структуре, определенной MULTIGURA.

 

Модуль также предлагает возможность перевода текстов через базу данных с использованием динамического визуального интерфейса. Однако этот метод не рекомендуется для достижения максимальной производительности.

Модуль искусственного интеллекта
Модуль поисковой оптимизации
Синхронизация

Механизм синхронизации подготовит контент на сайте к переводу.

 

Если сайт был на одном языке, а затем была установлена ​​MULTIGURA, то нам нужно будет выполнить синхронизацию. Включить эту функцию легко, мы можем активировать ее с помощью опции СИНХРОНИЗАЦИЯ ДАННЫХ, показанной на экране.

 

Синхронизация будет активирована мгновенно и отобразится зеленое сообщение (ГОТОВО), указывающее на то, что операция прошла успешно.

База данных и архитектура

В базе данных MULTIGURA создает две таблицы:

 

  • wp_translations
  • wp_translations_text

 

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

 

Как уже упоминалось, MULTIGURA использует инновационную архитектуру, что означает:

 

Таблица wp_translations хранит все связи между posttype и menu. Однако некоторые posttype, такие как attachment, переводятся в таблице wp_postmeta, где данные хранятся в виде сериализованного JSON.

 

Тот же принцип применяется к категориям и тегам, но их данные хранятся в таблице wp_termmeta. Кроме того, term используются в WooCommerce для реализации многоязычных атрибутов.

 

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