PHP-从URL请求语言

PHP-从URL请求语言,php,Php,我正在使用此代码(如下所示)在我的网站上获取多种语言。问题是,;每次新访问者访问我的站点时,第一次(由于cookie请求)访问者都会得到一个空白页面。访客刷新页面一次后,一切正常。因此,我想让访问者可以使用当前方法旁边的URL请求他们自己喜欢的语言(我目前使用一个表单来选择语言)。(类似于?lang=DE)但是我应该怎么做呢 代码: <?PHP ob_start (); $aTalen = array ("General", "Nederland", "België", "Belgien

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

您的方法是正确的,但问题似乎在于您的实施方式

您可以将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';
我们所做的是检查是否设置了$\u 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'];


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

查询字符串由
$\u GET[]
超全局数组处理。语言切换器的实现取决于您,但这应该为您指明正确的方向direction@MikRoe Hollywood Games你网站的导航流程是什么?这是否像您进入index.php并在那里检查lang cookie是否可用。如果确实如此,请加载语言并显示页面。如果cookie不存在,则重定向到语言选择页面。当用户选择并提交首选语言时,它会设置一个cookie并重定向回索引?正如Major Productions LLC建议的那样,在脚本中使用$_GET[variable]以获得所需的内容。如果将所有内部链接与该参数相关联,则不需要cookie作为选项。一些浏览器/用户关闭了cookies。@MajorProductionsLLC您有一个例子吗?我是新来的,所以我不知道在哪里/如何做。@AmilaDev我已经使用PHP include在每个页面上导入了一个
setcookie
。因此,访问者第一次访问哪个页面并不重要。它总是设置一种语言(在重新加载之后)。当人们想要改变他们的语言时,他们应该转到设置页面,如果他们应用了他们选择的语言,页面将重新加载自己的语言<代码>标题('Location:'.$_SERVER['REQUEST_URI'])。看起来很不错,但是。。我对PHP等非常陌生。那么我如何用我目前的方法组合/替换它呢?@Mik Roe Hollywood Games你可以简单地用我上面建议的方法替换你的语言检查/加载代码。如果是针对每个页面,您可以将代码放入单独的脚本中,并将其包含在每个页面上。然后创建一个单独的language.php来切换语言。我已经完成了。在我的部件文件夹中创建了一个新的language.php,在我的根目录中创建了一个language.php。但我不认为我需要两个单独的文件,是吗?因为,当我尝试像这样的链接时:
,什么都没有发生。。“只是刷新一下,就这样了。”米克洛霍利沃德格姆斯一点也不。您不需要有两个单独的language.php脚本。只有根目录中的一个就足够了。其目的是简单地在会话中设置“lang”值。然后,当您加载index.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']);
<?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>