Установить язык по умолчанию с помощью php

Я пытаюсь настроить многофункциональный веб-сайт с помощью файла cookie. Все в порядке, но у меня возникли проблемы с установкой языка по умолчанию. Я получаю сообщение об ошибке «неопределенный индекс» в php, когда я перехожу на корневой веб-сайт без параметра.

<?php
if (isset ($_COOKIE['CHOIXlang']) && $_GET['langue'] != 'fr' && $_GET['langue'] != 'en' && $_GET['langue'] != 'es') 
{           
$langue = $_COOKIE['CHOIXlang'];
}
else if ($_GET['langue'] == 'en' || $_GET['langue'] == 'fr' || $_GET['langue'] == 'es')
{ 
$langue = $_GET['langue'];
set_cookie($langue);
}
else            
{
$langue = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
set_cookie($langue);
}
?>

<?php
function set_cookie($langue)
{

$expire = 365*24*3600;

if (setcookie("CHOIXlang", $langue, time() + $expire) != TRUE)
    {

    }
else
    {
    setcookie("CHOIXlang", $langue, time() + $expire);

    }
}
?>

А в теле:

<?php 

if ($_GET['langue'] == "fr" || $langue == "fr") 
{
    include('lang/fr-lang.php');
}
elseif ($_GET['langue'] == "en" || $langue == "en")
{
    include('lang/en-lang.php');
} 
elseif ($_GET['langue'] == "es" || $langue == "es")
{
    include('lang/es-lang.php');
} 


?>

Что я пропустил, чтобы установить язык по умолчанию при открытии веб-сайта?

Спасибо


person user3241210    schedule 27.01.2014    source источник
comment
какой индекс массива вызывает проблему?   -  person Karoly Horvath    schedule 27.01.2014


Ответы (2)


Вам нужно проверить, установлен ли ваш параметр get langue: isset($_GET['langue'])

<?php 

if (!isset($_GET['langue'])
{
    include('lang/default-lang.php');
}
elseif ($langue == "fr") 
{
    include('lang/fr-lang.php');
}
elseif ($langue == "en")
{
    include('lang/en-lang.php');
} 
elseif ($langue == "es")
{
    include('lang/es-lang.php');
} 
?>

Также вам нужно изменить эту строку: $langue = $_GET['langue']; на это:

if (isset($_GET['langue']))
   $langue = $_GET['langue'];

ОБНОВЛЕНИЕ

Вы не можете получить доступ к несуществующему значению GET. Для начала нужно проверить, был ли он установлен. isset($_GET['langue']) возвращает true, если параметр был установлен, поэтому просто используйте эту проверку один раз в начале кода. Я бы предложил это:

$langue = "";
if (!isset($_GET['langue']){
    $langue = $_GET['langue'];
}

затем используйте только $langue вместо $_GET['langue'].

person Itay Gal    schedule 27.01.2014
comment
хорошо, я пробовал это, но все равно получаю сообщение об ошибке, говорящее, что у меня есть неопределенный индекс: langue - person user3241210; 28.01.2014
comment
и, видимо, проблема связана с первой строкой моего кода - person user3241210; 28.01.2014
comment
Вы не можете получить доступ к несуществующему значению GET. Для начала нужно проверить, был ли он установлен. isset($_GET['langue']) вернуть true, если параметр был установлен, поэтому просто используйте эту проверку один раз в начале вашего кода. - person Itay Gal; 28.01.2014
comment
pk я наконец исправил это, спасибо, мне действительно нужно было проверить мой параметр. Благодарность - person user3241210; 28.01.2014

Установить Lan по умолчанию может быть так

if (@$_GET['lang'] == 'en') include('en-lang.php');
else include('fr-lang.php'); 

Используйте для этого $_GET:

Это немного затянуто, но может быть немного лучшим подходом:

<?php 

session_start(); 

if (isset($_SESSION['lang'])) $lang = $_SESSION['lang']; 

if (isset($_GET['lang'])) {
     $lang = preg_replace('/[^a-zA-Z]/', '', $_GET['lang']);
    $_SESSION['lang'] = $lang; 
}

if (!isset($lang)) $lang = 'fr'; 
$langfile = $lang . '-lang.php'; 

if (file_exists($langfile)) include ($langfile); 
else include('fr-lang.php');

?>
person EniGma    schedule 27.01.2014