我正在使用此代码(如下所示)在我的网站上获取多种语言。问题是;每次新访问者访问我的网站时,第一次(由于cookie请求)访问者都会获得一个空白页面。访问者刷新页面一次后,一切都还好。所以我想创建一些访问者可以使用当前方法旁边的URL请求他们自己的首选语言的东西(我目前使用表单来选择语言)。 (像?lang=DE
之类的东西。)但是我应该怎么做呢?
代码:
<?PHP
ob_start ();
$aTalen = array ("General", "Nederland", "België", "Belgien", "Belgique", "Belgium", "France", "Deutschland", "India", "Polska", "UK", "España", "Fryslân");
if (isset ($_POST['kiezen']))
{
setcookie ("taal", $_POST['taalkeuze'], time()+60*60*24*7*52, "/", ".test.com");
header('Location: '.$_SERVER['REQUEST_URI']);
}
if (!isset ($_COOKIE['taal']))
{
setcookie ("taal", "General", time()+60*60*24*7*52, "/", ".test.com");
}
elseif (!in_array ($_COOKIE['taal'], $aTalen))
{
setcookie ("taal", "General", time()+60*60*24*7*52, "/", ".test.com");
}
else
{
include ("/languages/" . $_COOKIE['taal'] . ".lang.php");
}
?>
答案 0 :(得分:0)
您的方法是正确的,但看起来问题在于您实施它的方式。
您可以将其放入引导脚本或类似内容中,而不是在每个页面上检查cookie。我们也不需要每次检查cookie。我们可以检查一次并将语言存储在会话变量中。
<?php
session_start();
$languages = array('jerman','french','english');
$language = 'english';
if(!isset($_SESSION['lang']))
{
// check for the cookie
if(isset($_COOKIE['lang']))
{
if(in_array($_COOKIE['lang'], $languages))
{
$language = $_COOKIE['lang'];
$_SESSION['lang'] = $_COOKIE['lang'];
}
}
}
else
{
$language = $_SESSION['lang'];
}
require 'languages/'.$language.'.lang.php';
上面的代码我们已经启动了会话,然后我们定义了一个数组来存储我们支持的语言。 $ language变量存储默认语言。然后我们检查语言是否在会话中设置。如果我们不检查是否有语言cookie。如果cookie存在且其值与我们支持的语言之一匹配,我们创建了一个表示该语言的会话变量,并覆盖了默认语言。
如果语言已在会话中设置,我们再次将该值分配给$ language变量,覆盖默认语言。
最后,我们使用该语言变量以及require构造来包含相关的语言文件。
要让用户更改他们的语言,您可以创建一组链接,如下所示:
<a href="language.php?lang=german">German</a>
<a href="language.php?lang=french">French</a>
<a href="language.php?lang=english">English</a>
然后在您的language.php脚本中,您可以添加以下代码来处理语言更改。
$languages = array('jerman','french','english');
if(isset($_GET['lang']))
{
if(in_array($_GET['lang'], $languages))
{
$_SESSION['lang'] = $_GET['lang'];
setcookie('lang', $_GET['lang'], time()+60*60*24*7*52, "/", ".test.com");
}
}
header('Location: '.$_SERVER['HTTP_REFERER']);
我们所做的是检查是否设置了$ _GET [&#39; lang&#39;],如果是这样,我们又做了一次测试,看看该语言是否在我们支持的语言列表。如果这是真的,我们已将语言添加到会话变量中。我们还创建了一个cookie,最后将用户重定向到他所在的页面。
尝试看看你是否能让它发挥作用。
您的语言文件可能如下所示:例如:english.lang.php
<?php
$lang['main_heading'] = 'This is My Heading';
$lang['sub_heading'] = 'This is My Sub Heading';
$lang['special_notice'] = 'Special Notice'];
您也可以在其他语言文件中重复此相同的机制。您必须维护键名,只需根据语言设置值。然后在加载语言文件后,您可以使用其值,如下所示:
<h1><?php echo $lang['main_heading'] ?></h1>
<h3><?php echo $lang['sub_heading'] ?></h3>
<p><?php echo $lang['special_notice'] ?></p>
尝试更改语言,您会看到标题,通知会更改为您选择的语言。