PHP多语言站点href链接跳转默认语言问题修复咨询
修复PHP多语言站点链接跳转默认语言的问题
搭建了支持西班牙语(es)、英语(en)、法语(fr)三种语言的PHP多语言站点,但点击页面中的href链接时,始终跳转到默认语言页面而非当前所处语言页面,以下是问题分析和修复方案:
当前代码实现
head.php中的语言处理代码
// Languages $defaultLanguage = 'es'; $availableLanguages = array('es','en' ,'fr'); // Get language, check it and get translations $txt = array(); if (isset($_REQUEST['lang'])) { $lang = $_REQUEST['lang']; if (in_array($lang, $availableLanguages)) { include('php/translations/' . $lang . '.php'); } else { $lang = $defaultLanguage; include('php/translations/' . $defaultLanguage . '.php'); } } else { $lang = $defaultLanguage; include('php/translations/' . $defaultLanguage . '.php'); } ?>
导航链接代码
<li><a <?=($pagina == 'page1') ? 'class="active"':''?> href="page1.php"><?=$txt['menu_1']?></a></li> <li><a <?=($pagina == 'page2') ? 'class="active"':''?> href="page2.php"><?=$txt['menu_2']?></a></li> <li><a <?=($pagina == 'page3') ? 'class="active"':''?> href="page3.php"><?=$txt['menu_3']?></a></li> <li><a <?=($pagina == 'page4') ? 'class="active"':''?> href="page4.php"><?=$txt['menu_4']?></a></li>
问题原因
当前导航链接的href仅指向页面文件,没有携带当前语言的lang参数。当用户点击链接进入新页面时,$_REQUEST['lang']不存在,代码会自动使用默认语言es,导致跳转回默认语言页面。
修复方案
方案1:在链接中携带当前语言参数
修改导航链接,将当前语言的lang参数添加到href中,确保新页面能识别当前语言:
<li><a <?=($pagina == 'page1') ? 'class="active"':''?> href="page1.php?lang=<?=$lang?>"><?=$txt['menu_1']?></a></li> <li><a <?=($pagina == 'page2') ? 'class="active"':''?> href="page2.php?lang=<?=$lang?>"><?=$txt['menu_2']?></a></li> <li><a <?=($pagina == 'page3') ? 'class="active"':''?> href="page3.php?lang=<?=$lang?>"><?=$txt['menu_3']?></a></li> <li><a <?=($pagina == 'page4') ? 'class="active"':''?> href="page4.php?lang=<?=$lang?>"><?=$txt['menu_4']?></a></li>
方案2:使用Session持久化语言选择(可选)
如果不想在每个链接都添加lang参数,可以通过Session存储用户选择的语言,实现跨页面持久化:
- 修改head.php的语言处理代码,加入Session逻辑:
// 启动会话 session_start(); // Languages $defaultLanguage = 'es'; $availableLanguages = array('es','en' ,'fr'); // Get language, check it and get translations $txt = array(); if (isset($_REQUEST['lang'])) { $lang = $_REQUEST['lang']; // 验证语言有效性 if (in_array($lang, $availableLanguages)) { // 更新会话中的语言 $_SESSION['lang'] = $lang; include('php/translations/' . $lang . '.php'); } else { // 语言无效,使用会话中的语言或默认语言 $lang = isset($_SESSION['lang']) && in_array($_SESSION['lang'], $availableLanguages) ? $_SESSION['lang'] : $defaultLanguage; include('php/translations/' . $lang . '.php'); } } else { // 没有请求参数,优先使用会话中的语言 $lang = isset($_SESSION['lang']) && in_array($_SESSION['lang'], $availableLanguages) ? $_SESSION['lang'] : $defaultLanguage; include('php/translations/' . $lang . '.php'); } ?>
- 此时导航链接可以保持原有写法,无需添加
lang参数,新页面会自动读取Session中的语言设置。
内容的提问来源于stack exchange,提问作者Óscar Rabadán
相关产品推荐
相关产品推荐

