DotProject中文乱码解决总结
上一篇 / 下一篇 2011-03-26 11:01:29 / 个人分类:项目管理
DotProject是一个基于AMP(apache+mysql+php)的开源项目管理工具,DotProject可以支持多语言并采用模块化设计以便于扩展。51Testing软件测试网pni*Q!K4yp
最近需要一个项目管理软件,于是就下载DotProject进行了试用,感觉不错,但有中文有乱码问题,如:日历和gantt图。现就对解决DotProject乱码进行一下总结,由于本人以前没接触过PHP,初次修改有错的地方请大家指正。
TA6I(Q/M$qa1I&E0 机器环境:WindowsXP SP2简体中文,apache2.0.59, mysql-5.0.16-win32, php-5.2.0,其他版本没有测过,不能保证在其他版本下正确运行,由其在PHP4下。51Testing软件测试网Ir2M
|~~Z{"]
1. 加入语言包
;@#r|"Y
k.pV6|u+vF0 DotProject
有比较不错的多语言包,项目叫dot
modules,在sourceforge上有。DotProject的语言包目录./locales,运行可根据配置动态加载语言包进行对照转换相应的
语言。下载中文语言包解压后并复制到语言目录locales下,修改语言包文件夹下locales.php文件:
X0M`+F-MW1T
GZ9K G0$locale_char_set = 'GB2312';为$locale_char_set = 'utf-8';51Testing软件测试网$JWDZNk
同时把英文语言包的同名文件也进行修改。使用'utf-8'的好处就是浏览器用unicode(utf-8)解码,页面可显示多种语言文字。防照英文语言包创建lang.php文件,加入如下内容:51Testing软件测试网Gk*?N(X n
t\ {nyf@G Z0$dir = basename(dirname(__FILE__));51Testing软件测试网+p5k ^-@XBg
$LANGUAGES['zh-cn'] = array ( $dir, 'Chinese (Simplified)', '简体中文', 'chs');
~I4nH)[;Y|$WSb0?>
B6fK?*cwB\e4s B051Testing软件测试网
A;HPZqwz
如果繁体则:
2|cLR E8LX0f051Testing软件测试网.@2|Mz4K&D,t$B
$dir = basename(dirname(__FILE__));51Testing软件测试网b*^(nM5mY$kM*V
$LANGUAGES['zh-tw'] = array ( $dir, 'Chinese (Traditional)', '繁體中文', 'cht');
t&jUpQ8E0?>
同时把目录下的所有对照文件转换为utf-8编码存储(可用ultraEdit等文本编辑器转换或登录后用DotProject翻译管理进行更改),初步汉化完成。
uQeDv02. 修正在中文下日历的乱码问题51Testing软件测试网!^/|8j+~Sn]2H|r
本
地化语言后日历的星期显示为乱码,这是由于DotProject采用读取操作系统本地语言区域日期格式引起的,在windowsXP中文版默认是“星期
几,xxxx-x-x”,且可能为GB2312编码(本地区域语言可以更改)。DotProject读取操作系统的日期用utf8_encode转换后再
显示,这样只要操作系统的本地区域日期语言格式和运行DotProject选取的语言不一至时就会出现乱码,显然不是聪明的做法。51Testing软件测试网4{m3_ u
v/|&Pw
1)语言包文件夹下locales.php文件中加入日期格式对照表变量如下:
$locale_short_week = array('日', '一', '二', '三', '四', '五', '六');
fm qlp*N0$locale_months = array(null, '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月');51Testing软件测试网7p2V4Qj7?2Bwq*n
$locale_short_months = array(null, '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月');
"y
x
p#_-~-`;D02)DotProject的日期处理基类在lib\PEAR\Date下Calc.php文件中,修改或增加其中的相关几个函数。
K5{(Tx?0加入和修改如下函数:51Testing软件测试网_?5M+ktR5{;`\M
//得到月全名称列表51Testing软件测试网;w;dn`ug
function getMonthNames()
B `&`i2Mt cK+B0{
2E&g1J m.Y9C,f0 global $locale_months;
z#pZ&NK)G+[-YO.Y"^,Lg0 if(!empty($locale_months)){51Testing软件测试网W,\z4t B U'Z Q9z8I@)?^
$months = $locale_months;51Testing软件测试网lg*y B#p7@w
51Testing软件测试网2G\ j(P3k!f
}else{
x Mu8D{f(Pjw0 for($i=1;$i<13;$i++){51Testing软件测试网w6d5w7O,A @#l4A1o
$months[$i] = strftime('%B', mktime(0, 0, 0, $i, 1, 2001));
q;oj3`3[1_#zeh0_0 }51Testing软件测试网_ WBde0R1ac
}51Testing软件测试网VMd^*]HBc
return($months);
-iWRE%Y4{qB:Y0}
rx,fDQ h&k0
7G oh[4?%xqg t-Q"c0//****************************************************************
5h B ~p#{vkF-f0//得到月短名称列表 51Testing软件测试网l;x c/_6I0G:E$eG
function getMonthShortNames($length=3)
g}@;gPW6p0{
3mon3OB^WN/zW0 global $locale_short_months;51Testing软件测试网0R,dq8H C1ky'a
if(!empty($locale_short_months)){51Testing软件测试网;}3],hm4F |xl ta5t
$months = $locale_short_months;51Testing软件测试网,R:sLqE}H