2017-04-04 181 views
-1

我试图做一个多语言网站后this的例子。 我做了一个文件夹语言,并创建了2个文件en.php和gr.php。

这里有我的文件

语言/ gr.php

<?php 
$lang = array(
//nav bar 
'nav1' => 'Αρχική', 
'nav2' => 'Δυτική Αττική', 
'nav3' => 'Εκδηλώσεις', 
'nav4' => 'Σύλλογοι', 
'nav5' => 'Καταστήματα' 
); 
?> 

语言/ en.php

<?php 
$lang = array(
//nav bar 
'nav1' => 'Home', 
'nav2' => 'West Attica', 
'nav3' => 'News/Events', 
'nav4' => 'Associations', 
'nav5' => 'Stores' 
); 
?> 

和ini.php

<?php 
session_start(); 

$allowed_lang = array('gr', 'en'); 

if (isset($_GET['lang']) === true && in_array($_GET['lang'], $allowed_lang) === true){ 
$_SESSION['lang'] = $_GET['lang']; 
} 

include 'language/' . $_SESSION['lang'] . '.php'; 

?> 

当我我试图运行它,我得到这个错误

说明:未定义指数:朗在上线/home/user/public_html/init.php 10
警告:包括(语言/ .PHP):未能打开流:在没有这样的文件或目录/在/ home/user/php中,include(include_path ='。:/ usr/share/php')打开'language/.php'失败。上线的public_html/10的init.php

试图呼应$_GET['lang'];但结果没有值

这意味着$_GET['lang']为空

我在想什么?

+1

修复路径,其余应遵循 –

+0

如果什么也没有郎$ _GET?我认为你应该为$ _SESSION ['lang'] – Andreas

+0

提供一个初始值,所以现在两个答案都是正确的,哪一个我应该接受为正确的? – vaggelis

回答

0

试试这个

if (!empty($_GET['lang']) && in_array($_GET['lang'], $allowed_lang)) 
{ 
    # TRUE part 
    $_SESSION['lang'] = $_GET['lang']; 
    include 'language/' . $_SESSION['lang'] . '.php'; 
} 
else 
{ 
    # FALSE part 
    echo "Selected Language Couldn't initialize"; 
    include 'language/en.php'; 
} 

有用的链接

  1. PHP in_array() Function
  2. PHP 5 Sessions
  3. isset() and empty() - what to use
+0

阿卜杜拉你好,谢谢你的回答,它的工作就像一个魅力! – vaggelis

+0

@vaggelis接受,如果工作 –

+0

这将不会在后续页面加载时从会话中拉出lang。也就是说,如果你申请GR,那么它会在第一页给你GR,在下一个给你EN。 –

0

您没有默认设置,因此当_GET变量为空时,您会在不存在的文件上获得包含。也许只是硬编码默认:

if (empty($_SESSION['lang'])) { 
    $_SESSION['lang'] = 'en'; 
} 
if (isset($_GET['lang']) ...) { 
} 
include 'language/' . $_SESSION['lang'] . '.php'; 
+0

感谢您的答案alex两个答案都像魅力一样工作! – vaggelis