我正在使用此代码(如下所示)在我的网站上获取多种语言。问题是;每当新访问者进入我的网站时,访问者首次获得空白页。访问者一次刷新页面后,一切都可以。因此,我想制作一些访客可以使用当前方法旁边的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");
}
?>
您的方法是正确的,但是看起来问题在于您实现它的方式。
您可以将其放入Bootstrap脚本或类似内容中,而不是在每个页面上检查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';
上面的代码我们已经启动了会话,然后我们定义了一个存储我们支持的语言的数组。$语言变量存储默认语言。然后,我们检查会话中是否设置了语言。如果不是,我们检查是否有语言cookie。如果cookie在那里,其价值与我们支持的语言之一匹配,我们创建了一个会话变量,代表该语言以及覆盖默认语言。
如果在会话中已经设置了该语言,我们将该值分配给$语言变量再次覆盖默认语言。
最后,我们将该语言变量与要求构造一起使用,以包括相关的语言文件。
让用户更改他们的语言,例如,创建一组链接,如下所示:
<a href="language.php?lang=german">German</a>
<a href="language.php?lang=french">French</a>
<a href="language.php?lang=english">English</a>
然后用您的语言脚本,您可以添加以下代码以处理语言更改。
$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 ['lang'],如果是的,那么我们进行了一次测试,以查看该语言是否在我们支持的语言列表中。如果是这样,我们将语言添加到了会话变量中。我们还创建了一个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>
尝试更改语言,您会看到标题,注意到已更改为您选择的语言。