DotProject中文乱码解决总结

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文件,加入如下内容:

<? 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 ' );
?>

同时把目录下的所有对照文件转换为utf-8编码存储(可用ultraEdit等文本编辑器转换或登录后用DotProject翻译管理进行更改),初步汉化完成。
2. 修正在中文下日历的乱码问题
本地化语言后日历的星期显示为乱码,这是由于DotProject采用读取操作系统本地语言区域日期格式引起的,在windowsXP中文版默认是“星期几,xxxx-x-x”,且可能为GB2312编码(本地区域语言可以更改)。DotProject读取操作系统的日期用utf8_encode转换后再显示,这样只要操作系统的本地区域日期语言格式和运行DotProject选取的语言不一至时就会出现乱码,显然不是聪明的做法。
1)语言包文件夹下locales.php文件中加入日期格式对照表变量如下:

$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文件中,修改或增加其中的相关几个函数。
加入和修改如下函数:

// ***************************************************************
//得到月全名称列表

function  getMonthNames()
{
    
global   $locale_months ;
  
if ( ! empty ( $locale_months )){
    
$months   =   $locale_months ;
 
 }
else {
    
for ( $i = 1 ; $i < 13 ; $i ++ ){
        
$months [ $i =   strftime ( ' %B
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值