您在這裡

Drupal 6.1 試用報告: 多語化(2)i18n的設定問題

tky's 的頭像
tky 在 2008-04-16 (三) 16:42 發表

上次討論6.1版的一些經驗,這次先講一下6版i18n的一個主要問題。
之前的版本中,用i18n會有許多設定,在6版中,似乎因為Drupal本身就有簡單的translation模組,所以很多設定就被拿掉了。

不過雙語轉換的方式仍然沒變,同樣可以使用語系區塊來做切換。
同時可以在管理介面中設定是否啟用多語化、以什麼方式來啟用等等。
TKY是選擇了Path prefix with language fallback,也就是說切換語系時,會在主網址後面加上語系的前置詞。
比方說中文是HTTP://WWW.COM.TW/chinese
英文是HTTP://WWW.COM.TW/english

不過tky發現,在這種情況下,如果沒有加這些前置詞,點選主網址(HTTP://WWW.COM.TW/)預設會變成英文語系。即便說tky已經設定中文語系是預設語系了。
在之前的版本中會出現這個問題,主要是因為啟用了「自動偵測瀏覽器預設語言」的功能。不過在6.x的版本中,找不到相關設定。

這下子可有點麻煩,因為tky希望主網址能夠連結到中文語系去。

有試過說只設定英文語系的前置詞為english,而中文語系不設定前置詞。不過這似乎只對登入的使用者有效,對一般的訪客來說,預設的語系變成英文,同時反而無法切換語系了。

不曉得大家有沒有什麼建議或方法可以辦到這一點?

試出來了。
john_chungyi的提議tky有試過,但發現說如果中文語系沒有設定前置詞的話,語系轉換會不成功。
後來發現,一但你設定中文為預設語系,登出時就會回到這個語系。
而如果網址不加前置詞、只打主網址時,會依照你上一次來這個網站時所使用的語系而自動轉換到該語系,或者就是預設語系。

所以,i18n在語系轉換方面算是成功的。

tky

tky

使用i18n的過程中發現一個問題,當打開了某語言並非首頁的某篇文章時,選「語言轉換」中的其他語言不能正確轉換。如正在閱讀並非首頁的某篇英語文章,若點選「語言轉換」中的正體中文,這時看到的文章仍為原英語的文章,必須再點取「首頁」後才能轉到正體中文。

另外不知是不是i18n的問題,當某種語言有兩篇以上的文章時,該語言首頁上的同一篇文章就會重複出現。如總共有5篇不同內容的英語文章,首頁上的同一篇英語文章就會重複出現5次。

哪位能告知如何解決?

今天才看到AACC88寄來的問題,不過仍然不是很清楚問題在哪。

語言轉換不成功的問題,很可能是在「網站設定」》「語系」》「設定」的地方,沒有設定好。tky是選擇「僅使用路徑前導字元」這個選項,配何在每個語系中都設定網址前置詞,語系轉換沒有問題。而且預設語系不會出現前置詞。根據tky的經驗,如果AACC88選的是第三個「包含語系fallback的路徑前導字元」,就會出現不能使用語系區塊做轉換的問題。

第二個問題tky則不是很清楚。因為tky不太曉得AACC88所謂「語言首頁上的同一篇文章就會重複出現」是什麼意思。
AACC88可能要先說明一下,「各個語言首頁」是指什麼;tky不記得i18n 6.x有這個項目;5.x版的則不清楚。
如果AACC88是用views或者其他模組才得到這個「首頁」,那可能就是該模組的問題了。

tky

tky

已選擇「僅使用路徑前導字元」這個選項,不知道「配何在每個語系中都設定網址前置詞」是指哪個設定。比如有兩篇文章,中文是「關於」,node/33;英文是「about」,node/35。我在node/33/edit中把URL 路徑設定為node/about,在node/35/edit中把URL路徑也設定為node/about。當我閱讀英文「about」後轉換到中文,導航條會變成中文,上面的網址顯示http://localhost/drupal-6.4/zh-hant/node/35,介面上的文章仍為英文「about」。

第二個問題是如果總共發表了3篇不同內容的英文文章,7篇不同內容的中文文章,在英文的「Home」上,同一篇文章會出現3次;在中文的「首頁」上,同一篇文章會出現7次。比如「首頁」上的文章是「公司介紹」,如果全文顯示,文章的下面出現1 2 3 4 5 6 7,每個數字點進後都是內容完全相同的「公司介紹」。

有好幾個問題必須先釐清。
1.配何在每個語系中都設定網址前置詞,要去「語系」的主頁面裡頭的語系表格,在每個語系的「編輯」畫面中,替每個語系加上你想要的前置詞。TKY不確定是否預設就會有,太久沒動這個設定了。

2.確定有前置詞並且有設定「僅使用路徑前導字元」後,有翻譯的node會以路徑來做顯示的切換。比方說預設是中文語系的「關於」,預設路徑是node/33,改成/about,那麼在http://主網域/about底下就會顯示「關於」頁面(預設語系不會顯示前置詞)。

但如果是英文語系的「About」,不管路徑為何,i18n都會在路徑的前面加上前置詞來切換英文頁面。如果你讓兩個路徑都一樣是/about,那麼英文版要到http://主網域/english/about底下才會出現。直接打http://主網域/about是只會看到中文版的。(不同的node最好有獨特的路徑,不然很容易混淆會顯示哪一種內容)

3.TKY仍然不懂 AACC88的Home頁面是怎麼生出來的,所以沒有辦法回答問題。
是用views生出來的,還是Drupal預設的/node推薦文章摘要首頁?如果是前者,你的views設定一定有問題;如果是後者,你安裝的Drupal或i18n一定有問題。
如果是其他的……就實在不曉得是什麼問題。總之,你得把問題先講清楚才有可能解決問題。

tky

tky

每個語系都加有想要的前置詞。比如
語系代碼:
zh-hant
該語系的英文名稱: *
Chinese, Traditional
原始的語系名稱: *
正體中文
語系的路徑前導字元:
zh-hant

是不是我們說的不是一個問題。當每篇文章有翻譯時,文章下方會出現所翻譯語言的名稱。這時候轉換沒有問題。
我說的是語系切換(选取多语言选单)時出現的問題。
語系 正體中文 English Français
我把語系切換放在上方,當每篇文章沒有翻譯,但都有所屬的語言。這時在英文的Home轉正體的首頁沒問題,但不是Home轉首頁就會出問題。

http://www.masteringdrupal.com/screencast/new-i18n-l10n-features-drupal-6中,介紹了一種翻譯的方式,是針對單篇文章的翻譯,整個介面並沒改變。也可參看附圖。

我現在希望的是同http://www.lcsi.com.tw一樣,語言介面上的所有內容全部改變。比如現在頁面在http://www.lcsi.com.tw/index.php?option=com_content&task=view&id=90&Item...
的正體字「技術支援」,點取右上角的語系選單換一種語言,介面上的內容能全部改變成另一種語言。

不好意思,tky本來不懂的地方只是「首頁文章重複出現」的現象。不曉得那是怎麼一回事。

AACC88現在又說「在英文的Home轉正體的首頁沒問題,但不是Home轉首頁就會出問題。」tky就更不懂了:問題是什麼?是指不是在首頁的話,用語言轉換區塊就不會自動轉換node的內容嗎?還是說按下語系連結不會轉到該種語言的首頁去?是哪一種?

tky

tky

我是說當網頁處於某一語言的Home Page時,點「語系」轉換到另一種語言,全部介面都會正確改變。如http://localhost/drupal-6.4/en/node的頁面,在「語系」中選「正體中文」,能轉到http://localhost/drupal-6.4/zh-hant/node,所有菜單、導航條及文章內容都能轉成正體中文。

但如果是網頁處於某一語言的並非Home Page時,點「語系」轉換到另一種語言,菜單、導航條等po文檔中有對應的內建文字能正確轉換,po文檔中沒有對應的菜單及文章內容等都都還是原來的語言。如http://localhost/drupal-6.4/en/node的頁面。在轉換時,網址路徑設定的node並沒生效。如我把http://localhost/drupal-6.4/en/node/30設為node/about,當時路徑顯示http://localhost/drupal-6.4/en/node/about,但我在「語系」中選「正體中文」後,並不是轉到http://localhost/drupal-6.4/zh-hant/node/about,而是轉到http://localhost/drupal-6.4/zh-hant/node/30,因而文章內容仍然是英文的。

現在菜單、區塊沒有問題,文章所屬語系也沒問題,關鍵是不知道怎樣把文章使用翻譯關係對應起來。一篇英文node/30的文章和一篇中文node/45的文章使用什麼方式把node對應起來。如果點取翻譯,結果就是在http://www.masteringdrupal.com/screencast/new-i18n-l10n-features-drupal-6中介紹的翻譯方式,是針對單篇文章的翻譯,整個介面並沒改變。
在文章編輯裡另外設定URL路徑也沒起作用。
哪位能不能舉一個簡單的例子說明具體步驟,怎樣把一篇英文node/30的文章和一篇中文node/45的文章對應起來,localizer、i18n、drupal 5.x、drupal 6.x都可以。
沒有文章對應時,可能轉到另一語言的首頁比較合適。

但如果是網頁處於某一語言的並非Home Page時,點「語系」轉換到另一種語言,菜單、導航條等po文檔中有對應的內建文字能正確轉換,po文檔中沒有對應的菜單及文章內容等都都還是原來的語言。

這是很正常的狀況,建議可以用i10-client去做翻譯。

http://localhost/drupal-6.4/en/node的頁面。在轉換時,網址路徑設定的node並沒生效。如我把http: //localhost/drupal-6.4/en/node/30設為node/about,當時路徑顯示http://localhost /drupal-6.4/en/node/about,但我在「語系」中選「正體中文」後,並不是轉到http://localhost/drupal- 6.4/zh-hant/node/about,而是轉到http://localhost/drupal-6.4/zh-hant/node/30,因而文章內容仍然是英文的。

聽你的描述,似乎問題出在你一定要為兩個node設定同樣路徑名稱的堅持上。TKY親自試了一下,發覺為兩個node設定相同路徑是不可能的事情。似乎drupal 6.x或pathaout 6.x直接避免掉這個會造成衝突的問題:當你把相同的路徑,比方說node/about設定給第二個node時,第一個node就會失去這個路徑的所有權而變回原來的路徑,也就是node/30。這樣使得node/about總是只會屬於一個node。

另一個奇異的問題是:tky這邊雙語nodes沒有路徑方面的問題(兩個路徑絕對不同),是可以正常轉換語言的。AACC88那裡卻不行。tky猜想說,應該是AACC88那裡並沒有正常為node建立翻譯node,不然沒道理不能轉換。AACC88可能以為兩個node有一樣的路徑、發表時選定不同的語系,就可以建立語系轉換的關聯。其實並非如此。

一來兩個node不可能有同樣的路徑,二來建立語系轉換關聯一定要透過每個node的「翻譯」tab。

進入「翻譯」介面,只會一種方式建立雙語node:按下你想要第二種語系旁邊的「新增翻譯」新增一個node。新的node語系預設會是你選擇的那種語言,翻譯完、儲存之後,這才建立了雙語node之間的關聯。這是i18n 6.x目前的唯一作法。

tky記得Localizer 5.x除了這個方式之外,可以分別各自建立不同語系的node,然後在翻譯介面中透過查找node title的方式讓兩個node連繫起來變成雙語node。這或許就是AACC88想要的方法,不過目前Localizer沒有6.x版本的,而且就算可以關聯兩個node,它們仍然不可能擁有同樣的網址路徑。這是AACC88必須考慮清楚的。

tky

tky

謝謝TKY的回復。
我所說的在http://www.masteringdrupal.com/screencast/new-i18n-l10n-features-drupal-6中介紹的翻譯方式,正是你說的這種方式,我開始時就試過。
我設想的如果有幾十種語言需要一一翻譯對應,豈不是很麻煩?於是我希望能找到簡單的方法,先把文章指定所屬語種,這一點i18n能辦到;然後把相關文章的node關聯起來(不一定要node相同,我現在理解node不可能相同),看來第二步i18n做不到。Localizer有6.x版本,我測試的結果與i18n不能同時使用。如果Localizer可以分別各自建立不同語系的node,然後在翻譯介面中透過查找node title的方式讓兩個node連繫起來變成雙語node,我想試一下。
不知道TKY有沒有試過,i18n的這種翻譯方法,如果三種語言以上,比如中文與英文翻譯對應,中文與法文翻譯對應,那麼英文與法文能自動對應嗎?
另外,我設想如果各語言的篇數不同,並不完全對應,這時有沒有省事的方法直接到另一所選語言的首頁?

先回答AACC88的問題。
i18n的翻譯方式比起Localizer是少了一種「事後選擇node關聯」的方式,不過這不影響多語系的node做翻譯。因為翻譯其實就是新增一個node,然後在資料庫架構中以node id和語系類別加以關聯而已。Localizer似乎比較有彈性,不過因為tky自己很少用到這個選項,不曉得那好處在哪裡,反倒覺得可有可無。

AACC88說Localizer有6.x版本的,可是tky找了一下,沒有發現啊。還是說AACC88把Localizer和其他的模組搞混了?比方說Localizer-client?那可是完全不同的東西喔。

回答adrianmak的問題:i18n和Localizer的差別在哪裡?這個其實yelban和tky都有寫過一些文章討論過,建議可以搜尋看看。

簡單講,兩者都是用來坐多語化網站的模組,可以製作多語系的區塊、選單和內容節點等等。
在5.x的時代,Localizer在很多方面都比i18n來得好。除了選單多語化的方式比較簡單和經濟之外,內容節點的翻譯也比較彈性。而且還有提供多語化網站資訊的功能,可以擁有不同語系的首頁、網站名稱和頁尾資訊等等。

不過Localizer所付出的代價就是需要大量地hack核心模組。它有提供還算簡單的方法,在網站載入時讀取Localizer專用的Drupal核心模組,達到全多語化的效果。不過以tky的使用經驗來說,這日後都會影響到那些依賴核心模組(比方說taxonomy)的其他模組的運作。而且在網站或模組升級時得非常小心,要不然很容易看到「白屏」畫面或者讓其他模組在運作上缺手斷腳的。

這就是所謂有一好沒兩好吧。i18n雖然簡單了一點,但是可能因為對Drupal核心模組友善的關係,很快就能升到6.x版本了。而且6.x版本也做了不少改善的地方,算是相當好用的一個選擇(目前也是唯一的選擇)。

最後要提醒大家的是:建構多語化網站是一條不歸路,當你選擇了其中一個模組來做多語化工作的時候,就要一直用下去,不能換另一個來代替。要試用或替換模組得趁翻譯資料還很少的時候,不然資料都翻譯好了,一換模組,node關聯全跑掉,一切都得重來。

tky

tky

我的確把6x中的Localizer和Localizer-client搞混淆了。
在6x中有沒有比較省事的方法,不用去為語系選單中的每一種語言分別建立不同的首頁鏈接,而是更改某個文檔中的某幾行代碼,使語系選單中的每一種語言都只鏈接到該語言的首頁home page?比如不管我在閱讀哪一篇中文文章,這時從語系選單中選英語,全都進入英文的home page。

建立主導航鏈接時(admin/build/menu/item/edit),在路徑path中輸入什麼內容,才能使名稱隨語言變化?比如我為菜單鏈接名稱「首頁」輸入http://localhost/drupal-6.4/zh-hant,或為菜單鏈接名稱「Home」輸入http://localhost/drupal-6.4/en,或輸入 ,都不能使名稱隨語言變化。drupal本身內建的各種名稱、菜單等是可以隨語言變化的。

另外,討論區能設置不同語言的介面嗎?發給註冊用戶的確認函能根據用戶進入的語言介面而分別使用不同的語言嗎?

我有個問題是URL PATH alias 在多語言的網站
比如中英文的網站

node/10 -> English content, 相對的中文內容是 node/11

比如在node/10 加 url path alias 比如叫 about_us,
在相對中文內容是 node/11 的url path alias 加同樣的 about_us , drupal 說有重複path

請問應該怎樣加? 莫非一定要用文的prh alias 在中文內容 比如 "關於我們"

哎呀,這個老師在講, adrianmak有沒有在聽呀?
前面的討論已經很明確的講過了:Drupal之下不可能替兩個node建立一模一樣的path。管你用中文還是英文,都一樣。這是為了確保路徑與node的獨特性,才能正確指向目標。雖然i18n可以自動加上前置詞,但drupal核心可不管你這點。

請各位不要再嘗試了,沒有用滴。

tky建議大家,可以用about1、about2來建立翻譯網址的路徑;或者about、en_about也可以。總之path名稱一定要不一樣就對了。

tky

tky

不管是i18n還是Localizer,多語環境的切換要嘛是透過路徑前置詞(譬如說,my.domain.com/en),要嘛是透過網域(譬如說:my.domain.com.en/)。

除非你選擇的是以網域做切換的方式(應該要配合dns的設定),要不然不可能不在路徑上顯示前置詞。

tky

tky

最近用drupal 5.x建了個多語言的站,是中英文的,用i18n 模組的

預設是中文內容的,某些內容才會有英文版本的
問題就來,如果某個中文內容沒有create translation node, 當在設換到英文時,自然顯示中文啦 (這個沒有問題)
但當我按 language switcher 的中文 link 時 它不會顯示正確的中文內容而會顯示了另一個node的內容

不明白??? 看圖吧

中文內容,node/44

用language switcher 設換到英文, 因為沒有做翻譯所以仍然顯是中文內容的 node
但留心看mouse 指著的中文link 的language switcher, node 其實指到 node/29 ( 應該是zh/node/44 吧)

而node/29 的內容是

為什麼會這樣的??????

呃~~這依切都是個謎啊!

tky自己很久很久沒用過5.x版的i18n了。這個問題tky也不懂耶。
不過如果問題出在「在沒有英文翻譯的中文node頁面中,點選swich區塊中的中文轉換連結,會出現錯誤」這樣的話,那就去i18n的設定中,設定語言區塊不要顯示當前語言的轉換連結就好,不要讓兩種語言的連結同時出現,這樣問題就沒了。

tky

tky

啊,聽adrianmak一說,tky才想起這個設定是在Localizer裡頭看到的。tky不確定i18n 5.x有沒有得選。

剛看了一下i18n 6.x的設定,也沒找到類似的地方。看來這問題是難解決了。

tky的作法是限定只有管理者才能看到語言轉換區塊的,因為其實大多數的使用者會預期轉換語言是跳轉到另一種語言的首頁中,node by node的語言轉換區塊對他們反而是一種困擾。

tky目前習慣製作一個區塊,把兩種語系的首頁連結放上去讓使用者選,這樣省掉很多麻煩。如果要node by node的轉換,i18n會在有雙語內容的node的下方放上另一個語系的連結。如果不是完全雙語化的網站,這樣轉就比較不容易出錯。

tky

tky

想請教各位前輩 先進

小弟已安裝了 i18n , 網頁如右 http://nova.org.tw

在右方有一個 Languages 的 block ,是 i18n 的block。

該 block 裡面的 超連結 會隨著 當前的node 轉換不同的連結。

今天我想要在上方 English │ 繁體中文 │ 簡體中文 ← 這邊也想使用同樣的這種方式。

但目前不知如何撰寫,因此目前是固定的超連結,希望能做成像 i18n block裡面的動態超連結。

試著 想從 i18n模組 抓出 相關 php 程式來改換 page.tpl.php ,但卻不知該從何下手。

是否有大大 能提供小弟 些許想法,謝謝。