DotProject中文乱码解决总结
上一篇 / 下一篇 2011-03-26 11:01:29 / 个人分类:项目管理
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 P is0 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`&\Eo%A1h*^ _
同时把英文语言包的同名文件也进行修改。使用'utf-8'的好处就是浏览器用unicode(utf-8)解码,页面可显示多种语言文字。防照英文语言包创建lang.php文件,加入如下内容:51Testing软件测试网^ ~0N1X$t)U @U
^j
K
$dir = basename(dirname(__FILE__));51Testing软件测试网3o4Q)r d&kL:xN
$LANGUAGES['zh-cn'] = array ( $dir, 'Chinese (Simplified)', '简体中文', 'chs');51Testing软件测试网\-|odsXh `0\I
?>
51Testing软件测试网Y/L,j5o,c"d'h6x
如果繁体则:
1W)Q
@s:eI0Z
K051Testing软件测试网|"`;?/EY;z
$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*dAC2P@01)语言包文件夹下locales.php文件中加入日期格式对照表变量如下:51Testing软件测试网{h.JfPKs\+M%}
W#av*h2y:m!zC:FA-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月');
2)DotProject的日期处理基类在lib\PEAR\Date下Calc.php文件中,修改或增加其中的相关几个函数。
|;x]``/}h5v0加入和修改如下函数:51Testing软件测试网Jg8bL0S,d$_M6P]
//得到月全名称列表
r;\)YWc0function 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));
O7tBb6Q.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//得到月短名称列表
nf8kZd0function getMonthShortNames($length=3)51Testing软件测试网NNZ wI aa
{
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++){
"oez.o7K9vNz0 $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{
Odq0k4S$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+FA&E
}51Testing软件测试网!Il{X`!mA/U
t-u F+h6x8ok'_0//****************************************************************51Testing软件测试网Al4`J`3i
//得到星期短名称列表
*j{(MvcC\G0function getShortWeekDays($length=3)
*XL8m\'^`0{51Testing软件测试网Vm;|)`,k1zD7?
global $locale_short_week;
K(s-MaW9on\ZB"aL0 if(!empty($locale_short_week)){51Testing软件测试网 z;oe,R8R0C
$weekdays = $locale_short_week;
9YpDH6ZtnZd0
z;Q.h+HY0PR0 }else{51Testing软件测试网*h7Q3hHh,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.PZWT'`!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,pwc0//****************************************************************
_;i](h|0//得到月短名称
Wq@#mGv.?6e0function getMonthAbbrname($month,$length=3)51Testing软件测试网 |'k5J!W A9l
{51Testing软件测试网9W!yP!D:}
$month = strtolower($month);
.H5J"O|_~D0 $months = Date_Calc::getMonthShortNames();51Testing软件测试网6qgaxS2n*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
}
dp w:H1W&D0 return(0);
jyl dx!Paceb0} // end func getMonthAbbrname
a6v r MQu051Testing软件测试网9Ec(aB^ j[
//****************************************************************51Testing软件测试网;zjR+|[4FJd
//得到星期短名称
n7VuE!Z?%Y-M,S#Ry0function getWeekdayFullname($day="",$month="",$year="")51Testing软件测试网Q l!cBCI?.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"MY W
#cag BEL0} // end func getWeekdayFullname
\4x;v1j:Q&pd051Testing软件测试网4?Z s!iv-IS
//****************************************************************
t+sS];z;V0//得到星期短名称
v~*i;L+pN0function getWeekdayAbbrname($day="",$month="",$year="",$length=3)
Kda@#nc*h0{51Testing软件测试网 Vf-q7kTOeE5f
if(empty($year))
G$?3d%\ TR*h4p M9c1Z0 $year = Date_Calc::dateNow("%Y");
$r G2i5Vc7D-y0 if(empty($month))51Testing软件测试网T3S~#r2gL B9w
$month = Date_Calc::dateNow("%m");
kQ6A Mr0 if(empty($day))
Y9q`%MAN`0 $day = Date_Calc::dateNow("%d");
y#Q,ea d v1Y0
!\ F6G"w5Z%MZ7B^0 $weekday_names = Date_Calc::getShortWeekDays();
q j.U:c(PB5d0 $weekday = Date_Calc::dayOfWeek($day,$month,$year);51Testing软件测试网 sghA)ku,?R
51Testing软件测试网n:m m4b6Xj;r `RSO+y
TAG: DotProject
生活在互联网领域,从事WEB测试工作.
我的栏目
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 1694041
- 日志数: 556
- 图片数: 1
- 文件数: 3
- 书签数: 8
- 建立时间: 2007-06-08
- 更新时间: 2023-01-07
清空Cookie - 联系我们 - 51Testing软件测试网 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Powered by 51Testing
© 2003-2021
沪ICP备05003035号