2016-08-23 33 views
4

我以前使用一個下拉選擇框的選項使用post方法,以便更改保存在網頁上的語言單獨的文件。我現在試圖創建類似的東西,但需要幫助。現在我正在嘗試僅使用2種語言的網頁,並且在使用一種語言查看網頁時,會出現切換到另一種語言的選項。本質上是讓觀衆選擇將會話語言更改爲英語或西班牙語,只需在所有頁面上顯示相反的語言作爲超鏈接。我的語言文件是基本如下:需要幫助創建php和/或JavaScript使用超鏈接來更改網頁上的語言

<?php  
    $lang = array(
      'EN' => array(
         'ABOUT' => 'About', 
         'HOME' => 'Home' 
         ), 
      'SP' => array(
         'ABOUT' => 'Acerca', 
         'HOME' => 'Casa' 
         ) 
       ) 
?> 

,我已經在這裏顯示的是更廣泛的,但我這是怎麼設置的東西,在另一個文件寫的幾行代碼,以便能夠改變語言此PHP代碼。在我的主網頁我有簡短的代碼段聲明的HTML文檔之前,這是如下:

<?php 
     require("lang.php"); 
     session_start(); 
     $_SESSION['LANG'] = "EN"; 
     if(@$_POST['lang-chooser']){ 
     $_SESSION['LANG'] = $_POST['lang-chooser']; 
     } 
?> 

我試圖讓在那裏我有超鏈接位於該頁面的部分文件的標題或正文。我目前是選擇語言的選項的代碼如下:

<form method="post" action="" id="lang-form"> 
     <select id="lang-chooser" class="lang-chooser" name="lang-chooser" onchange="window.lang(this);"> 
     <option value="EN"<?php if($_SESSION['LANG'] == "EN") {?> selected="selected"<?php }?>>English</option> 
     <option value="SP"<?php if($_SESSION['LANG'] == "SP") {?> selected="selected"<?php }?>>Spanish</option> 
     </select> 
</form> 

底下我頁腳但仍處於主體部分我也有腳本的少量如下:

<script type="text/javascript"> 
    function lang(element){ 
     var lang_name = element.value; 
     var e_form = document.getElementById("lang-form"); 
     e_form.submit(); 
     console.log(element); 
     } 
    window.lang = lang; 
</script> 

通過所有這些代碼部分,我可以成功地使用下拉選擇框更改語言,同時保留在當前頁面上。我會用具有可變文本的代碼將如下所示:

<?php echo ($lang[$_SESSION['LANG']]['ABOUT']); ?> 

現在我希望有再次但是沒有下拉選擇框更改頁面上的會話語言的選項。我希望這樣,當頁面是英文的時候,它自動訪問該網站時會有一個名爲的超鏈接Espanol,它允許瀏覽者更改爲西班牙語,一旦頁面顯示爲西班牙語,超鏈接將改變說英文它允許觀衆改變爲英文。從網上查找我導致我相信我仍然需要介紹PHP代碼和JavaScript,但不再需要「表單」或「方法」部分來更改會話語言。我相信所有的,我現在需要更換的「形式」和「發帖法」的情況如下:

<a href="index.php?LANG=SP"> <?php echo($lang[$_SESSION['LANG']]['SPANISH']); ?> </a> 

我相信我的代碼仍然缺乏,這就是爲什麼我仍然無法得到它的工作。基本上,我將需要超鏈接來根據會話更改文本,還可以用來從西班牙文或英文更改會話語言。我有點難過,非常感謝任何幫助。感謝您花時間閱讀這個問題。

回答

2

你可以用php替換你的表單,if,else和get functions。

通過使用$ _GET頁面的頭,你可以檢查是否朗在URL中設置,並設置基於結果的會話:

編輯

後,本節將取代一切在session_start();在你放置在問題中的第二塊PHP代碼中。

<?php 

if(!isset($_SESSION['LANG'])){ 
    $_SESSION['LANG']='EN'; 
    header('location: '.$_SERVER["REQUEST_URI"]); 
} 

if(isset($_GET['lang'])){ 
    if($_GET['lang']=='sp'){ 
     $_SESSION['LANG']='SP'; 
    }else{ 
     $_SESSION['LANG']='EN'; 
    } 
} 

當您可以檢查會話是否已設置,然後調出一個href鏈接到您想要更改爲哪種語言。

本節將取代HTML表單

<?php 
if(isset($_SESSION['LANG'])){ 
    if($_SESSION['LANG']=='EN'){ 
     echo '<a href="?lang=sp">Espanol</a>'; 
    }else{ 
     echo '<a href="?lang=en">English</a>'; 
    } 
}else{ 
     echo '<a href="?lang=sp">Espanol</a>'; 
} 

你不需要Java來實現這一目標。

編輯

如果你想要的網址不顯示LANG =您可以再加上一個會話,並在首節,如標題:?

<?php 
if(isset($_GET['lang'])){ 
    if($_GET['lang']=='sp'){ 
     $_SESSION['LANG']='SP'; 
     header('location: '.$_SESSION['URI']); 
    }else{ 
     $_SESSION['LANG']='EN'; 
     header('location: '.$_SESSION['URI']); 
    } 
}else{ 
    $_SESSION['URI']=$_SERVER["REQUEST_URI"]; 
} 

這將立即重定向用戶回到他們所在的頁面,他們不應該注意到刷新。

+0

這確實有很大的幫助,但我仍然有點困惑,我仍然無法讓它正常運行。我基本上只有大約3段代碼需要到位,以便鏈接文件,設置語言和更改語言。有一部分位於聲明html文檔之前,這是超鏈接的一部分,該鏈接可以很好地與if語句配合使用,以允許查看者更改會話語言,同時更改超鏈接文本。 –

+0

我知道javascript可能不是必需的,我喜歡你提到的不包括?lang =的方式,但是你可以更具體地瞭解一下這個工作需要特別需要什麼,以及代碼片段需要的地方位於? –

+0

@CarlosRodriguez我已經編輯了上面的內容來顯示代碼片段的位置。第三個片段只是第一個片段的編輯,如果使用標題,確保它們放置在任何HTML呈現之前,否則它將無法工作。頁面頂部或模板之前包含的頁面是放置它們的最佳位置。 –

0
<?php 
    $allowed_langs = array('EN' => 'English', 'SP' => 'Espanol'); 
    $site_lang = isset($_SESSION['LANG'])?$_SESSION['LANG']:'EN'; 

    //Here you can set language according to link 

if(isset($_GET['lang'] && in_array($_GET['lang'], $allowed_langs)){ 
    $_SESSION['LANG'] = $_GET['lang']; 
    $site_lang = $_GET['lang']; 

//Then you can refresh the page if you want to load new file or start 
    // including your language file after this language set. 
} 

//include your lang file 
include_once('langs/' . $site_lang . '/text.php'); 
?> 
      <ul> 
<?php 
foreach($allowed_langs as $langshort => $langlong){ 
$new_query_string = build_query_string($param, 'lang', $langshort); 
$new_link = strtok($_SERVER["REQUEST_URI"],'?') . "?" . $new_query_string; 
$class = ($_SESSION['LANG']==$langshort)?'selected':''; 
?> 
<li class="<?= $class ?>"><a href="<?= $new_link ?>"><?= $langlong ?></a></li> 

<?php } ?> 
    </ul>