2014-01-23 77 views
1

我有一個網站,有下列語言切換算法:PHP:一種手動切換語言的方法?

  • 首先,它檢測到的默認瀏覽器語言(我不知道爲什麼,但Chrome瀏覽器總是給人有點像en-EN,ru,lv,所以Chrome的默認語言一直是英語嗎? , 它似乎)。
  • 然後它將語言值寫入會話變量lang並請求所需的字符串文件(即/assets/includes/en-US/strings.php); 。
  • 而從這個文件中的每個字符串被包含在HTML代碼,所以純HTML還沒有任何明文

當然,默認語言檢測不停止的原因 - 我需要像鏈接(LV | EN | RU)的手動語言切換器。那麼,在用戶點擊所需語言後切換語言並覆蓋會話變量的可能(也許是最好的)方法是什麼?

+0

難道你們就不能使用,如果檢查語句是否有新的會話即chosen_session設置,如果不使用default_session –

+0

不能修改開關算法?當用戶手動選擇一種語言時,該值被保存在會話中;語言算法會檢查此變量:如果存在,則加載所選語言,如果不存在則繼續實際行爲 –

+0

我不確定您的問題是什麼。你在問最好的圖形用戶界面嗎? (我的Chrome發送'es-ES,es; q = 0.8,en; q = 0.6',雖然它幾乎不能被隱藏,但它是可配置的。) –

回答

2

最好的辦法是simpliest方式:)

$langs = array('LV', 'EN', 'RU'); 

<?php foreach ($langs as $lang): ?> 
    <a href="index.php?lang=<?=$lang;?>"> <?=$lang;?> </a> 
<?php endforeach; ?> 

所以你給用戶有機會通過GET在這個例子中改變郎。

覆蓋該會話所發送的請求:

<?php 
if(in_array($_GET['lang'], $langs) { 
    $_SESSION['lang'] = $_GET['lang']; // to prevent user to change its session to something you don't want to 
} 
?> 

之後,您只與此會話交互顯示內容。

你可以使用重定向,如果你有不同的語言編寫的每一頁: (但我猜邏輯如何與自動語言檢測已經實現的語言交互,但仍然...讓我建議一些方法在快?)

<?php 
if (isset($_SESSION['lang']) && $_SESSION['lang'] !== 'EN') { 
    header("Location: mysite.com/".$_SESSION['lang']."/index.php"); 
    exit; 
} 
?> 

或者,您可以使用翻譯方法。

所有的翻譯都在數據庫下,與$ langs數組名稱相同。

所以你輸出從該特定的列中的內容:

SELECT lang_{$_SESSION['lang']} FROM translations WHERE string = '$string'; 
+1

使用GET + POST會更好。 –

+0

感謝您的回答! 我有完全相同的HTML頁面。唯一的區別是他們請求不同的strings.php文件。僅僅因爲所有的純文本都被寫入這些文件中。 –

+0

所以你只是根據你的會話請求文件:)它看起來你的問題已經解決了 –