Hiển thị các bài đăng có nhãn Change Language PHP. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Change Language PHP. Hiển thị tất cả bài đăng

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>