2011-03-29 80 views
2

我當前的代碼所做的是在檢查數據庫時,如果版本(FR和EN)爲True或False,則顯示正確的內容並顯示鏈接,以便顯示鏈接用戶可以切換語言。如果只存在一種語言,則內容以該語言顯示,並且不顯示鏈接。跟蹤會話變量中的語言

JavaScript中的2個功能都是這樣的,here`s的FR之一:

function makeVisibleFR() 
{ 
    document.getElementById('bbqc_contentFR').style.display="inline"; 
    document.getElementById('bbqc_contentEN').style.display='none'; 
    document.getElementById('vFrancais').style.display='none'; 
    document.getElementById('vAnglais').style.display="inline"; 
} 

什麼我想要一份補充到,這是記憶用戶的選擇,並顯示與以下頁面的選項相同的語言版本。

我想我需要創建一個$_SESSION['language']變量,並在其中存儲「FR」或「EN」,但我不確定如何在我的當前代碼中執行該操作。

<?php 
       if($versionFR == true) 
       { 
        if($versionEN == true) 
        { 
       ?> 
        <a href="javascript:makeVisibleEN()" id="vAnglais">Version Anglaise</a> 
        <div id="bbqc_contentFR"> 
         <h2><?php echo $titleFR; ?></h2> 
         <?php echo $contentFR; ?> 
        </div> 

        <a href="javascript:makeVisibleFR()" id="vFrancais" style="display:none">Version Française </a> 
        <div style="display:none" id="bbqc_contentEN"> 
         <h2><?php echo $titleEN; ?></h2> 
         <?php echo $contentEN; ?> 
        </div> 
       <?php 
        } 
        else 
        { 
       ?> 
        <div id="bbqc_contentFR"> 
         <h2><?php echo $titleFR; ?></h2> 
         <?php echo $contentFR; ?> 
        </div> 
       <?php 
        } 
       } 
       else 
       { 
        if($versionEN == true) 
        { 
       ?> 
        <div id="bbqc_contentEN"> 
         <h2><?php echo $titleEN; ?></h2> 
         <?php echo $contentEN; ?> 
        </div> 
       <?php 
        } 
        else 
        { 
       ?> 
        <h2>Erreur, il n`y a aucun texte</h2> 
       <?php 
        } 
       } 
       ?> 
+0

爲什麼不把語言標識符放入URL中,例如在'/ en/...'的路徑中? – Gumbo 2011-03-29 18:01:22

+0

因爲這將涉及太多的變化,我需要硬編碼進入像超過100頁:( – 2011-03-29 18:11:21

回答

0

這裏有一個簡單的例子:

// assuming that databaseHas() queries available languages 
session_start(); 

$langs = array('ENG', 'FR'); 
$showlang = ''; 
if (databaseHas($_SESSION['lang'])) 
{ 
    $showlang = $_SESSION['lang']; 
} 
else 
{ 
    foreach ($langs as $l) 
    { 
     if (databaseHas($l)) 
     { 
      $showlang = $l; 
      break; 
     } 
    } 
} 

if ($showlang == '') 
{ 
    die('No languages found!'); 
} 

echo databaseContent($showlang); 

// print links to alternate languages 
foreach ($langs as $l) 
{ 
    if (databaseHas($l) && $l != $showlang) 
    { 
     // print link to this language 
    } 
} 
+0

這正是我需要開始的,這個簡單的例子現在已經清楚了,謝謝 – 2011-03-29 18:14:39

+0

在將鏈接打印到備用語言,您還應該檢查以確保您確實擁有其他語言(如果您只有英語,則無論用戶偏好,都不應該有法語鏈接)。我只是更新了代碼來證明這一點。 – Unsigned 2011-03-29 18:18:37

+0

酷,同樣的想法 – 2011-03-29 18:58:03

0

session_start()你的文件的頂部則:

if($versionFR == true) $_SESSION['lang'] = 'FR'; 
else $_SESSION['lang'] = 'ENG'; 

//later on (could be in a whole other page with session_start() on top) 
if($_SESSION['lang'] == 'FR'){/*display FR stuff*/} 
elseif($_SESSION['lang'] == 'ENG'){/*display ENG stuff*/} 

類似的東西應該爲亞運作良好^ _^

+0

我怎麼去添加,如果1)兩個版本都存在2)郎是ENG 3)英文部分是顯示:無默認 – 2011-03-29 17:53:28

+0

兩個版本都存在什麼? – Neal 2011-03-29 17:55:14

+0

如果英文和法文都存在於數據庫中,它會使$ versionFR和$ versionEN = true,因此進入第一個和第二個if語句首先顯示FR和鏈接到EN – 2011-03-29 17:58:46

0

我將如何去添加,如果1) 兩個版本存在2)lang是ENG 3) 英語部分顯示:無由 默認

1)你只加上一句:if($_SESSION['lang'] == 'FR' && $_SESSION['lang'] == 'ENG') 2)不知道你的意思在這裏,尼爾解釋3)如果ENG是顯示:默認情況下沒有,你會想要關閉一個javascript函數來重新打開它。

但讓我們回到這裏,考慮一下:製作兩個語言文件來定義每一段內容。因此,對於你的english.php,你可能有一些變量,例如$ GREETING ='Hello'; $ YES ='YES';然後在你的french.php中,你可以將這些變量定義爲$ GREETING ='Bonjour'; $ YES ='WEE'; (我甚至不確定是否意味着是,但你明白了!)。因此,現在您可以選擇根據用戶的語言來包含適當的語言文件,並且您可以輕鬆地添加其他語言。變通!