我正在创建一个站点,只使用PHP作为后端(没有框架),它应该有3种语言版本.站点结构(表/ div)可能不太常见.它倾向于模拟Ajax有点行为.我在正文中包含一个文件(selector.php),它通过导航链接传递的_GET()来处理它的内容.这意味着,该网站实际上从未离开index.php.语言是链接(标志).
现在,我确实设法成功实现了3种语言(数组/会话/ cookie),它确实有效.但是,我需要的是能够使语言选择保持/刷新调用它的位置.这里变得棘手,因为我只使用一个页面,每个包含/后续包含(30+)都是从index.php调用的,所以使用它header ('Location: ...')
似乎不是一个选项.我知道如何检索我的当前地址,包括GET参数,所以我可以使用它.但是怎么样?在代码的开头读取它,然后在语言模块中重新读取在任何给定点都匹配.有一个会话,所以我也可以使用会话变量,但为内容制作35个以上的变量(所以url更改)并始终匹配它们,似乎不是正确的方法.哪里,更准确地说是如何捕捉语言变化,以及如何刷新/重定向到"同一页面"以使更改生效?它可能是一个设计流程.
注意1:使用mod_rewrite我重定向了我的语言查询,所以现在不是mysite.com/index.php?lang=en
,它的形式是mysite.com/en/index.php
这样我可以使用更友好的链接来调用正文内容.
注2:我通过上周阅读/搜索/谷歌领导的任何地方,尝试了无数次不同的方法,没有一个按预期工作(可能是概念流?!).
注3:由于这是针对明确要求不使用Java的客户端,请不要提供Ajax/jQuery/Java解决方案(有了这些,我知道该怎么做).
注意4:整个代码相当大,可以在这里粘贴,所以如果你需要看到不同的部分,给它们命名,我就会编辑我的问题.
注5:我仍然保留自己的初学者,所以请耐心等待.
提前致谢.
所以语言选择器看起来像这样:
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang'])) {
$lang = $_GET['lang'];
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30)); }
else if(isSet($_SESSION['lang'])) {
$lang = $_SESSION['lang']; }
else if(isSet($_COOKIE['lang'])) {
$lang = $_COOKIE['lang']; }
else {
$lang = 'ro'; }
switch ($lang) {
case 'en': $lang_file = 'lang.en.php'; break;
case 'it': $lang_file = 'lang.it.php'; …
Run Code Online (Sandbox Code Playgroud) php ×1