2017-04-04 64 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