2013-08-30 108 views
1

我用2種語言製作我的網站。對於語言,我只是加載含有以下結構的陣列PHP文件:帶語言文件的PHP多語言網站

$translation = array(
    "username" => "Username", 
    "something_else" => "Something else" 
); 

然後我的主網站內,而不是附和Username我回聲出​​3210,它適用於所有的語言。現在我想知道,通常一個字符串分爲兩部分。目前我這樣做:

"amount_of_something" => array("You have logged in","times.") 

然後我使用echo $translation["amount_of_something"][0] . " 5 ". $translation["amount_of_something"][1];檢索它。

現在,對於實際的問題:有沒有更簡單的方法來做這最後一個?在一個jQuery插件中,我遇到以下語法:

maxlength: $.validator.format("Maximum {0} characters allowed.") 

我想這是在這個例子中用一個額外的函數完成的。有沒有一個內置的方法在PHP中(因爲PHP有​​一個bazillion數組函數),否則什麼是最有效的方法來做到這一點?我可以很容易地使用函數,但是由於可能的變量的數量(它可能具有多於1的值),我不太確定是否值得通過我使用的方法來完成現在。

我希望我的問題有點清楚,如果不是,請告訴我問題的哪一部分不是。

+1

[sprintf的](http://www.php.net/manual/en/function.sprintf.php) –

+1

「您已登錄在1次」 :)耶爲單數/複數名詞。這可能會超出你的範圍,但如果你認真對待翻譯,你可能想看看[GetText](http://php.net/manual/en/ref.gettext.php)。它支持幾種複數格式,即使對於超過2個的語言也是如此:) –

回答

3

我相信php sprintf是相關的功能在這裏提到

看看他們的榜樣。

<?php 
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 
?> 

你可以用類似的方法解決你的問題。很多PHP框架在使用情況下使用sprintf

+0

PHP具有這樣的整齊功能!沒有線索,這是可能的,謝謝! – jdepypere

1

您可能要查找的功能是sprintf。要使用ur示例,請將數組轉換爲字符串:「您已登錄%d次」。

2

有多個語言最簡單的方法是:

$lang = array(); 

$lang['Example'] = "Welcome $User"; 

然後嵌入到你的網站,如:

<p> echo $lang['Example']; </p> 

,您可以設置Cookie,並根據其中的cookie設置,包括包含數組的不同文件。

if(isset($_COOKIE['german'])) { 
    $lang = "languages/german.php"; 
} else { 
    $lang = "languages/english.php"; 
} 

include_once($lang); 
+0

我在想,'$ User'是指什麼? – jdepypere

+0

您可以將$ User設置爲當前登錄用戶的用戶名。這僅僅是一個隨機示例,其中包含變量 – Exwolf