為了加強
軟件 項目的管理,我
公司使用了
開源 項目管理軟件dotProject。dotProject是一個基於
LAMP的開源項目管理軟件。使用
PHP+MySql
開發實現。dotProject官方
網站在這裡:
http://www.dotproject.net/ 目前
發佈的最
新版本為2.0.4。官方網站上面
提供的
中文包也不錯,我使用的是Ch
inese_Simplied_(GBK)_2.01_
Compatible語言包,編碼方式是GB2312。
下載安裝,安裝語言包非常簡單,解壓縮之後是一個名為「cn」的目錄,整個複製到dotProject的locales
子目錄中,然後做一下
系統配置就搞定了。漢化的也很好。只是有一個缺點,
日曆 功能的星期幾的漢字顯示有
問題!
頁面上面顯示為
亂碼。
經過我的
研究發現,造成此問題有下面這兩個原因:
- 星期幾名稱縮寫的截取函數有問題。代碼中使用 英文單詞取前3個字符的截取方式,例如:Monday-> Mon。可是當截取漢字的時候就生成了一個半漢字。
- 可能是個Bug,例如原 文件「dotProject\modules\calendar\calendar.class.php」 中生成 標題字符串的程序代碼為:
$s .= \n\t\t<th width=\ 14 % \ > .
htmlentities ( utf8_encode ( $day ) , ENT_COMPAT , $locale_char_set ) . </th> ;
很明顯,這裡調用了
一次utf8的編碼函數,所以不論何種
本地化編碼方式,這裡都生成了utf8的編碼字符。
至於改進方式,我採用了比較偷懶的方式,直接設置了星期幾名稱的數組,然後去掉第2個問題中的utf8編碼函數調用,問題
解決。下面是我
修改後的函數代碼:
function _drawDays() {
global $locale_char_set ;
$bow = Date_Calc :: beginOfWeek( null , null , null , null , LOCALE_FIRST_DAY );
$y = substr ( $bow , 0 , 4 );
$m = substr ( $bow , 4 , 2 );
$d = substr ( $bow , 6 , 2 );
$wk = Date_Calc :: getCalendarWeek( $d , $m , $y , %a , LOCALE_FIRST_DAY );
if ( $locale_char_set == ' GB2312 ' )
{
$wk = array ( ' 日 ' , ' 一 ' , ' 二 ' , ' 三 ' , ' 四 ' , ' 五 ' , ' 六 ' );
}
$s = $this -> showWeek ? \n\t\t<th> </th> : ;
foreach ( $wk as $day ) {
// ;
$s .= \n\t\t<th align=\ center\ width=\ 14 % \ > . htmlentities ( $day , ENT_COMPAT , $locale_char_set ) . </th> ;
}
return \n<tr>$s\n</tr> ;
}