ინსტალაცია და კონფიგურაცია
ფუნქციები
                                                <?php

$lang = lang();

// or

$lang = MULTIGURA\Language::get();
                                            

ფუნქცია აბრუნებს აქტიური ენის კოდს.

                                                <?php

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


$html = languages($args);

// or

$html = MULTIGURA\Language::render($args);
                                            

ფუნქცია აბრუნებს ენების გადამრთველს.

 

დაბრუნებული მნიშვნელობა წარმოადგენს HTML ფორმატის კოდს და არ შეიცავს სტილებს.

 

ფუნქცია languages ექვემდებარება MULTIGURA-ს მიერ ინტეგრირებულ ქეშირების (Redis / Memcached) მექანიზმს, რომელიც ნახსენებია მახასიათებლებში.

                                                <?php

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


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

// or

$html = MULTIGURA\Menu::render($location, $args);

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

ფუნქცია აბრუნებს მენიუს ლოკაციის მიხედვით.

 

სურვილისამებრ შესაძლებელია პირდაპირ wp_nav_menu ფუნქციის გამოყენება.

 

ფუნქცია menu ექვემდებარება MULTIGURA-ს მიერ ინტეგრირებულ ქეშირების Redis / Memcached მექანიზმს, რომელიც ნახსენებია მახასიათებლებში.

                                                <?php

$bool = MULTIGURA\Translation::in($element_id, $menu = false);

return $bool; // boolean
                                            

ფუნქცია ამოწმებს თარგმანის არსებობას ბაზაში.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს boolean ტიპის მნიშვნელობას.

 

პარამეტრი $menu = true ფუნქციას მიუთითებს ჩანაწერი შეამოწმოს MULTIGURA_MENU_ELEMENT_TYPE კონსტანტის მნიშვნელობის მიხედვით.

                                                <?php

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

return $id; // int | null
                                            

ფუნქცია აბრუნებს თარგმანის ჯგუფის იდენტიფიკატორს მისი არსებობის შემთხვევაში.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს int ან null ტიპის მნიშვნელობას.

 

პარამეტრი $menu = true ფუნქციას მიუთითებს თარგმანის ჯგუფის იდენტიფიკატორი ეძებოს MULTIGURA_MENU_ELEMENT_TYPE კონსტანტის მნიშვნელობის მიხედვით.

                                                <?php

$data = MULTIGURA\Translation::all($element_id, $menu = false);

return $data; // array
                                            

ფუნქცია აბრუნებს თარგმანის იდენტიფიკატორების მასივს, გარდა წყარო ელემენტისა.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს array ტიპის მნიშვნელობას.

 

პარამეტრი $menu = true ფუნქციას მიუთითებს თარგმანის იდენტიფიკატორების მასივი დააბრუნოს MULTIGURA_MENU_ELEMENT_TYPE კონსტანტის მნიშვნელობის მიხედვით.

                                                <?php

$data = MULTIGURA\Translation::list($element_id, $menu = false);

return $data; // array
                                            

ფუნქცია აბრუნებს თარგმანის იდენტიფიკატორების მასივს სრულად.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს array ტიპის მნიშვნელობას.

 

პარამეტრი $menu = true ფუნქციას მიუთითებს თარგმანის იდენტიფიკატორების მასივი დააბრუნოს MULTIGURA_MENU_ELEMENT_TYPE კონსტანტის მნიშვნელობის მიხედვით.

                                                <?php

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

return $result; // array | null
                                            

ფუნქცია აბრუნებს თარგმანის ჯგუფის ყველა ჩანაწერს, როგორც ობიექტების მასივს.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს array ან null ტიპის მნიშვნელობას.

 

პარამეტრი $menu = true ფუნქციას მიუთითებს შედეგი დააბრუნოს MULTIGURA_MENU_ELEMENT_TYPE კონსტანტის მნიშვნელობის მიხედვით.

                                                <?php

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

return $type; // string | null
                                            

ფუნქცია აბრუნებს თარგმანის ტიპს.

 

ფუნქციას გადაეცემა int ტიპის $element_id, boolean ტიპის $menu პარამეტრი და აბრუნებს string ან null ტიპის მნიშვნელობას.

 

დაბრუნებული მნიშვნელობა შესაძლოა იყოს page, post ან სხვა თქვენს მიერ შექმნილი პოსტის ტიპი, ასევე nav_menu, თუ ის წარმოადგენს მენიუ ტიპის ობიექტს.

                                                <?php

$lang = MULTIGURA\Translation::language_code($element_id, $element_type);

return $lang; // string | null
                                            

ფუნქცია აბრუნებს თარგმანის ენის კოდს.

 

ფუნქციას გადაეცემა int ტიპის $element_id, string ტიპის $element_type პარამეტრი და აბრუნებს string ან null ტიპის მნიშვნელობას.

                                                <?php

$bool = MULTIGURA\Translation::original($element_id, $element_type);

return $bool; // boolean
                                            

ფუნქცია ამოწმებს წარმოადგენს თუ არა თარგმანი წყაროს.

 

ფუნქციას გადაეცემა int ტიპის $element_id, string ტიპის $element_type პარამეტრები და აბრუნებს boolean ტიპის მნიშვნელობას.

                                                <?php

$slug = MULTIGURA\Translation::slug($element_id);

return $slug; // string | null
                                            

ფუნქცია აბრუნებს slug-ს თარგმანების წყაროდან.

 

ფუნქციას გადაეცემა int ტიპის $element_id პარამეტრი და აბრუნებს string ან null ტიპის მნიშვნელობას.

                                                <?php

$result = MULTIGURA\Translation::remove($element_id, $element_type);

return $result; // int | boolean
                                            

ფუნქცია შლის თარგმანს მონაცემთა ბაზიდან.

 

ფუნქციას გადაეცემა int ტიპის $element_id, string ტიპის $element_type პარამეტრები და აბრუნებს int ან boolean ტიპის მნიშვნელობას.

 

int მნიშვნელობა განსაზღვრავს თუ რამდენი ჩანაწერი წაშალა ფუნქციამ, ხოლო boolean არის false თუ არცერთი ჩანაწერი არ წაიშალა.

                                                <?php

$result = MULTIGURA\Translation::delete($group_id);

return $result; // int | boolean
                                            

ფუნქცია შლის თარგმანის მთლიან ჯგუფს მონაცემთა ბაზიდან.

 

ფუნქციას გადაეცემა int ტიპის $group_id პარამეტრი და აბრუნებს int ან boolean ტიპის მნიშვნელობას.

 

int მნიშვნელობა განსაზღვრავს თუ რამდენი ჩანაწერი წაშალა ფუნქციამ, ხოლო boolean არის false თუ არცერთი ჩანაწერი არ წაიშალა.

                                                <?php

$bool = MULTIGURA\Translation::exists($group_id, $lang);

return $bool; // boolean
                                            

ფუნქცია ამოწმებს არსებობს თუ არა თარგმანის ჯგუფი კონკრეტული ენისთვის.

 

ფუნქციას გადაეცემა int ტიპის $group_id, string ტიპის $lang პარამეტრები და აბრუნებს boolean ტიპის მნიშვნელობას.

                                                <?php

$data = MULTIGURA\Translation::select($group_id);

return $data; // array
                                            

ფუნქცია აბრუნებს თარგმანების მასივს.

 

ფუნქციას გადაეცემა int ტიპის $group_id პარამეტრი და აბრუნებს array ტიპის მნიშვნელობას.

                                                <?php

$lang = MULTIGURA\Translation::source_language_code($group_id);

return $lang; // string | null
                                            

ფუნქცია აბრუნებს თარგმანების ჯგუფის წყაროს ენის კოდს.

 

ფუნქციას გადაეცემა int ტიპის $group_id პარამეტრი და აბრუნებს string ან null ტიპის მნიშვნელობას.

                                                <?php

$id = MULTIGURA\Translation::source_id($group_id);

return $id; // int | null
                                            

ფუნქცია აბრუნებს თარგმანების ჯგუფის წყაროს იდენტიფიკატორს.

 

ფუნქციას გადაეცემა int ტიპის $group_id პარამეტრი და აბრუნებს int ან null ტიპის მნიშვნელობას.

                                                <?php

$id = MULTIGURA\Translation::element_id($group_id, $lang);

return $id; // int | null
                                            

ფუნქცია აბრუნებს თარგმანების ჯგუფის ელემენტის იდენტიფიკატორს კონკრეტული ენის მიხედვით.

 

ფუნქციას გადაეცემა int ტიპის $group_id, string ტიპის $lang პარამეტრები და აბრუნებს int ან null ტიპის მნიშვნელობას.

                                                <?php

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


$id = MULTIGURA\Translation::add($data);

return $id; // int


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

$id = MULTIGURA\Translation::add($data);

return $id; // int
                                            

ფუნქცია ქმნის მონაცემთა ბაზაში თარგმანის ჩანაწერს.

 

ყველა თარგმანს გააჩნია ჯგუფის id, პირველ მაგალითში $data პარამეტრს არ მიეწოდება group_id ატრიბუტი, რაც გულისხმობს მის ავტომატურ გენერირებას ბოლოს + 1 პრინციპით.

 

ფუნქციას გადაეცემა array ტიპის $data პარამეტრი და აბრუნებს int ტიპის მნიშვნელობას, რაც ჩვენს შემთხვევაში გულისხმობს მონაცემთა ბაზაში ჩანაწერის იდენტიფიკატორს.

                                                <?php

$id = MULTIGURA\Translation::generate_id();

return $id; // int
                                            

ფუნქცია აგენერირებს ჯგუფის იდენტიფიკატორს, ბოლოს + 1 პრინციპით.

 

ფუნქცია აბრუნებს int ტიპის მნიშვნელობას, რაც ჩვენს შემთხვევაში გულისხმობს, მონაცემთა ბაზაში, თარგმანის ჯგუფის პოტენციურ იდენტიფიკატორს.

                                                <?php

$id = MULTIGURA\Translation::source($element_type);

return $id; // array
                                            

ფუნქცია აბრუნებს თარგმანების წყარო ელემენტების id-ების მასივს.

 

ფუნქციას გადაეცემა string ტიპის $element_type პარამეტრი და აბრუნებს array ტიპის მნიშვნელობას.

                                                <?php

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

return $result; // array | null
                                            

ფუნქცია აბრუნებს თარგმანის იდენტიფიკატორებს მისი ტიპის და ენის კოდის მიხედვით.

 

ფუნქციას გადაეცემა array ტიპის $element_type, string ტიპის $lang პარამეტრი და აბრუნებს array ან null ტიპის მნიშვნელობას.

                                                <?php

$name = MULTIGURA\Translation::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);
                                            

ინდივიდუალური დეველოპმენტის დროს, შესაძლოა წარმოიშვას საჭიროება, ჩვენს მიერ შექმნილი ტექნიკური posttype მოხვდეს MULTIGURA-ს მიერ თარგმნადი კონტენტის მასივში, ამისთვის დაგვჭირდება multigura_translatable_content ფილტრი.

                                                <?php

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

ინდივიდუალური დეველოპმენტის დროს, შესაძლოა წარმოიშვას საჭიროება, ჩვენს მიერ შექმნილი ტექნიკური taxonomy მოხვდეს 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 მოდულში თარგმანის წყაროდ DATABASE-ის არჩევის შემთხვევაში, ნაგულისხმევად მისი სახელია 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-ს ინტეგრირებული აქვს ქეშირების მოდული და იყენებს მას menu და languages ფუნქციებით გენერირებული 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 ფორმატით თარგმნისას, ფაილები უნდა მოვათავსოთ ენების სტანდარტულ დირექტორიაში, MULTIGURA-ს მიერ განსაზღვრული სტრუქტურით.

 

მოდული ასევე გვთავაზობს ტექსტების თარგმნას მონაცემთა ბაზის მეშვეობით, რისთვისაც იყენებს დინამიურად მომუშავე ვიზუალურ ინტერფეისს, თუმცა ამ მეთოდის გამოყენება არ არის მიზანშეწონილი მაქსიმალური წარმადობის მისაღწევად.

ხელოვნური ინტელექტის მოდული
საძიებო სისტემებში ოპტიმიზაციის მოდული
სინქრონიზაცია

სინქრონიზაციის მექანიზმი საიტზე არსებულ კონტენტს გაამზადებს სათარგმნად.

 

თუ საიტი იყო ერთ ენოვანი და შემდეგ მოხდა MULTIGURA-ს ინსტალაცია, სწორედ ამ დროს დაგვჭირდება სინქრონიზაცია. მისი ჩართვა მარტივია, სქრინზე ნაჩვენები SYNC DATA ოფშენით შევძლებთ მის გააქტიურებას.

 

სინქრონიზაციის გააქტიურება მოხდება მომენტალურად და გამოიტანს მწვანე ( DONE ) მესიჯს, რაც ნიშნავს რომ ოპერაცია წარმატებით დასრულდა.

მონაცემთა ბაზა და არქიტექტურა

მონაცემთა ბაზაში MULTIGURA ქმნის ორ ცხრილს:

 

  • wp_translations
  • wp_translations_text

 

ამ ორი ცხრილიდან აქტიურად გამოიყენება მხოლოდ პირველი, სადაც ინახება თარგმანების რელაციები. ხოლო მეორე ცხრილი გამოიყენება მხოლოდ მაშინ, როდესაც მომხმარებელი ააქტიურებს ტექსტის თარგმნის მოდულს და წყაროდ უთითებს მონაცემთა ბაზას.

 

როგორც ავღნიშნეთ, MULTIGURA იყენებს ინოვაციურ არქიტექტურას, რაც გულისხმობს:

 

wp_translations ცხრილში ინახება ყველა posttype + menu რელაციები, თუმცა ზოგიერთი posttype-ის თარგმნა მაგალითად, attachment-ის ხდება wp_postmeta ცხრილში და მონაცემები ინახება როგორც სერიალიზებული json-ი.

 

იგივე პრინციპით ხდება კატეგორიების და თეგების თარგმნა, თუმცა ეს მონაცემები ინახება wp_termmeta ცხრილში. ასევე, term იქნა გამოყენებული WooCommerce ატრიბუტების გამრავალენოვნების გადაწყვეტად.

 

დეტალებზე ორიენტირებული მიდგომით და თანამედროვე არქიტექტურით MULTIGURA-მ მიაღწია მაღალ წარმადობას, რაც პირველ რიგში აისახება მონაცემთა ბაზის დატვირთვაზე რთული მოთხოვნების შესრულების დროს.