PHP - 来自URL的请求语言

问题描述 投票:-1回答:1

我正在使用此代码(如下所示)在我的网站上获取多种语言。问题是;每次新访问者访问我的网站时,第一次(由于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"); 
} 
?>
php
1个回答
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 ['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>

尝试更改语言,您会看到标题,通知会更改为您选择的语言。

© www.soinside.com 2019 - 2024. All rights reserved.