我正在开展一个项目,它需要两种语言,一种是阿拉伯语,一种是英语
所以为了处理我在页脚中添加了两个链接
对于这两种语言,一旦用户点击其中一种语言,它将通过$ _GET作为AR和EN发送值
然后创建一个具有这些值的cookie并调用一个名为的页面
翻译文本的ar.php / en.php取决于选择的语言
它不会在第一次尝试时创建,更新或删除cookie 当我设置cookie时,之后会有一个cookie处理,但是它的剂量 没有看到cookie我必须让运行完成并打开页面,然后我重新执行代码再次执行代码,cookie将在那里 我在netbeans和visual studio上尝试了相同的项目,但同样的结果我认为它可能是编译器的问题。
<?php
if(isset($_GET['lang']))
{
/* one cookie with the same name but the value will change depend on user choice if he changed the language
and by the value i will call the ar.php or en.php with the array with all the text content of the page */
$langu=$_GET['lang'];
switch($langu)
{
case "en":
setcookie("page_lang", "en", time() +3600,"/"); // set a cookie for english language
break;
case "ar":
setcookie("page_lang", "ar", time()+3600,"/"); // set a cookie for arabic language
break;
default:
setcookie("page_lang", "ar", time() -100,"/");
break;
}
}
//$langu="";
include("css/header.html");
if(isset($_COOKIE['page_lang']))
{// choosen language
$cookie_language =$_COOKIE['page_lang'];
include("lang/{$cookie_language}.php");
}else
{ //default language
include("lang/ar.php");
}
?>
答案 0 :(得分:1)
Cookie(以及$_COOKIE
数组)是基于浏览器的。因此,如果您执行setcookie
,则在请求完成后不会出现,并且浏览器会向您发送更多请求,以便您能够阅读它。
只需检查或GET参数,它就像:
if(isset($_COOKIE['page_lang']) || isset($_GET['lang') )
或者在阅读$_GET
时检查您之前设置的变量。
$langu = null;
if(isset($_GET['lang'])) {
$langu = $_GET['lang'];
switch($_GET['lang'])) {
case "en":
// set a cookie for english language
setcookie("page_lang", "en", time() +3600,"/");
break;
case "ar":
// set a cookie for arabic language
setcookie("page_lang", "ar", time()+3600,"/");
break;
default:
setcookie("page_lang", "ar", time() -100,"/");
$langu = 'ar';
break;
}
}
elseif (isset($_COOKIE['page_lang'])) {
$langu = $_COOKIE['page_lang'];
}
if (!is_null($langu) {
include("lang/{$langu}.php");
}
else {
include("lang/ar.php");
}
这样GET优先于cookie(所以你可以改变语言),你选择语言并在同一步骤设置cookie。
所以:如果用户点击语言按钮来更改语言,我们设置新的cookie并显示该语言。如果在参数中选择了无效语言,请返回默认语言。
如果没有参数,并且之前设置了cookie,则显示在cookie上选择的语言。如果既没有设置参数也没有设置cookier,只需显示默认语言。