2011-10-31 114 views
1

我正在製作一個用來構建多種語言的中小型站點的框架。我使用的方法從本教程:基於PHP中的語言動態更改圖像目錄?

http://www.bitrepository.com/php-how-to-add-multi-language-support-to-a-website.html

我知道它從2009年的,但我想他們是如何做到的,這將是最容易理解了我的同事,尤其是因爲我曾經評論bejeezus自己出來的文件。

這是替換網站中相關文本的好方法。我現在面臨的問題源於以下事實:並非所有站點上的所有單詞都是文本。有很多圖像,導航按鈕等等,這些都需要替換。

我的想法是進入common.php(如教程中所述),並添加一個條件來改變圖像目錄(img /或image /)。例如,如果我的文件結構是這樣的:

WWW

的index.php
的common.php
/IMG
/JP

lang.jp .php
/img

如果用戶選擇日語作爲其語言和腳本運行,以獲得所有從lang.jp.php文字,我想在/ JP內/ IMG目錄中使用的圖像,以及。

所以我的問題是,如何將src更改爲html中每個圖像標記的正確/ img目錄?是否可以使用php開關並將src設置爲變量,並在聲明圖像名稱之前調用該變量,如<img src="<?php echo($imgsrc);?>/image.jpg" />,然後將路徑動態分配給$ imgsrc?如果是這樣,那麼設置該變量的最佳方法是什麼?

回答

1

@OpenCode有正確的想法,但它可能是更容易,而是繼續使用你有IMG文件夾,並在其中一個新的文件夾的每個語言。

/img 
    /jp 
    /en 
    /es 
     /image.jpg 

然後使用:

<img src="/img/<?php echo $lang; ?>/image.jpg" /> 

這樣,你的根目錄不會成爲太亂,你應該決定增加更多的語言以後。

+0

這也是一個好主意,但問題在於lang.en/jp.php,它將$ lang設置爲一個數組。所以腳本運行和頁面加載後,我失去了變量。我試圖找出一種方法來創建一個獨立的原始$ lang值之前,它被傳遞到語言文件,並轉換成一個數組...不太確定。 – DesignUtensil

+0

該語言被設置爲cookie,因此在您將標記添加到頁面的文件中,您可以檢查$ _COOKIE ['lang']或$ _SESSION ['lang'],並且應該可以從那裏。例如:$ lang =(isset($ _ COOKIE ['lang']))? $ _COOKIE ['lang'] :((isset($ _ SESSION ['lang']))?$ _SESSION ['lang']:'en'); –

+0

等一下,我看到那個_is_是你需要$ lang來獲取圖像的文件。因此,只需爲圖像使用不同的變量,或者向$ lang數組添加另一個索引,如$ lang ['LANGUAGE'] =(isset($ _ COOKIE ['lang']))? $ _COOKIE ['lang'] :((isset($ _ SESSION ['lang']))?$ _SESSION ['lang']:'en');然後爲你的圖像做到這一點:

1

的$ LANG變量保存短期語言代碼(語言名稱)

如果你有內部「JP」目錄「JP」目錄和「IMG」的目錄,那麼你也能做到以下。

<img src="<?php echo $lang; ?>/img/image.jpg" /> 

,使之成爲

<img src="jp/img/image.jpg" /> 
+0

太棒了,謝謝!然而,當我在對mmmshuddup評論的迴應中描述時,我遇到了一個問題。 $ lang被傳遞給語言文件後,該值被重置爲一個數組,所以我失去了「en」或「jp」。答案非常接近,我可以品嚐它! – DesignUtensil

+0

閱讀關於PHP會話並開始品嚐你的美味答案;) – Sejanus

1

很抱歉,您所依賴的教程僅僅是冰山的頂峯。

如果你想的東西,是100%開放,方便,快捷,不喜歡我(拍攝cheekyness分開):

1 - 讓非常簡單的語言文件,比如只包含「INI」文件協會,如:

text1 = my text 
text2 = my text2 
text3 = my text3 
email_customer = Dear customer 
... 

這樣你就可以很容易地翻譯它。

2 - 然後創建一個「php」緩存文件,創建一個您將包含的「class」文件。 3 - 製作一個包含翻譯內容的翻譯器「php」類文件。在這裏面,你可以編寫代碼那樣:

if language file more recent than cache file 
    => create cache file 
... 
code to generate "language cache file" 
... 
include "language cache file" 
... 

3 - 基本的語言文件在主機上:使用$_SERVER['HTTP_HOST']。以下是我該怎麼辦:

- if it's "fr.mysite.com" => it's french language 
- if it's "es.mysite.com" => it's spanish language 
- ... and so on ... 
- if it's "www.mysite.com" => it's default language (your choice) 

#1步是非常重要的,因爲你只要通知相應的文件到翻譯獲得了很多的時間。不再有頭痛。你會花2-3天時間寫出來,每種新語言你都會獲得4-5天的時間。對於最後(也是最難)的問題:(僅供參考,這是我第四次重寫我的整個框架以包含這些內容,而我在這裏解釋的內容代表了許多個月的開發,儘管看起來很簡單):multilangage文件。 下面是我的目錄:

templates/ 
|-- common 
| |-- css 
| |-- htm 
| | `-- intranet 
| |-- img 
| |-- js 
| | `-- openid 
| |-- pdf 
| `-- txt 
|-- fr 
| |-- css 
| |-- htm 
| |-- img 
| |-- js 
| |-- pdf 
| `-- txt 
`-- us 
    |-- css 
    |-- htm 
    |-- img 
    |-- js 
    |-- pdf 
    `-- txt 

而在你的「翻譯類文件」的代碼做這樣的事情:

... 
include "language cache file" 
... 
**after the include** 
... 
function get_expanded_path_file() { 
    if file exists in language template directory 
    return full "language" path + filename 
    if file exists in "common" template directory 
    return full "common" path + filename 

    return "/" filename 
} 
... 

現在,我希望你的整體思路。如果你想看看這樣一個框架的實際行動,看看我的最新網站(刪除我的鏈接,如果你認爲它是垃圾郵件或任何其他):mysite 如果你明智地使用我的建議像Smarty的東西,你可能會像我一樣:只是做Php的基本文件,讓所有的翻譯人員和webdesigner。僅供參考這個網站花了我兩週的時間來開發,1天翻譯法語和西班牙語,並... ... 3周贊同網頁設計(大聲笑(或諷刺誰知道))!

希望這會有所幫助

+0

Olivier,這看起來非常有前途,我很滿意現在的方式,但我想知道是否有辦法清理標籤對於翻譯的每一部分來說更是如此我擔心,我仍然處於PHP教育的開始階段,所以我不太確定如何去執行你的方法。不過很高興在PHP手冊上學習,但是你能否告訴我我應該知道什麼功能來完成這個功能? – DesignUtensil

+0

將你的語言文件建立在主機上:使用'_ _ SERVER ['HTTP_HOST']',當然,字符串解析功能ns:'mb_strpos()'和所有那個「東西」。我很抱歉,但如果你剛開始使用PHP,試着開發非常簡單的類(http://php.net/class),然後嘗試看看如何讀取文件/字符串(http://php.net/fopen ),然後在3或4周內回到我的答案,我很肯定你會理解我的意思。希望這有助於和祝你好運與Php! –

+0

好的,我會學習更多,並嘗試一下。非常感謝您的幫助! – DesignUtensil