[分享][請教] cakePHP中文化與poEdit的翻譯庫

edited 十月 2013 in CakePHP
poEdit有個translation memory(中文翻成翻譯庫)的功能, 可在preferences(偏好)裏設定. 其作用就是協助user把以往翻譯過的.mo, .po, .pot等檔案匯成一個資料庫, 在以後進行新的翻譯專案時能夠將以往已經翻譯過的語句直接自動翻譯, 大幅減低翻譯工作的重複性. 算是很便利的功能.

我今天試了一下, 希望對於cakePHP程式的中文化作業有幫助. 其間發生一些問題, 想提出來請教. 我的作業流程簡單描述如下:

1. 採用poEdit的translation memory(翻譯庫)功能. (使用這個功能必須先設定, 設定過程是遵照poEdit的help說明指示完成, 在此從略)

2. 翻出來的部份存成app/locale/zh_tw/LC_MESSAGES/default.po檔(同時poEdit會自動產生default.mo檔)

3. 開啟網頁. 發現cakePHP的L10n class並沒有將程式中的__('...')所對應到default.po檔中的msgId順利轉譯成中文.

4. 幾經試誤, 最後發現一個現象: 當default.mo跟default.po兩者並存時, cakePHP的L10n只會讀default.mo, 不會讀default.po

5. 但default.mo是二元檔, 其內容是否符合我們期望不得而知; 反而default.po是文字檔, 用一般的文字編輯器開啟就可檢視其內容是否符合我們期望.

6. 在這裏我想應該是cakePHP的L10n在讀取default.mo檔的過程中不知出了什麼問題了, 所以無法順利轉譯.

7. 我最後採用的解決方式: 幹掉default.mo檔, 留下default.po檔. cakePHP的L10n就能夠將網頁的輸出順利地轉譯成中文了.

心得:

當我完全用手動翻譯時, 所產生的default.mo及default.po檔都能夠讓cakePHP的L10n正常運作, 一切過程都很ok.

我不太確定問題究竟發生在哪個環節, 是:

1. 我在translation memory(資料庫自動翻譯)的設定上有問題? 或是

2. poEdit在這部份的處理上所產生的default.mo檔格式與cakePHP的L10n的處理格式不合?

BTW, 目前暫且能夠透過資料庫自動翻譯的便利簡化重複性的翻譯工作. 雖然仍有些環節沒有搞懂, 但希望能夠對大家有點幫助.

也希望若正好有對poEdit比較熟的高手看到這篇文章, 指點一下, 看看我的處理是否有問題?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3755

評論

  • edited 十二月 2008
    原始的 default.po 是否透過 CakePHP 的 i18n 指令產生?目前我的測試,透過 i18n 產生的翻譯檔案,即使經過 poedit 編輯也不會出現問題,不過我是在 Linux 環境下。方便提供有問題的檔案嗎?

    po/mo 同時存在時,讀取 mo 是正常的,這是 gettext 形式的慣例,有些程式甚至只接受 mo 。

    CakePHP 取得翻譯檔案後會將它快取在 app/tmp/cache/persistent/cake_core_default_zh_tw 中,可以看看這個檔案的內容。
  • edited 十二月 2008
    是的, 原始的.pot是用cake i18n產生的。由cake i18n產生.pot, 然後再以poEdit開啟並做些專案設定(例如專案名稱, 團隊名稱, Email, 語言, 國家, 編碼, 複數型數量&複數型選用條件etc), 使用翻譯庫自動翻譯功能將部份的語句翻譯後, 再存成default.po檔(poEdit會同時自動產生default.mo檔)

    想要順帶一提的是: 一般cake的應用專案會用到cake lib, 所以在執行過程中若有些源自於cake lib的輸出或是錯誤訊息, 這些輸出或是錯誤訊息該如何進行localization? 實務上是先另建一個獨立專案把cake lib的所有訊息翻出成為一個獨立的.po檔後(例如cakelib.po), 然後再由應用專案的po檔將其匯進來整合?

    如果是這樣的話, 那麼目前不知可有cake lib的中文翻譯庫?

    謝謝. ^_^
  • edited 十二月 2008
    附加檔案是還沒完成的翻譯,比較早期的版本 :)
  • edited 十二月 2008
    kiang大, 感謝您無私的奉獻先. :)

    我再研究看看..
Sign In or Register to comment.