PHP мультиязычный сайт - PullRequest
       28

PHP мультиязычный сайт

0 голосов
/ 23 октября 2009

Я хочу создать мультиязычный сайт с PHP на основе таких сессий, как этот сайт

Я пытаюсь с этим кодом, но не работает:

    <?

session_start();
$lang = $_GET['lang'];
if (!isset($lang)) {
    include ('ar/language.php');
    $lang = "ar";
}
else if ($lang == "en" ) {include ('en/language.php'); $SESSION["lang"] = "en"; header("Location: http://it2.in/");}
else if ($lang == "ar" ) {include ('ar/language.php'); $SESSION["lang"] = "ar"; header("Location: http://it2.in/");}
else if ($lang != "ar" || "en") {header("Location: http://it2.in/"); header("Location: http://it2.in/");}

?>

Любой может мне помочь. Спасибо


Спасибо всем. Но @ сейчас ничего не работает, есть другие идеи.

Ответы [ 5 ]

2 голосов
/ 23 октября 2009

Возможно, ваша проблема в последней строке. Это должно работать как:

else if ($lang != "ar" || $lang != "en") {header("Location: http://it2.in/");}

Также я предлагаю вам создать отдельный массив для хранения доступных языков

$known_languages = array('en', 'ar'); ## just add new language here when you need
session_start();

## if language is stored in SESSION then use it, otherwise use GET params
if (array_key_exists('lang', $_SESSION)) {
    $lang = $_SESSION['lang'];
    include($lang.'/language.php'); 
    ## echo "You current language is <strong>$lang</strong>";
    include("page.php");
}
else {
    $lang = $_GET['lang'];

    ## if language is not set or is not available, then use default value
    if (!isset($lang) || !in_array($lang, $known_languages) {
        $lang = "ar";
    }
    include($lang.'/language.php'); 
    $SESSION["lang"] = $lang; 
    header("Location: http://it2.in/");
}
1 голос
/ 23 октября 2009

Когда вы используете функцию заголовка, всегда рассматривайте возможность использования exit (); после этого остановить выполнение кода

<?php
session_start();
$lang = $_GET['lang'];
if (!isset($lang)) {
    include ('ar/language.php');
    $lang = "ar";
}
else if ($lang == "en" ) {
include ('en/language.php');
$SESSION["lang"] = "en"; 
header("Location: http://it2.in/");
exit(); 
}
else if ($lang == "ar" ) {
include ('ar/language.php');
 $SESSION["lang"] = "ar"; 
header("Location: http://it2.in/");
exit();
}
else if ($lang != "ar" || $lang != "en") {
header("Location: http://it2.in/"); 
exit(); 
}

?>

теперь вы должны быть перенаправлены на нужную страницу :)

1 голос
/ 23 октября 2009
$lang= $_GET['lang'];
include $lang . "/language.php";

Php по умолчанию отключает такие включения, поэтому вам придется включить его вручную.

Реальный вопрос: что находится в language.php?

// en/language.php
$MESSAGES[0] = "Hello";
// es/language.php
$MESSAGES[0] = "Hola";
// fr/language.php

Тогда в вашем коде вы делаете:

print "<h1>" . $MESSAGES[0] . "</h1>";

Это не будет увеличиваться, и ваша голова будет работать очень быстро (подождите, сообщение будет 1023? Или 1022? Или 2149?). Пожалуйста, рассмотрите возможность переноса вашего кода в GetText, который, IMHO, является лучшим решением и позволяет добавлять новые языки без нового кода. Вот первый хит от Google, который даст вам преимущество. Если вам нужна дополнительная информация, пожалуйста, посмотрите вокруг. http://www.phpdig.net/ref/rn26.html

1 голос
/ 23 октября 2009

Не могли бы вы объяснить, что именно не работает?

В вашем операторе if есть ошибка. Последнее else-if всегда верно, потому что вы ИЛИ результат из сравнения со строкой «en» Оператор else сделает всю работу.

<?

    session_start();
    $lang = $_GET['lang'];
    if (!isset($lang)) {
        include ('ar/language.php');
        $lang = "ar";
    }
    else if ($lang == "en" ) {include ('en/language.php'); $SESSION["lang"] = "en"; header("Location: http://it2.in/");}
    else if ($lang == "ar" ) {include ('ar/language.php'); $SESSION["lang"] = "ar"; header("Location: http://it2.in/");}
    else {header("Location: http://it2.in/"); header("Location: http://it2.in/");}

?>
0 голосов
/ 23 октября 2009
<?php
session_start();

$lang = &$_SESSION['lang'];
$lang = $_GET['lang'];
switch ($lang)
{
    case 'en' :
        include ($lang . '/language.php');
        break;
    case 'ar' : 
    default :
        include ('ar/language.php');
        $lang = 'ar';
}

header('Location: http://it2.in/');
?>
...