DotProject中文乱码解决总结
Andrew(zhuyi)
DotProject是一个基于AMP(apache+mysql+php)的开源项目管理工具,DotProject可以支持多语言并采用模块化设计以便于扩展。
最近需要一个项目管理软件,于是就下载DotProject进行了试用,感觉不错,但有中文有乱码问题,如:日历和gantt图。现就对解决DotProject乱码进行一下总结,由于本人以前没接触过PHP,初次修改有错的地方请大家指正。
机器环境:WindowsXP SP2简体中文,apache2.0.59, mysql-5.0.16-win32, php-5.2.0,其他版本没有测过,不能保证在其他版本下正确运行,由其在PHP4下。
1. 加入语言包
DotProject有比较不错的多语言包,项目叫dot modules,在sourceforge上有。DotProject的语言包目录./locales,运行可根据配置动态加载语言包进行对照转换相应的语言。下载中文语言包解压后并复制到语言目录locales下,修改语言包文件夹下locales.php文件:
$locale_char_set = 'GB2312';为$locale_char_set = 'utf-8';
同时把英文语言包的同名文件也进行修改。使用'utf-8'的好处就是浏览器用unicode(utf-8)解码,页面可显示多种语言文字。防照英文语言包创建lang.php文件,加入如下内容:
$dir = basename ( dirname ( __FILE__ ));
$LANGUAGES [ ' zh-cn ' ] = array ( $dir , ' Chinese (Simplified) ' , ' 简体中文 ' , ' chs ' );
?>
如果繁体则:
$dir = basename ( dirname ( __FILE__ ));
$LANGUAGES [ ' zh-tw ' ] = array ( $dir , ' Chinese (Traditional) ' , ' 繁體中文 ' , ' cht ' );
?>
同时把目录下的所有对照文件转换为utf-8编码存储(可用ultraEdit等文本编辑器转换或登录后用DotProject翻译管理进行更改),初步汉化完成。
2. 修正在中文下日历的乱码问题
本地化语言后日历的星期显示为乱码,这是由于DotProject采用读取操作系统本地语言区域日期格式引起的,在windowsXP中文版默认是“星期几,xxxx-x-x”,且可能为GB2312编码(本地区域语言可以更改)。DotProject读取操作系统的日期用utf8_encode转换后再显示,这样只要操作系统的本地区域日期语言格式和运行DotProject选取的语言不一至时就会出现乱码,显然不是聪明的做法。
1)语言包文件夹下locales.php文件中加入日期格式对照表变量如下:
$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文件中,修改或增加其中的相关几个函数。
加入和修改如下函数:
//得到月全名称列表
function getMonthNames()
{
global $locale_months ;
if ( ! empty ( $locale_months )){
$months = $locale_months ;
} else {
for ( $i = 1 ; $i < 13 ; $i ++ ){
$months [ $i ] = strftime ( ' %B