|
Andrew(zhuyi) DotProject是一個基于AMP(apache+mysql+php)的開源項目管理工具,DotProject可以支持多語言并采用模塊化設(shè)計以便于擴(kuò)展。 <?php $dir = basename(dirname(__FILE__)); $LANGUAGES[‘zh-cn‘] = array ( $dir, ‘Chinese (Simplified)‘, ‘簡體中文‘, ‘chs‘); ?>
<?php $dir = basename(dirname(__FILE__)); $LANGUAGES[‘zh-tw‘] = array ( $dir, ‘Chinese (Traditional)‘, ‘繁體中文‘, ‘cht‘); ?>同時把目錄下的所有對照文件轉(zhuǎn)換為utf-8編碼存儲(可用ultraEdit等文本編輯器轉(zhuǎn)換或登錄后用DotProject翻譯管理進(jìn)行更改),初步漢化完成。 $locale_weeks = array(‘星期日‘, ‘星期一‘, ‘星期二‘, ‘星期三‘, ‘星期四‘, ‘星期五‘, ‘星期六‘); $locale_short_week = array(‘日‘, ‘一‘, ‘二‘, ‘三‘, ‘四‘, ‘五‘, ‘六‘); $locale_months = array(null, ‘一月‘, ‘二月‘, ‘三月‘, ‘四月‘, ‘五月‘, ‘六月‘, ‘七月‘, ‘八月‘, ‘九月‘, ‘十月‘, ‘十一月‘, ‘十二月‘); $locale_short_months = array(null, ‘1月‘, ‘2月‘, ‘3月‘, ‘4月‘, ‘5月‘, ‘6月‘, ‘7月‘, ‘8月‘, ‘9月‘, ‘10月‘, ‘11月‘, ‘12月‘);2)DotProject的日期處理基類在lib\PEAR\Date下Calc.php文件中,修改或增加其中的相關(guān)幾個函數(shù)。 //*************************************************************** //得到月全名稱列表 function getMonthNames() { global $locale_months; if(!empty($locale_months)){ $months = $locale_months; }else{ for($i=1;$i<13;$i++){ $months[$i] = strftime(‘%B‘, mktime(0, 0, 0, $i, 1, 2001)); } } return($months); }![]() //**************************************************************** //得到月短名稱列表 function getMonthShortNames($length=3) { global $locale_short_months; if(!empty($locale_short_months)){ $months = $locale_short_months; }else{ for($i=1;$i<13;$i++){ $months[$i] = strftime(‘%B‘, mktime(0, 0, 0, $i, 1, 2001)); $months[$i] = substr($months[$i], 0, $length); } } return($months); } ![]() //***************************************************************** //得到星期全名稱列表 function getWeekDays() { global $locale_weeks; if(!empty($locale_weeks)){ $weekdays = $locale_weeks; }else{ for($i=0;$i<7;$i++){ $weekdays[$i] = strftime(‘%A‘, mktime(0, 0, 0, 1, $i, 2001)); } } return($weekdays); }![]() //**************************************************************** //得到星期短名稱列表 function getShortWeekDays($length=3) { global $locale_short_week; if(!empty($locale_short_week)){ $weekdays = $locale_short_week; }else{ for($i=0;$i<7;$i++){ $weekdays[$i] = strftime(‘%A‘, mktime(0, 0, 0, 1, $i, 2001)); $weekdays[$i] = substr($weekdays[$i],0,$length); } } return($weekdays); } ![]() //**************************************************************** //得到月全名稱 function getMonthFromFullName($month) { $month = strtolower($month); $months = Date_Calc::getMonthNames(); while(list($id, $name) = each($months)){ if(ereg($month, strtolower($name))){ return($id); } } return(0); } ![]() //**************************************************************** //得到月短名稱 function getMonthAbbrname($month,$length=3) { $month = strtolower($month); $months = Date_Calc::getMonthShortNames(); while(list($id, $name) = each($months)){ if(ereg($month, strtolower($name))){ return($id); } } return(0); } // end func getMonthAbbrname![]() //**************************************************************** //得到星期短名稱 function getWeekdayFullname($day="",$month="",$year="") { if(empty($year)) $year = Date_Calc::dateNow("%Y"); if(empty($month)) $month = Date_Calc::dateNow("%m"); if(empty($day)) $day = Date_Calc::dateNow("%d");![]() $weekday_names = Date_Calc::getWeekDays(); $weekday = Date_Calc::dayOfWeek($day,$month,$year);![]() return $weekday_names[$weekday];![]() } // end func getWeekdayFullname![]() //**************************************************************** //得到星期短名稱 function getWeekdayAbbrname($day="",$month="",$year="",$length=3) { if(empty($year)) $year = Date_Calc::dateNow("%Y"); if(empty($month)) $month = Date_Calc::dateNow("%m"); if(empty($day)) $day = Date_Calc::dateNow("%d");![]() $weekday_names = Date_Calc::getShortWeekDays(); $weekday = Date_Calc::dayOfWeek($day,$month,$year);![]() return $weekday_names[$weekday]; } // end func getWeekdayAbbrname![]() ![]() 以上幾個函數(shù)有的是修改的,有的是新加的,由于較多,不再一一詳細(xì)說明。思路是明顯的,就是通過對日期列表的的映射獲得相應(yīng)語言名稱。有興趣的朋友可能進(jìn)行補(bǔ)充和更正。 foreach( $wk as $day ) { $s .= " <th width="14%">" . htmlentities(utf8_encode($day), ENT_COMPAT, $locale_char_set) . "</th>"; } utf8_encode函數(shù)去掉修改為 foreach( $wk as $day ) { $s .= " <th width="14%">" . htmlentities($day, ENT_COMPAT, $locale_char_set) . "</th>"; }完整的函數(shù)如下: //*************************************************************** 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 );![]() $s = $this->showWeek " <th> </th>" : ""; foreach( $wk as $day ) { $s .= " <th width="14%">" . htmlentities($day, ENT_COMPAT, $locale_char_set) . "</th>"; }![]() return " <tr>$s </tr>"; } //****************************************************************![]() ![]() 修改文件module/tasks/ae_dates.php function cal_work_day_conv($val) { GLOBAL $locale_char_set; $wk = Date_Calc::getCalendarWeek( null, null, null, "%a", LOCALE_FIRST_DAY ); $day_name = $wk[($val - LOCALE_FIRST_DAY)%7]; //把utf8_encode調(diào)用處注釋,不進(jìn)行編碼轉(zhuǎn)換 /* if ($locale_char_set == "utf-8" && function_exists("utf8_encode")) { $day_name = utf8_encode($day_name); } */ return htmlentities($day_name, ENT_COMPAT, $locale_char_set);![]() }![]() ![]() 以上是把顯示日期名稱時的utf8_encode轉(zhuǎn)碼去掉,因為讀到的日期名稱本來就是utf-8編碼,類似的地方可能還有,如果找到都要去掉。 3. 修正在中文下Gantt圖的亂碼問題 DEFINE(‘TTF_DIR‘,‘./lib/jpgraph/fonts/‘); //設(shè)置jpgraphTTF(字體)文件夾 DEFINE(‘SIMSUN_TTF_FONT‘,‘simsun.ttc‘);//使用‘simsun.ttc‘(windows下的宋體) DEFINE(‘CHINESE_TTF_FONT‘,‘simsun.ttc‘); 2)修改文件module/tasks/gantt.php和module/projects/gantt.php $jpLocale = dPgetConfig( ‘jpLocale‘ ); if ($jpLocale) { $graph->scale->SetDateLocale( $jpLocale ); } else { $graph->scale->SetDateLocale( $AppUI->user_lang[0] );//第一個估計會有或注釋掉和設(shè)為 ‘ ’![]() }![]() Gantt圖繪制分兩部分,一部分是由DotProject生成的項目管理的標(biāo)題等,一部分是用戶業(yè)務(wù)產(chǎn)生的內(nèi)容區(qū)部分如項目和任務(wù)名稱。對于第一部分繪制字體編碼保持和DotProject一致。 if (!empty($LOCALE_FONT)){ define("CRURRENT_FONT",$LOCALE_FONT); } else { define("CRURRENT_FONT",FF_ARIAL); }![]() 這樣在設(shè)定字體的地方設(shè)定CRURRENT_FONT就可以了。把 //utf-8 region segment 一-? function GetutfTTF($str) { if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$str) == true) { return (FF_CHINESE); //返回中文字體標(biāo)識FF_CHINESE } return (FF_ARIAL); //返回默認(rèn)字體標(biāo)識FF_ARIAL }![]() 然后在畫gantt圖相應(yīng)的項目和任務(wù)要顯示的名稱判斷是否在中文,設(shè)置對應(yīng)的字體,如:
4. 其他補(bǔ)充說明 后話: |
|
|