我正在嘗試使網站多語言。通過建立語言詞典陣列(如果它是不是最好的辦法,請不要猶豫,讓我知道)php顯示變量鍵的數組值
$fr=array();
$fr['hello']="Bonjour";
我想提出的是執行以下功能:
的每一個字和語言function ($word ="hello",$language="fr")
它會返回正確的值。到目前爲止我的做法是行不通的
echo $$language[$word];
有什麼想法嗎? 謝謝
我正在嘗試使網站多語言。通過建立語言詞典陣列(如果它是不是最好的辦法,請不要猶豫,讓我知道)php顯示變量鍵的數組值
$fr=array();
$fr['hello']="Bonjour";
我想提出的是執行以下功能:
的每一個字和語言function ($word ="hello",$language="fr")
它會返回正確的值。到目前爲止我的做法是行不通的
echo $$language[$word];
有什麼想法嗎? 謝謝
默認情況下,變量是本地函數。如果你的字典數組是全球性的,你需要將它們申報爲全球性的,但由於名字是可變的,你必須通過$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];
}
+1第二樣品 – rahmanisback 2011-01-22 22:07:18
我在想避免多維數組查詢由於負載...或者是不是在這種情況下什麼大不了的?我的函數看起來像這樣: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
$$語言[$單詞]沒有工作
工作都是圍繞爲
$ arr = $$語言;
$ arr [$ word];
你可能要考慮使用一個單一的(嵌套)陣列
$strings = array(
"french" => array(
"stringID" => "foobar"
)
);
echo($strings["french"]["stringID"]);
如果不利用數據庫我會強烈建議考慮這一點。 MySQL和PostgreSQL往往是獨立和小型開發商店的流行選擇。
有幾件事情在這裏提...
我會建議使用實際的「語言環境」(一個language code加country code)來引用您的語言,而不是兩個字母的國家代碼。你的例子包括法語「fr」。典型的約定是使用區域設置名稱。例如法語(法國)的fr_FR和法語(加拿大)的fr_CA。語言可以很大程度上基於國家(如果你是美國本土的英語母語人士,並前往澳大利亞,你會明白我在說什麼)。
根據您網站的大小,您可能不希望將其保存爲PHP字典/關聯數組。這裏有很多選擇(把翻譯放在數據庫中,共享內存等)。如果你確實保存在PHP內存中,opcode caching將是一個好主意,並且相對容易設置。我鼓勵你看看其他框架如何實現這個目標(理想情況下可以使用現有的框架來實現這一目標)。
您提到翻譯的詞語。通常,在網站國際化時,您需要翻譯短語。翻譯單詞然後將它們粘合在一起通常會導致翻譯不佳。
如果你堅持使用字典路由,我會強烈建議你放棄對變量名稱/語言名稱的動態解釋以支持嵌套關聯數組。例如$dict['fr_FR']['hello'] = 'bonjour';
後的功能代碼 – Christophe 2011-01-22 22:00:20