2009-10-23 236 views
0

我想要做多语言网站使用PHP基于这样的网站untiny.comPHP多语言网站

我尝试用这个代码,但没有工作会议:

<? 

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/");} 

?> 

任何人都可以帮助我。 谢谢


谢谢大家。 但@现在没有什么工作,是否有其他想法。

回答

2

可能你的问题是在最后一行。它应该像:

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/"); 
} 
+0

我试试这个代码,但是当我运行的网站给了我环路错误“该页没有正确重定向“ – jack55 2009-10-23 19:14:24

+0

尝试使用'header(”Location:new_page.html“);'而不是'http:// it2.in /' – 2009-10-23 20:20:15

+0

也不能正常工作:( – jack55 2009-10-23 20:35:49

1

你能解释一下究竟是什么不起作用?

您的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/");} 

?> 
1
$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>"; 

这不会扩大,而你的头会explote非常快(等待,消息是1023或1022或2149???)。请考虑将您的代码移植到GetText,恕我直言是一个更好的解决方案,并允许您添加新的语言而无需新的代码。这是来自谷歌的第一击,它会给你一个良好的开端。如果您需要更多信息,请围绕。 http://www.phpdig.net/ref/rn26.html

+0

+1在language.php可变暗示的getText – 2009-10-23 19:01:33

+0

这样的: $标题 和HTML: jack55 2009-10-23 19:16:16

+0

如果($ _REQUEST [ 'bday1'] &&!$ _REQUEST ['bday2']) $ error_user_forgot_to_add_birthday_to_page_1_but_he_wrote_on_page2 - >错误的错误代码...再次,这不会在现实生活中扩大规模。被警告。 – elcuco 2009-10-23 21:36:02

1

当你使用头函数时,一定要考虑使用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(); 
} 

?> 

现在的执行,你应该被重定向到您想要的页面:)

0
<?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/'); 
?> 
+0

给我循环错误“页面没有正确重定向” – jack55 2009-10-23 20:39:13