2013-03-10 45 views
0

我想使用PHP的數組函數來翻譯網站。我已經創建了PHP文件,其中包含所有要翻譯的文本。使用數組函數翻譯網頁

<?php 
//ESPANOL 
$lang = array(
       'work' => 'Trabajo' 
       'packaging' => 'Empaque' 
      ); 

然後我打電話給他們我的nav.php文件中,並會在內容部分了。

<?php include('includes/languages/es.php'); ?> 
<a href="#"><?php echo $lang['work']; ?></a> 

所有非常直截了當。

我想知道的是如何在不編輯HTML的情況下在這些數組文件之間切換,以便我不必鏈接到另一個'index_es.php'等等。我知道鏈接將是這樣的,但我不知道這是如何工作的。

<a href="index.php?es.php>Español</a>|<a href="index.php/?en.php">English</a> 

我猜我需要包括其他文件,其中包括語言文件,然後鏈接可以從中選擇,但我不知道該代碼會是什麼這一點。 它會涉及包括一個'lang_directory'的鏈接上,然後以某種方式包括從那裏?

**另外我想避免使用Zend/Gettext的翻譯,因爲我想從裏面學習。

回答

1

我會保持你的陣列系統,改正這些鏈接成類似index.php?lang=en,然後包括你的文件取決於郎參數:

if (isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php')){ 
    include_once('includes/languages/'.$_GET['lang'].'.php'); 
} 

如果你想保持語言參數你的會議,做這樣的事情:

if (isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php')){ 
    $_SESSION['lang'] = $_GET['lang']; 
} 
if (!isset($_SESSION['lang'])){ 
    // Default language 
    $_SESSION['lang'] = 'en'; 
} 
include_once('includes/languages/'.$_SESSION['lang'].'.php'); 
+0

所以這就像使用** <?php _the code你放置_?> **之前的一切,然後改變鏈接? – 2013-03-10 11:55:33

+0

是的(抱歉,延遲!) – Nabab 2013-03-10 12:14:17

+0

不要忘記session_start()! – Nabab 2013-03-10 12:15:16

2

您可以製作另一個包含目標語言的維度。然後傳遞一個GET參數來選擇該語言。如果語言無法識別,您可以回退到英語。這是一個示例。

$languages = array(
    'en' => array(
     'work' => 'work', 
     'packaging' => 'packaging' 
    ), 
    'es' => array(
     'work' => 'Trabajo', 
     'packaging' => 'Empaque' 
    ), 
); 

// default language to use when the requested isn't found 
$defaultLanguage = 'en'; 

// language requested via GET 
$requested = $_GET['locale']; 

// use the requested language if it exists, otherwise the default language 
$language = isset($languages[$requested]) ? $requested : $defaultLanguage; 

// our translations 
$translation = $languages[$language]; 

// "work" translated based on the language 
echo $translation['work']; 

而且鏈接爲Español將如下所示。

index.php?locale=es 
+0

所以這是一個多維數組?我將所有的語言放在一個文件中,然後在標籤的開頭將它包含爲locale.php,鏈接將通過數組運行,並使用它所需的語言? – 2013-03-10 11:45:20

+0

是的,這是一個多維數組,是的,這聽起來是正確的。 – 2013-03-10 11:47:20

+0

locale.php會在index.php的父目錄中嗎?鏈接如何工作?我的意思是如果我已經包含locale.php **?locale = es **如何改變它? – 2013-03-10 11:52:41

1

這樣做的一種方法是使用會話。

  1. 製作一個lang.php文件,用於在語言之間切換。

    <?php 
         //Start session 
         session_start(); 
         //Do we get a lang variable 
         if (isset($_GET['lang'])) { 
           //Make sure we only get the lang filename 
           $lang = basename($_GET['lang']); 
           //If the file exists, then save it to session 
           if (file_exists('includes/languages/' . $lang . '.php')) 
             $_SESSION['lang'] = $lang; 
         } 
         //If the client were refered here (via hyperlink) send them back 
         if (isset($_SERVER['HTTP_REFERER'])) 
           header('location: ' + $_SERVER['HTTP_REFERER']); 
    ?> 
    
  2. 在希望多種語言的文件的標頭中插入。然後

    <?php 
         //Start session 
         session_start(); 
         //Default language 
         $lang = 'english'; 
         //If the client have set a language, use that instead 
         if (isset($_SESSION['lang'])) 
           $lang = $_SESSION['lang']; 
         //Load language file 
         include('includes/languages/' . $lang . '.php'); 
    ?> 
    

改變語言的鏈接將是這樣的:

<a href="lang.php?lang=espanol">Español</a>|<a href="lang.php?lang=english">English</a> 

輸出還可以從lang.php文件中的代碼,並把在將加載一個包含文件在包含語言文件之前刪除HTTP_REFERER重定向。然後

改變語言的鏈接將是這樣的:

<a href="?lang=espanol">Español</a>|<a href="?lang=english">English</a>