PHP-来自URL的请求语言



我正在使用此代码(如下所示)在我的网站上获取多种语言。问题是;每当新访问者进入我的网站时,访问者首次获得空白页。访问者一次刷新页面后,一切都可以。因此,我想制作一些访客可以使用当前方法旁边的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>

尝试更改语言,您会看到标题,注意到已更改为您选择的语言。

最新更新