2011-09-26 119 views
12

首先,最好的辦法 - 我知道,有很多是關於多語言功能的答案,我並沒有發現什麼,我想實現多語言PHP

答案我想過3種方式我可以使用,我需要使用PHP創建語言文件,每當我向Web表單界面添加新值時

前兩種是類似的 - 使用數組或在特定語言文件中定義和在運行開始時加入它, 但是在這種情況下,我可能會加載數千個定義或數組,以便在每個頁面中使用少數幾個。

第三種方式是創建功能,可以根據關鍵字或滿語,每次使用IF -s或switch選擇合適的期限(或回叫鍵調如果沒有匹配

什麼最好的方式做到這一點


編輯:我決定做一些測試,我試過3種不同的方式和測量的時間和記憶了吧:

  1. 我定義以與陣列(22個值)和在它從1運行至1,000,000 - 檢查主叫值 - 通過使用%操作者選擇使用什麼三個1,只是把它放在一可變

    • 時間了:0.476591110229秒
    • 內存:6536個字節
  2. 我用同樣的陣列(22個值),並把它稱爲使用功能 - return $arr[$string];(只爲便捷的工作方法和變化的能力它不同租的方式,如果我需要)

    • 時間了:0.960635185242秒
    • 內存:6704個字節
  3. 我創建了一個函數的字符串列表,並使用switch - >case我選擇返回字符串

    • 花費時間:1。46953487396秒
    • 內存:848個字節

那麼,現在的問題是,什麼是正確的選擇 - 寧願時間或願意內存, 而如果該網站是大,它會花了很多記憶 - 我無法改變它,因爲它與陣列內建 - 如果它以函數的工作,我可以常換常

我會很感激你的幫助,

感謝

+2

可能的複製速度快:http://stackoverflow.com/問題/ 2790952/php-localization-best-practices-gettext –

+3

可能的重複[如何在php和Mysql中製作多語言網站](http://stackoverflow.com/questions/2487171/how-to-make-a-多語言網站在PHP和MySQL) – JJJ

+0

http://php.net/manual/en/function.gettext.php –

回答

1

將您的字符串分爲一類 - 一個全局和另一個 - 對應於您在網站中的視圖(例如lang_global,lang_profile,lang_something_else) 包含全局文件和與當前視圖對應的文件。通過這種方式,您不會加載整個翻譯,而只能加載其中的一部分。它更具管理性,您可以提供上下文,對同一個字符串進行不同的翻譯。

+0

我需要它用於CMS - 這是一種問題將其分爲多個部分 - 系統可以在每個站點上更改,並且可以從任何地方調用語言字符串..這太複雜了,無論我在何時調用函數/文件中的每個字符串的位置都很麻煩 –

+1

您CMS中仍有實體。實體可以有單獨的語言文件。而且每個模塊/插件也可以有一個語言文件。 –

+0

它仍然複雜的工作..系統只是基地,需要在每個網站上進行更改,試圖定義每次放置當前字符串的位置並不是那麼簡單的工作方式 –

5

就代碼而言,類似的東西對你來說很棒。它必須基於用戶的選擇(從按鈕或菜單中選擇一種語言)或基於瀏覽語言(這不是最好的選擇)。

的index.php

<?php 

// verify the user's choice 
if ($_POST[lang] == "en") 
{ 
    include_once("en_language.php"); 
} 

if ($_POST[lang] == "pt") 
{ 
    include_once("pt_language.php"); 
} 

// calling a lable in your page 
echo LABEL_MENU; 


// the rest of your file 
... 
?> 

en_language.php

<?php 
// ENGISH Language file 
define('LABEL_MENU','Main Menu'); 

// the whole file with the labels of your system 

?> 

pt_language.php

<?php 
// PORTUGUESE Language file 
define('LABEL_MENU','Menu Principal'); 

// the whole file with the labels of your system 

?> 

補充

如果你想比定義()常量值使用數組類型,但我不知道還有什麼比..

$arrays = array("MAIN_MENU" => "Main Menu", "LEFT_MENU" => "Left Menu"); 
echo $arrays["MAIN_MENU"]; 
+0

正如我所說 - 我想過(或使用數組),但仍然 - 我可以定義很多字符串,我根本不會使用,當一個網站獲得大量訪問時,它變得沉重(我認爲) –

+0

@Joe Polico - 太棒了,這是簡單的方法。 – B4NZ41

+0

但是我正在尋找這兩者 - 最簡單的方法和最快的方式(用於服務器)來使用。實際上,最簡單的方法是使用函數管理所有語言字符串 –