這套系統幾年前我提過一次..不過那時我在美商公司,都用英文,沒咋注意它的中文使用問題

最近有空幫公益單位導入了人事系統, 就又想起這套也許在很小的單位做電子簽核也挺好用的, 雖然一查它已經有12年至少,沒有維護了,網上的討論版也只停留在2011年左右.

真的最近又把它裝起來, 光是找到合適它用的舊系統平台也花了我不少時間, 一跟由WAMP3.0 往下測到2.0 為止, 中間有2.4,2.2都不合用, 原因出在PHP/MYSQL原作者寫的年代應是2007年開始.

果然老年人還是合適玩老東西…

我在安裝時已在思考它中文使用的問題,所以我自己先建立了資料庫,然後強迫它使用UTF-8, 否則它的安裝程式在安裝時是把它裝成編碼LATIN1的

英文編碼

然後呢, 本來用網頁看,大多還沒亂碼, 心想這麼好運呢, 結果, EMAIL通知一送,才發現EMAIL連結點進來全是亂碼, 再仔細查,寫進資料庫也亂碼,但顯示竟然沒亂碼,

後來我找到寫入資料庫的程式,強迫使用UTF-8寫入後, 資料庫便沒亂碼了

原因出在我在繁体語言檔一開始說明了用UTF-8,所以雖然程式在寫入DB時編碼不對, 造成寫入資料庫都亂碼, 但當你去讀它時,有些網頁反倒能讀出中文, 但如果資料庫都亂碼, 那也不能用, 一旦我要客製報表, 那根本跑不出資料…

所以就開始了我的馬拉松中文化的歷程…說是馬拉松,其實也只花了一天, 但總計超過11小時的時間…

我重點一開始只做了三件事, 大多數的中文化都很順利…

  1. 安裝DB時強迫先用UTF-8 ,再IMPORT它的DB SCHEMA進DB, 這個在它INSTALL目錄下有兩個TXT檔,一個是DB SCHEMA,另一個則是測試用資料..然後建立空的DB時,也指定一個DB使用者帳號給它,就不用MYSQL ROOT了..
  2. 在INCLUDE的DB CONNECTION檔案, 強迫使用UTF-8編碼, SET NAMES UTF-8 寫進去..
  3. 檢查所有PHP檔案, 總共超過一百支PHP, 看的我老花眼都加深了,將CONNECTION變數後面都強迫加入UTF-8編碼的MYSQL_QUERY….參數里,另外只要看到帶$DEFAULT_CHARSET變數的,都強迫改成UTF8, 包括XML, HEAD里的全改…另外它用了很多JAVASCRIPT, 也在後面指定要用CHARSET UTF8

原以為都OK了, 結果寄信出去,收到還是亂碼,絶的是, 你仔細檢查郵件里的HTML編碼, 它確實也改成了UTF-8, 那為何還是亂碼呢?這著實讓我檢查了兩個多小時,後來仔細檢查框架內有亂碼的HTML CODE 才找到那支PHP,仔細加以檢查才解決..

這張截圖寄件人的紅框是我剛開始抓對原因後,先改的一個<td後面帶的變數, 它可絶了, 用了一個函數, 而這個函數一細查才知,它不支援中文顯示, 不管你用UTF-8它還是顯示亂碼, 可以看到以下截圖黃底部份里也是一堆亂碼…

 

最後以下便是解決後的完工照…

記得早年玩很多軟体,最頭疼的便是中文化的問題, 現在估計也只有老系統才會有這些問題, 這也是適合老年人玩的復刻遊戲, 說實在, 整個做完還挺有趣,挺有成就感的..

 

以下截圖便是作者用上的函數htmlentities,它的用法是把DB里的資料截出來當標题, 最後我加了右邊紅框內的內容才完全解決它標題亂碼的問題..

另外這套最早作者的安裝檔里只有簡体中文版, 我的繁体中文語文檔也是自己翻的, 我最近果然是夠閒的…

只是後來我發現,它的簡体中文版應是在2.8.10以前人家給原作者的, 它在寫到2.11.2時,中間幾個版本的部份都沒翻中文, 我就做了和英文檔的比對, 把它缺的由英文語文檔拷貝過來, 貼到繁体中文語文檔, 再做翻譯, 才解決有些選項, 能看到勾勾, 結果右邊選項說明完全空白的問題..

By Kevin

發佈留言