Thứ Ba, 25 tháng 11, 2025

Thay đổi ngôn ngữ ngay đường link không cần quay về trang chủ

#### MMLABEL #### 


#### Áp dụng vào ngôn ngữ 2 lá cờ ANH - VIỆT 
$urls = $this->get_lang_urls($op, $currentlang);

$vn_url = $urls['vn'];

$en_url = $urls['en'];  


#### Các Funtion

public function get_lang_urls($op, $currentlang) {

        

    $current_url = $_SERVER['REQUEST_URI'];

    $current_path = parse_url($current_url, PHP_URL_PATH);

    $segments = explode('/', trim($current_path, '/'));

    $slug_con = strtolower(end($segments));


    // map chính từ data_superlink

    $data_chill = data__superlink();  

    $super1 = explode("**", $data_chill['super1']);  

    $super2 = explode("**", $data_chill['super2']);  

    $map_main = array();  

    foreach ($super1 as $k => $v) {  

        $map_main[$v] = isset($super2[$k]) ? $super2[$k] : '';  

    }  


    // map phụ theo op và ngôn ngữ

    switch ($op) {  

        case 'display_category':  

            $ch_title = $this->ShopCid__Title__lang($slug_con);  

            break;  

        case 'display_product':  

            $ch_title = $this->ShopPid__Title__lang($slug_con);  

            break;  

        case 'page_category':  

            $ch_title = $this->pageCatgory__Catidlink__lang($slug_con);  

            break;  

        case 'page_detail':  

            $ch_title = $this->pageDetail__Sidlink__lang($slug_con);  

            break;  

        default:  

            $ch_title = '';  

            break;  

    }  


    $map_sub = ($currentlang == "vietnamese" && $ch_title) ? array($slug_con => $ch_title) : ($ch_title ? array($ch_title => $slug_con) : array());  


    $links = $this->mobi__switch_language_url($current_url, $map_main, $map_sub);  


    return array(  

        'vn' => $links['vn'],  

        'en' => $links['en']  

    );  

        

}

#### Function 2

public function ShopCid__Title__lang($cidlink){


    global $db,$prefix,$site_live,$currentlang;


    $langid = get_lang_id();


    // Chuẩn hóa slug con

    $cidlink = strtolower($cidlink);


    $sql ="SELECT a.cid 

    FROM ".$prefix."_shop_categories a,

    ".$prefix."_shop_categories_lang b  

    WHERE a.cid=b.cid 

    AND LOWER(b.cid_link) = LOWER('".$cidlink."')

    AND b.lang_id=$langid";     


    $rs = $db->sql_query($sql);

    $row = $db->sql_fetchrow($rs);


    if(!$row){

        return ''; // Không tìm thấy → tránh báo lỗi

    }


    $cid = $row["cid"];


    // Đổi: VN → EN hoặc EN → VN

    if($langid==1){

        return $this->cidlink__tienganh($cid,2);

    }else{

        return $this->cidlink__tienganh($cid,1);

    }

}



public function ShopPid__Title__lang($pidlink){


    global $db,$prefix,$site_live,$currentlang;


    $langid = get_lang_id();


    $sql ="select a.pid from ".$prefix."_shop a,".$prefix."_shop_lang b where a.pid=b.pid AND b.pid_link ='".$pidlink."' and b.lang_id=".$langid;

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    $row = $db->sql_fetchrow($rs);

    $pid = $row["pid"];


    if($langid==1){

        return  $this->pidlink__tienganh($pid,2);

    }else{

        return  $this->pidlink__tienganh($pid,1);

    }

}


public function pageCatgory__Catidlink__lang($catid_link){


    global $db,$prefix,$site_live,$currentlang;


    $langid = get_lang_id();


    $sql ="select catid from ".$prefix."_stories_cat_lang where catid_link ='".$catid_link."' and lang_id=".$langid;

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    $row = $db->sql_fetchrow($rs);

    $catid = $row["catid"];


    if($langid==1){

        return $this->catidlink__tienganh($catid,2);

    }else{

        return $this->catidlink__tienganh($catid,1);

    }

}


public function pageDetail__Sidlink__lang($sid_link){


    global $db,$prefix,$site_live,$currentlang;


    $langid = get_lang_id();


    $sql ="select sid from ".$prefix."_stories where sid_link ='".$sid_link."' and langid=".$langid;

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    $row = $db->sql_fetchrow($rs);

    $sid = $row["sid"];


    if($langid==1){

        return $this->sidlink__tienganh($sid,2);

    }else{

        return $this->sidlink__tienganh($sid,1);

    }

}


#### Function 3

public function cidlink__tienganh($cid,$langid){


    global $db,$prefix,$site_live,$currentlang;


    $sql ="select * from ".$prefix."_shop_categories_lang  where cid ='".$cid."' and lang_id=$langid";

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    while($row = $db->sql_fetchrow($rs)){

        $cid_link = $row["cid_link"];

        return $cid_link;       

    }

}


public function pidlink__tienganh($pid,$langid){


    global $db,$prefix,$site_live,$currentlang;


    $sql ="select * from ".$prefix."_shop_lang  where pid ='".$pid."' and lang_id=$langid";

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    while($row = $db->sql_fetchrow($rs)){

        $pid_link = $row["pid_link"];

        return $pid_link;       

    }

}


public function catidlink__tienganh($catid,$langid){


    global $db,$prefix,$site_live,$currentlang;


    $sql ="select * from ".$prefix."_stories_cat_lang  where catid ='".$catid."' and lang_id=$langid";

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    while($row = $db->sql_fetchrow($rs)){

        $catid_link = $row["catid_link"];

        return $catid_link;     

    }

}


public function sidlink__tienganh($sid,$langid){


    global $db,$prefix,$site_live,$currentlang;


    $sql ="select * from ".$prefix."_stories where sid ='".$sid."' and langid=$langid";

    // echo $sql;

    $rs  = $db->sql_query($sql);

    $data = array();

    while($row = $db->sql_fetchrow($rs)){

        $sid_link = $row["sid_link"];

        return $sid_link;       

    }

}


#### Note: code cơ bản ban đầu (code thuần), chưa đưa dữ liệu vào.


// $current_url = "/San-pham/nhan-decal-trong-nha";

// $map_main = array(

    'San-pham' => 'Product'

);

// $map_sub = array(

    'nhan-decal-trong-nha' => 'indoor-decals'

);


// $map_main = array(

//     'gioi-thieu' => 'about-us',

//     'tin-tuc-su-kien'  => 'news-event',

//     'tin-tuc'     => 'news',

//     'Tin-tuc'     => 'News',

//     'lien-he'    => 'contact-us',

//     'San-pham'   => 'Product',

//     'san-pham'   => 'product',

//     'trang-chu'  => 'home-page',

// );

👉 Cách 2:

///////////////////////////////////////////////////////////////////////////////////////////////

KEIEIJUKU

function google_translate_web(){
    ?>

    <!-- Ẩn widget gốc -->
    <div id="google_translate_element" style="display:none;"></div>

    <!-- Nút chọn ngôn ngữ -->
    <!-- <div id="translateBox">
        <button onclick="changeLang('vi')">🇻🇳 VI</button>
        <button onclick="changeLang('en')">🇺🇸 EN</button>
        <button onclick="changeLang('zh-CN')">🇨🇳 中文</button>
        <button onclick="changeLang('ko')">🇰🇷 한국어</button>
        <button onclick="changeLang('ja')">🇯🇵 日本語</button>
    </div> -->

    <style type="text/css">
        #translateBox {
            position: fixed;
            top: 80px;
            right: 30px;
            z-index: 9999;
        }

        #translateBox button {
            margin: 2px;
            padding: 6px 10px;
            border: none;
            background: #eee;
            cursor: pointer;
            border-radius: 5px;
            font-size: 13px;
        }

        #translateBox button:hover {
            background: #ddd;
        }

        /* Ẩn thanh Google */
        .goog-te-banner-frame.skiptranslate {
            display: none !important;
        }

        .goog-te-banner-frame,
        .goog-logo-link,
        .goog-te-gadget {
            display: none !important;
        }
        /* Ẩn toàn bộ Google Translate */
        .skiptranslate {
            display: none !important;
        }

        /* Fix lỗi bị đẩy trang xuống */
        body {
            top: 0 !important;
        }
        .languageTop .popup li a img {
            width: 25px;
            height: 18px;
            border: 1px solid rgba(0, 0, 0, 0.1);
        } 

    </style>

    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function () {

            var langMap = {
                "vi": "Tiếng Việt",
                "en": "English",
                "ja": "日本語",
                "ko": "한국어",
                "zh": "中文"
            };

            function getCookie(name) {
                var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
                if (match) return match[2];
                return null;
            }

            var lang = 'vi';

            // 👉 Ưu tiên Google Translate
            var match = document.cookie.match(/googtrans=\/vi\/(.*?)($|;)/);
            if (match) {
                lang = match[1];
            } else {
                lang = getCookie('site_lang') || 'vi';
            }

            // 👉 chuẩn hóa
            lang = lang.toLowerCase();
            if (lang.indexOf('-') !== -1) {
                lang = lang.split('-')[0];
            }

            var el = document.getElementById("selected-lang");
            if (el && langMap[lang]) {
                el.childNodes[0].nodeValue = langMap[lang] + " ";
            }

        });
    </script>
    

    <script>
        window.__gt_inited = false;

        // INIT GOOGLE
        function googleTranslateElementInit() {
            if (window.__gt_inited) return;
            window.__gt_inited = true;

            new google.translate.TranslateElement({
            pageLanguage: 'vi',
            includedLanguages: 'vi,en,ja,ko,zh-CN',
            autoDisplay: false,
            multilanguagePage: true
            }, 'google_translate_element');
        }

        // ĐỔI NGÔN NGỮ
        function changeLang(lang) {

            // Xóa cookie cũ
            document.cookie = "googtrans=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;";

            // googtrans (Google dùng)
            document.cookie = "googtrans=/vi/" + lang + "; path=/; domain=" + location.hostname+ "; max-age=2592000";

            // cookie riêng của bạn
            document.cookie = "site_lang=" + lang + "; path=/; domain=" + location.hostname + "; max-age=2592000";

            // Lưu lại
            localStorage.setItem("lang", lang);

            // Reload
            setTimeout(function () {
            location.reload();
            }, 200);
        }

            // LẤY NGÔN NGỮ HIỆN TẠI
        function getCurrentLang() {
            var match = document.cookie.match(/googtrans=\/vi\/(.*?)($|;)/);
            return match ? match[1] : 'vi';
        }

            // AUTO LOAD NGÔN NGỮ
            window.addEventListener("load", function () {

            var lang = localStorage.getItem("lang") || getCurrentLang();

            if (lang && lang !== 'vi') {
                document.cookie = "googtrans=/vi/" + lang + "; path=/; domain=" + location.hostname + "; max-age=2592000";
            }

        });
    </script>

    <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
    <?php
}

function languageTop__supplier(){
        
    global $site_live, $currentlang, $ThemeSel,$op,$module_name;    

     $lang_num = 1; // mặc định VI

    if (isset($_COOKIE['site_lang_num'])) {
        $lang_num = intval($_COOKIE['site_lang_num']);
    }

    if (!in_array($lang_num, array(1,2,3,4,5))) {
        $lang_num = 1;
    }


    $LANG = array(

        1 => array(
            'content'   => '1',
            'icon'      => 'vi',
            'ngonngu'   => 'Tiếng Việt',
        ),

        2 => array(
            'content'   => '2',
            'icon'      => 'en',
            'ngonngu'   => 'English',
        ),
        
        
        3 => array(
            'content'   => '3',
            'icon'      => 'ja',
            'ngonngu'   => 'Japanese',
        ),
        4 => array(
            'content'   => '4',
            'icon'      => 'ko',
            'ngonngu'   => 'Korean',
        ),
        5 => array(
            'content'   => '5',
            'icon'      => 'zh-CN',
            'ngonngu'   => 'Chinese',
        )
    );


    echo'<ul class="lang-switch language panel-items langList-options">';

        echo '<li class="option-lang">
            <a class="nail-link" href="javascript:void(0)" onclick="changeLang(\'vi\')" translate="no">
                Tiếng Việt
            </a>
        </li>';

        echo '<li class="option-lang">
            <a class="nail-link" href="javascript:void(0)" onclick="changeLang(\'en\')" translate="no">
                English
            </a>
        </li>';
       

        echo'<li class="option-lang">
            <a class="nail-link" href="javascript:void(0)" onclick="changeLang(\'zh-CN\')" translate="no">
                Chinese
            </a>
        </li>

        <li class="option-lang">
            <a class="nail-link" href="javascript:void(0)" onclick="changeLang(\'ja\')" translate="no">
               Japanese
            </a>
        </li>

        <li class="option-lang">
            <a class="nail-link" href="javascript:void(0)" onclick="changeLang(\'ko\')" translate="no">
               Korean
            </a>
        </li>';

    echo'</ul>';


    echo'<div id="google_translate_element"></div>';
              
}

**** CSS
.rfq-form .title_wrap .langList .selected-lang {
    line-height: 21px;
    display: inline-block;
    padding: 5px 10px;
    border-radius: 3px;
}
.rfq-form .title_wrap .langList .langList-options {
    display: none;
    position: absolute;
    right: -1px;
    top: 100%;
    background: #fff;
    white-space: nowrap;
    padding: 5px 0;
    border: 1px solid #dae0e6;
    border-radius: 3px;
    box-shadow: 3px 3px 6px rgba(0, 0, 0, .15);
    z-index: 99;
    list-style: none;
}
.rfq-form .title_wrap .langList:hover .langList-options {
    display: block;
}
.rfq-form .title_wrap .langList:hover .selected-lang {
    color: #e64545;
}
.rfq-form .title_wrap .langList .langList-options::before {
    content: "";
    display: block;
    position: absolute;
    width: 7px;
    height: 7px;
    border-top: 1px solid #dae0e6;
    border-left: 1px solid #dae0e6;
    transform: rotate(45deg);
    background: #fff;
    top: -5px;
    left: auto;
    right: 13px;
}
.rfq-form .title_wrap .langList .langList-options a {
    padding: 5px 10px;
    font-size: 14px;
    display: block;
    color: #222;
}
.rfq-form .title_wrap .langList .langList-options a:hover {
    background: #e6ecf2;
    text-decoration: none;
}
.rfq-form .title_wrap .langList:hover .fa-icon {
    transform: rotate(-180deg);
}

**** HTML
<div class="langList">
    <span class="selected-lang" id="selected-lang">'.$LANG[$lang_num]['ngonngu'].'
    <i class="fa fa-angle-down fa-icon" aria-hidden="true"></i></span>';
    languageTop__supplier();    
</div>


Không có nhận xét nào:

Đăng nhận xét