十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

DotProject中文乱码解决总结

上一篇 / 下一篇  2011-03-26 11:01:29 / 个人分类:项目管理

51Testing软件测试网K'D.M5z k2B

DotProject是一个基于AMP(apache+mysql+php)的开源项目管理工具,DotProject可以支持多语言并采用模块化设计以便于扩展。51Testing软件测试网/_|(QL] w_
最近需要一个项目管理软件,于是就下载DotProject进行了试用,感觉不错,但有中文有乱码问题,如:日历和gantt图。现就对解决DotProject乱码进行一下总结,由于本人以前没接触过PHP,初次修改有错的地方请大家指正。51Testing软件测试网gIkMBr#u&ye
 机器环境:WindowsXP SP2简体中文,apache2.0.59, mysql-5.0.16-win32, php-5.2.0,其他版本没有测过,不能保证在其他版本下正确运行,由其在PHP4下。
@Sn~aI\I*M01. 加入语言包
.GF R Pis0 DotProject 有比较不错的多语言包,项目叫dot modules,在sourceforge上有。DotProject的语言包目录./locales,运行可根据配置动态加载语言包进行对照转换相应的 语言。下载中文语言包解压后并复制到语言目录locales下,修改语言包文件夹下locales.php文件:51Testing软件测试网:L\s*Qs u
$locale_char_set = 'GB2312';为$locale_char_set = 'utf-8';51Testing软件测试网sL7w)a`&\E o%A1h*^ _
同时把英文语言包的同名文件也进行修改。使用'utf-8'的好处就是浏览器用unicode(utf-8)解码,页面可显示多种语言文字。防照英文语言包创建lang.php文件,加入如下内容:51Testing软件测试网^~0N1X$t)U@U ^j K

.X/If,\%_ [-ID0
<?php51Testing软件测试网~)z+J2u hb F
$dir = basename(dirname(__FILE__));51Testing软件测试网3o4Q)rd&kL:xN
$LANGUAGES['zh-cn'= array ( $dir, 'Chinese (Simplified)', '简体中文', 'chs');51Testing软件测试网 \-|odsXh `0\I
?>
51Testing软件测试网[5y&j.T0X+NaCX

51Testing软件测试网Y/L,j5o,c"d'h6x
如果繁体则:
1W)Q @s:eI0Z K051Testing软件测试网|"`;?/EY;z

<?php51Testing软件测试网F5?})L @^YX0HE@*?
$dir = basename(dirname(__FILE__));
+h @+X2W)M*[0
$LANGUAGES['zh-tw'= array ( $dir, 'Chinese (Traditional)', '繁體中文', 'cht');
,Gh$w9H$D_.P3F^I+O0
?>

l'HY*m$ofE [0同时把目录下的所有对照文件转换为utf-8编码存储(可用ultraEdit等文本编辑器转换或登录后用DotProject翻译管理进行更改),初步汉化完成。
$hAja{3e MC1z z+v02. 修正在中文下日历的乱码问题51Testing软件测试网4we6ux/`t~
本 地化语言后日历的星期显示为乱码,这是由于DotProject采用读取操作系统本地语言区域日期格式引起的,在windowsXP中文版默认是“星期 几,xxxx-x-x”,且可能为GB2312编码(本地区域语言可以更改)。DotProject读取操作系统的日期用utf8_encode转换后再 显示,这样只要操作系统的本地区域日期语言格式和运行DotProject选取的语言不一至时就会出现乱码,显然不是聪明的做法。
)h*d AC2P@01)语言包文件夹下locales.php文件中加入日期格式对照表变量如下:51Testing软件测试网{ h.J fPKs\+M%}

$locale_weeks = array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
W#av*h2y:m!zC:F A-O0
$locale_short_week = array('', '', '', '', '', '', '');
,b }7@.na#c _0
$locale_months = array(null, '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月');51Testing软件测试网-?}^p8j`DE%TPa{
$locale_short_months = array(null, '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月');
51Testing软件测试网~e7C l!~6{X P8[

2)DotProject的日期处理基类在lib\PEAR\Date下Calc.php文件中,修改或增加其中的相关几个函数。
|;x]``/}h5v0加入和修改如下函数:51Testing软件测试网Jg8bL0S,d$_M6P]

//***************************************************************51Testing软件测试网b [ P/qn3T1Q
//得到月全名称列表

r;\)YWc0
function getMonthNames()51Testing软件测试网,L2o3ks Kc
{
gy{ RWw uV0    
global $locale_months;51Testing软件测试网u gF!dF c8g*m
  
if(!empty($locale_months)){51Testing软件测试网9X!E1cM`5_ J\.tR
    
$months = $locale_months;51Testing软件测试网&PMoo2ls
 
6hM@#IHN5xr0 }
else{51Testing软件测试网/c8TEw9lY
    
for($i=1;$i<13;$i++){
QA^Pf;h d0        
$months[$i= strftime('%B', mktime(0, 0, 0, $i, 1, 2001));
O7tB b6Q.C8_l8r6Q q0    }
"hs/Bm!`0  }
%o6|,r\ R/meZ]+?3m0  
return($months);
&qD Qy`0}51Testing软件测试网.k%@!EVwG
51Testing软件测试网6t:k9~F)p:d0S
//****************************************************************
!g9C~ ju6V]X}L0//得到月短名称列表    

nf8kZd0
function getMonthShortNames($length=3)51Testing软件测试网NNZwIaa
{
7^R[)OC0        
global $locale_short_months;
d!p'I;`,X Y(ac0   
if(!empty($locale_short_months)){
+e5[Ob&]&A;Y ^0    
$months = $locale_short_months;
yK/Y{.A1c)` of&l`0   
q8uJU+O|&{*hA?9A{e0  }
else{51Testing软件测试网upJ0^7U+hW5r
            
for($i=1;$i<13;$i++){
"oe z.o7K9vN z0                
$months[$i= strftime('%B', mktime(0, 0, 0, $i, 1, 2001));
3EV&fE.Dx;Wq0                
$months[$i= substr($months[$i], 0, $length);51Testing软件测试网Mrg/~/L|;q
            }
||*w/e~(n0        }51Testing软件测试网d&FV%l4W@
        
return($months);51Testing软件测试网V[Vlp'tf
}  
4C;^Z4Rd3r&P0
,B l8y%qA5B n0
//*****************************************************************51Testing软件测试网nl4BQb:n
//得到星期全名称列表     
51Testing软件测试网eGn.hj2_VP_'a/n
function getWeekDays()
OpaZx:ZJ,z0{
O d q0k4S$i0        
global $locale_weeks;
'd$\m(XC9u,G2C$L0   
if(!empty($locale_weeks)){51Testing软件测试网*fNa)iM/ii-C
    
$weekdays = $locale_weeks;51Testing软件测试网 Z&W+Vu[C
  51Testing软件测试网j0B9T6V%q%F:N
  }
else{51Testing软件测试网ttwJMS
      
for($i=0;$i<7;$i++){
Z-[9JQx+O@bU.i7o0            
$weekdays[$i= strftime('%A', mktime(0, 0, 0, 1, $i, 2001));51Testing软件测试网#v8th A;CD
            }51Testing软件测试网T)?ny-BXz
        }        51Testing软件测试网WQ0eQ8} N
        
return($weekdays);51Testing软件测试网snT+F A&E
}51Testing软件测试网!Il{X`!mA/U

t-u F+h6x8ok'_0
//****************************************************************51Testing软件测试网Al4`J`3i
//得到星期短名称列表   

*j{(MvcC \G0
function getShortWeekDays($length=3)
*XL8m\'^`0{51Testing软件测试网Vm;|)`,k1zD7?
        
global $locale_short_week;
K(s-M aW9on\ZB"aL0   
if(!empty($locale_short_week)){51Testing软件测试网 z;oe,R8R0C
    
$weekdays = $locale_short_week;
9YpDH6ZtnZd0    
z;Q.h+HY0PR0  }
else{51Testing软件测试网*h7Q3hH h,O1u
            
for($i=0;$i<7;$i++){51Testing软件测试网GFQ4z(dp
                
$weekdays[$i= strftime('%A', mktime(0, 0, 0, 1, $i, 2001));
!J~ Yy\ R0                
$weekdays[$i= substr($weekdays[$i],0,$length);                51Testing软件测试网GeV2H3T8KKJyL
            }
9j~O/X v,h0        } 51Testing软件测试网"ej.PZW T'`!s
        
return($weekdays);
g2Q%x hmn*?0
A%l'S#]%o_051Testing软件测试网@DBeg
//****************************************************************51Testing软件测试网C)T |6i*@s[t"M
//得到月全名称
51Testing软件测试网$d6},mc0FTa*_
function getMonthFromFullName($month)
S3B6J4|uf0{
4r~G1d*I3x0        
$month = strtolower($month);
R.nZ B{X5`s/a R0        
$months = Date_Calc::getMonthNames();
7lcc4r0c.C9{+B0        
while(list($id, $name= each($months)){
S0g!b3_)c/v0            
if(ereg($month, strtolower($name))){51Testing软件测试网1o#ZK`8d
                
return($id);51Testing软件测试网:{"}9G}0wDN;u
            }
whj4k)b#I#O0        }
zJs)b~ukGf D1AS9m0        
return(0);51Testing软件测试网a,]}1Fn"pTm
}  51Testing软件测试网W4h*Yh a8n:UI

7q,sr2ML'M,pw c0
//****************************************************************
_;i](h|0//得到月短名称 

Wq@#mG v.?6e0
function getMonthAbbrname($month,$length=3)51Testing软件测试网|'k5J!W A9l
{51Testing软件测试网9W!yP!D:}
        
$month = strtolower($month);
.H5J"O|_~D0        
$months = Date_Calc::getMonthShortNames();51Testing软件测试网6q gaxS2n*H YL$l
        
while(list($id, $name= each($months)){51Testing软件测试网3L%Q(W9b&f~6`Q
            
if(ereg($month, strtolower($name))){
6P;{'p&T+i0                
return($id);51Testing软件测试网2s3Zr"AuOJ
            }51Testing软件测试网k0F3^\7b8@!LD,l
        }
dpw:H1W&D0        
return(0);
j yl dx!Pa ce b0
// end func getMonthAbbrname
a6v r MQu051Testing软件测试网9Ec(aB ^j[
//****************************************************************51Testing软件测试网;zjR+|[4FJd
//得到星期短名称

n7VuE!Z?%Y-M,S#R y0
function getWeekdayFullname($day="",$month="",$year="")51Testing软件测试网Q l!cBC I?.t
{51Testing软件测试网6B3id@{Wi
        
if(empty($year))51Testing软件测试网/K [9a _;}1\B._ HV
            
$year = Date_Calc::dateNow("%Y");
@.}zA4GR'~*H0        
if(empty($month))
.f(R#nW[ Y0            
$month = Date_Calc::dateNow("%m");
S!xn-^a-eS K!`0        
if(empty($day))
*V0t7@1p0d"D0            
$day = Date_Calc::dateNow("%d");51Testing软件测试网t1G` D*y$F2BM

o _!w5YIy[0        
$weekday_names = Date_Calc::getWeekDays();51Testing软件测试网"H,zRaO9d
        
$weekday = Date_Calc::dayOfWeek($day,$month,$year);
Tb ~z!L0If{Rm051Testing软件测试网)VLt1C.RaH-l5@_b
        
return $weekday_names[$weekday];51Testing软件测试网)`$i"MYW

#cag B EL0
// end func getWeekdayFullname
\4x;v1j:Q&pd051Testing软件测试网4?Z s!iv-I S
//****************************************************************
t+sS];z;V0//得到星期短名称

v~*i;L+pN0
function getWeekdayAbbrname($day="",$month="",$year="",$length=3)
Kda@#nc*h0{51Testing软件测试网 Vf-q7kTOeE5f
        
if(empty($year))
G$?3d%\ TR*h4pM9c1Z0            
$year = Date_Calc::dateNow("%Y");
$r G2i5Vc7D-y0        
if(empty($month))51Testing软件测试网T3S~#r2g L B9w
            
$month = Date_Calc::dateNow("%m");
kQ6A Mr0        
if(empty($day))
Y9q`%MAN`0            
$day = Date_Calc::dateNow("%d");
y#Q,ea dv1Y0
!\ F6G"w5Z%MZ7B^0        
$weekday_names = Date_Calc::getShortWeekDays();
qj.U:c(PB5d0        
$weekday = Date_Calc::dayOfWeek($day,$month,$year);51Testing软件测试网 sg hA)ku,? R
51Testing软件测试网n:m m4b6Xj;r`RSO+y
   

TAG: DotProject

 

评分:0

我来说两句