對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2011/11/29 7:58:38
為了加強 軟件 項目的管理,我 公司使用了 開源 項目管理軟件dotProject。dotProject是一個基於 LAMP的開源項目管理軟件。使用 PHP+MySql 開發實現。dotProject官方
網站在這裡: http://www.dotproject.net/ 目前 發佈的最 新版本為2.0.4。官方網站上面 提供的 中文包也不錯,我使用的是Ch inese_Simplied_(GBK)_2.01_ Compatible語言包,編碼方式是GB2312。
下載安裝,安裝語言包非常簡單,解壓縮之後是一個名為「cn」的目錄,整個複製到dotProject的locales 子目錄中,然後做一下 系統配置就搞定了。漢化的也很好。只是有一個缺點, 日曆 功能的星期幾的漢字顯示有 問題! 頁面上面顯示為
亂碼。
經過我的 研究發現,造成此問題有下面這兩個原因:
本地化編碼方式,這裡都生成了utf8的編碼字符。
至於改進方式,我採用了比較偷懶的方式,直接設置了星期幾名稱的數組,然後去掉第2個問題中的utf8編碼函數調用,問題 解決。下面是我 修改後的函數代碼:
網站在這裡: 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的編碼字符。
至於改進方式,我採用了比較偷懶的方式,直接設置了星期幾名稱的數組,然後去掉第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> ;
}
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> ;
}
原文出處:开源的项目管理系统dotProject的汉化问题 - 好工具站长分享平台