萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP/JS 根據瀏覽器語言自動跳轉中英文頁面實作

PHP 版:伺服器端判斷導向

適用於首頁入口,SEO 友善,無需載入頁面再跳轉。

<?php
// 取得瀏覽器語言前 5 碼(如 zh-cn, en-us)
$lan = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);

if ($lan === "zh-cn") {
    // 簡體中文 → 中文版
    header("Location: gb/index.htm");
    // 或輸出 meta refresh(不建議)
    // echo "<meta http-equiv='refresh' content='0;URL=gb/index.htm'>";
} else {
    // 其他語言 → 英文版
    header("Location: eng/index.htm");
}
exit;
?>

改進建議: 支援更多語言、使用 Locale::acceptFromHttp() (intl 擴展) 更精準解析、記錄使用者偏好至 Cookie/Session 供後續優先參考。

JavaScript 版:客戶端判斷導向

放在 <head> 中,適合靜態頁面或無 PHP 環境。

<script>
(function() {
    var lang = navigator.language || navigator.userLanguage;  // 相容 IE
    lang = lang.substr(0, 2).toLowerCase();  // 取前兩碼:zh, en, ja...
    
    var urlMap = {
        'zh': 'zh-cn.html',   // 簡中
        'tw': 'zh-tw.html',   // 繁中(需進一步判斷)
        'en': 'en.html',      // 英文
        'ja': 'ja.html',      // 日文
        'ko': 'ko.html',      // 韓文
        'de': 'de.html'       // 德文
    };
    
    // 繁簡中文細分
    if (lang === 'zh') {
        var fullLang = (navigator.language || navigator.userLanguage).toLowerCase();
        if (fullLang.indexOf('tw') > -1 || fullLang.indexOf('hk') > -1 || fullLang.indexOf('mo') > -1) {
            lang = 'tw';
        } else {
            lang = 'zh';
        }
    }
    
    var targetUrl = urlMap[lang] || urlMap['en'];  // 預設英文
    window.location.replace(targetUrl);  // replace 不留歷史紀錄
})();
</script>

兩種方案比較

維度PHP 版JavaScript 版
執行時機伺服器端,回應前客戶端,頁面載入後
SEO友善(直接 302/輸出內容)較差(爬蟲可能不執行 JS)
快取需注意 Vary: Accept-Language靜態頁可快取
語言偵測準確度高(完整 Header)中(依賴 navigator API)
使用者偏好覆蓋易整合 Cookie/Session需自行讀寫 Cookie/localStorage

最佳實踐:混合策略

  1. PHP 端優先判斷,輸出 <html lang="zh-CN"> 與 hreflang 標籤
  2. 頁面內提供語言切換選單,寫入 Cookie(如 lang=zh-CN)
  3. 下次訪問 PHP 讀取 Cookie 優先,無 Cookie 再回退 HTTP_ACCEPT_LANGUAGE
  4. JS 端僅作為無 PHP 環境的備援

Demo 參考

實際效果可參考:https://www.gabion.cn

copyright © 萬盛學電腦網 all rights reserved