2011-01-22 80 views
1

我正在嘗試使網站多語言。通過建立語言詞典陣列(如果它是不是最好的辦法,請不要猶豫,讓我知道)php顯示變量鍵的數組值

$fr=array(); 

$fr['hello']="Bonjour"; 

我想提出的是執行以下功能:

的每一個字和語言function ($word ="hello",$language="fr")

它會返回正確的值。到目前爲止我的做法是行不通的

echo $$language[$word]; 

有什麼想法嗎? 謝謝

+1

後的功能代碼 – Christophe 2011-01-22 22:00:20

回答

4

默認情況下,變量是本地函數。如果你的字典數組是全球性的,你需要將它們申報爲全球性的,但由於名字是可變的,你必須通過$GLOBALS訪問它們:

function foo($word, $language) { 
    echo $GLOBALS[$language][$word]; 
} 

作爲一種更好的方式,您可能希望只使用一個多維數組,而不是爲每種語言創建一個變量:

$dict = array(); 
$dict['fr']['hello'] = 'Bonjour'; 

function foo($word, $language) { 
    global $dict; 
    echo $dict[$language][$word]; 
} 
+0

+1第二樣品 – rahmanisback 2011-01-22 22:07:18

+0

我在想避免多維數組查詢由於負載...或者是不是在這種情況下什麼大不了的?我的函數看起來像這樣:function translator_fw($ word,$ language =「en」){ \t \t require_once('lib/languages /'。language。'。php'); \t $ arr = $$ language; \t return $ arr [$ word]; }希望得到您的反饋。謝謝 – salmane 2011-01-22 22:09:25

0

$$語言[$單詞]沒有工作

工作都是圍繞爲

$ arr = $$語言;

$ arr [$ word];

1

你可能要考慮使用一個單一的(嵌套)陣列

$strings = array(
    "french" => array(
     "stringID" => "foobar" 
    ) 
); 

echo($strings["french"]["stringID"]); 

如果不利用數據庫我會強烈建議考慮這一點。 MySQL和PostgreSQL往往是獨立和小型開發商店的流行選擇。

3

有幾件事情在這裏提...

  1. 我會建議使用實際的「語言環境」(一個language codecountry code)來引用您的語言,而不是兩個字母的國家代碼。你的例子包括法語「fr」。典型的約定是使用區域設置名稱。例如法語(法國)的fr_FR和法語(加拿大)的fr_CA。語言可以很大程度上基於國家(如果你是美國本土的英語母語人士,並前往澳大利亞,你會明白我在說什麼)。

  2. 根據您網站的大小,您可能不希望將其保存爲PHP字典/關聯數組。這裏有很多選擇(把翻譯放在數據庫中,共享內存等)。如果你確實保存在PHP內存中,opcode caching將是一個好主意,並且相對容易設置。我鼓勵你看看其他框架如何實現這個目標(理想情況下可以使用現有的框架來實現這一目標)。

  3. 您提到翻譯的詞語。通常,在網站國際化時,您需要翻譯短語。翻譯單詞然後將它們粘合在一起通常會導致翻譯不佳。

  4. 如果你堅持使用字典路由,我會強烈建議你放棄對變量名稱/語言名稱的動態解釋以支持嵌套關聯數組。例如$dict['fr_FR']['hello'] = 'bonjour';