0

我有这个 PHP 脚本。这是唯一对我有用的:

<?php
/*Check_if_user_has_changed_language: */
if(isset($lang)){/*If_so:*/
    setcookie("ling",$lang,time()-60*60*24*365,"/",".sayip.info",0);/*Wipe_previous_cookie*/
    setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0);/*Whatever_the_means_lang_has_been_stored,_store_latest_lang_in_new_cookie:*/
    //echo "<script language=\"JavaScript\">alert('Selected language=$lang')</script>";/*UnComment_to_check*/
}else{/*If_user_has_NOT_changed_language:*/
    if(isset($_COOKIE['ling'])){/*Check_if_user-language_cookie_is_set._If_so:*/
        $lang=$_COOKIE['ling'];
        setcookie("ling",$lang,time()-60*60*24*365,"/",".sayip.info",0);/*Wipe_previous_cookie*/
        setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0);
        //echo "<script language=\"JavaScript\">alert('Cookie language=$lang')</script>";/*UnComment_to_check*/
    }else{/*If_user-language_neither_selected_nor_in_cookie,_choose_browser_language:*/
        $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
        setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0);
        //echo "<script language=\"JavaScript\">alert('Your browser language=$lang')</script>";/*UnComment_to_check*/
    }
}
?>

首先,代码检测用户浏览器的语言。没关系。

然后将信息存储在 cookie 中。没关系。

好吧,在这段代码中一切正常。我真正需要的是为访问者创建一个更改语言的选项。我在想像链接的标志图像这样的东西,所以当有人点击标志时,它会改变语言。

有人可以通过一个例子甚至一个干净、完整的解决方案向我解释吗?我的PHP技能很差。

提前致谢。

4

4 回答 4

0

我会将所选语言放在 URL 中,例如. 这使得所选语言透明且易于更改。http://example.com/en/foo/bar

于 2009-05-19T17:42:47.117 回答
0

如果我知道如何大声笑,我会提出来......因为我在测试或多或少 10 个不同的脚本后让这个脚本工作,我不喜欢退缩,只需要一个如何放置标志以及当有人点击标志时的示例它改变了cookie的价值......

于 2009-05-19T18:05:30.687 回答
0

我不确定你的问题是否正确

如果您要在页面中为每种语言放置一个链接,请将链接设置为 http://www.example.com/?lang=jp

然后在您发布的脚本之前的 php 代码中添加

if (isset($_GET['lang'])) $lang = $_GET['lang'];

这是你说的吗?

于 2009-05-19T20:45:28.450 回答
0

一个更优雅的解决方案可能是检查用户的标题。 大多数浏览器将允许用户在首选项中设置他们的首选语言。这又会随请求发送一个 HTTP 标头。标题看起来像这样。

接受语言:en-us,en;q=0.8,ar-ly;q=0.5,id;q=0.3

该值是接受语言的逗号分隔列表,按首选项排序( q=x 部分是首选项)。通过这种方式,您可以自动检测用户选择查看网络的语言,并在您拥有它时显示它。

于 2009-05-20T05:07:05.033 回答