OTRS安装使用系列之十一—&md…

来源:互联网 发布:python微信自定义菜单 编辑:程序博客网 时间:2024/06/06 17:57

因为试用产品的时候,碰到了界面的显示问题,所以把中文化提到前面,搜索放到后面再说。

不知道你怎么看中文化问题? 也即软件汉化问题。

不知道你是否有过类似的体会。刚开始以为这是一件很容易的事情,认为我的英文不错,这还有什么难的吗?如果你尝试过,你就会知道,这其中绝不仅仅那么简单。

一个国外软件能够汉化好的三个条件:

1、对英语词汇的理解足够深。此处说英语水平,主要指对英文单词的熟悉程度,英语跟中文一样,可能一个单词对应中文可以翻译成很多个中文词汇,那选择哪个词汇更合适呢?如果你对该英文单词掌握的不够深,那么可能恰恰需要用到那个翻译;

2、对计算机专业要比较熟悉,了解计算机专业词汇。不是只有生活英语就足够的;

3、最难得一点:你要对产品比较熟悉。上面两点还是比较容易具备的。但是对产品熟悉这一点把很多人拒之门外。产品对于翻译的重要性,形象地比喻为英语里对于词汇理解时,老师反复强调的“上下文”(也即:Context)。

一、先说姓名:

国外软件拿到中国来,首先碰到名字问题,显示顺序都是“名字姓”这样的格式,看起来很别扭。怎么办呢?对于OTRS来说,需要修改对应的文件了。

在官方论坛有一篇帖子介绍怎么正确地显示中文名,居然有三个人前后做了说明和再说明。我摘抄在下面,方便大家一起参考,不要再翻来翻去了

================================================================

一) micshi OTRS expert说法:

OTRS在显示中文的姓名时,仍然沿用西方人的习惯。
例如,它会将“郭美美”显示成“美美 郭”。虽然是个小问题,但总觉得别扭,与OTRS的高品质不相符。
下面举例介绍如何让OTRS正确地显示中文姓名。
1. cd /opt/otrs/Kernel/Output/HTML/Standard
2. vi Adminuser.dtl 或 vi AdminCustomerUser.dtl
3. 将文件中的字符串

代码:
<td>$QData{"UserFirstname"}$QData{"UserLastname"}</td>

替换为:

代码:
<td>$QData{"UserLastname"}$QData{"UserFirstname"}</td>
4. 保存文件
最后,访问http://yourURL/otrs/index.pl?Action=AdminUser或http://yourURL/otrs/index.pl?Action=AdminCustomerUser,验证一下中文姓名是否显示正确(见下图)。
附件
Name.PNG
Name.PNG (12.39 KiB) 被浏览 46 次

二)LennyOTRS newbie 说法:

修改模板:
otrs/Kernel/Output/HTML/Standard/AgentTicketZoom.dtl
包括负责人,所有者:

代码:
<!-- dtl:block:Owner-->
               <tr valign="top">
                   <td><b>$Text{"Owner"}:</b></td>
                   <td>
                       <divtitle="$QData{"UserLogin"}($QData{"UserFirstname"}$QData{"UserLastname"})">
                           $QData{"UserLogin","18"}($Quote{"$Data{"UserFirstname"}$Data{"UserLastname"}","18"})
                       </div>
                   </td>
               </tr>
<!-- dtl:block:Owner -->
<!-- dtl:block:Responsible -->
               <tr valign="top">
                   <td><b>$Text{"Responsible"}:</b></td>
                   <td>
                       <divtitle="$QData{"UserLogin"}($QData{"UserFirstname"}$QData{"UserLastname"})">
                           $QData{"UserLogin","18"}($Quote{"$Data{"UserFirstname"}$Data{"UserLastname"}","18"})
                       </div>
                   </td>
               </tr>
<!-- dtl:block:Responsible-->

调整为:

代码:
<!-- dtl:block:Owner-->
               <tr valign="top">
                   <td><b>$Text{"Owner"}:</b></td>
                   <td>
                       <divtitle="$QData{"UserLogin"}($QData{"UserFirstname"}$QData{"UserLastname"})">
                           $QData{"UserLogin","18"}($Quote{"$Data{"UserLastname"}$Data{"UserFirstname"}","18"})
                       </div>
                   </td>
               </tr>
<!-- dtl:block:Owner -->
<!-- dtl:block:Responsible -->
               <tr valign="top">
                   <td><b>$Text{"Responsible"}:</b></td>
                   <td>
                       <divtitle="$QData{"UserLogin"}($QData{"UserFirstname"}$QData{"UserLastname"})">
                           $QData{"UserLogin","18"}($Quote{$Data{"UserLastname"}$Data{"UserFirstname"}","18"})
                       </div>
                   </td>
               </tr>
<!-- dtl:block:Responsible–>

三)micshiOTRS expert 再次说:

下面列出的.dtl和.pm文件都与“姓名”显示相关。若逐个找开这些文件,再手工调换Firstname和Lastname的顺序,那会很辛苦且容易出错。
./Kernel/Output/HTML/Standard/AdminSession.dtl
./Kernel/Output/HTML/Standard/AgentTicketOverviewPreview.dtl
./Kernel/Output/HTML/Standard/AgentTicketZoom.dtl
./Kernel/Output/HTML/Standard/AdminCustomerUser.dtl
./Kernel/Output/HTML/Standard/AgentDashboardUserOnline.dtl
./Kernel/Output/HTML/Standard/AdminUser.dtl
./Kernel/Output/HTML/Standard/AgentTicketOverviewMedium.dtl
./Kernel/Output/HTML/Standard/AgentTicketPrint.dtl
./Kernel/Output/HTML/Standard/AgentTicketOverviewSmall.dtl
./Kernel/Output/HTML/Standard/AdminGenericAgent.dtl
./Kernel/Output/HTML/Standard/AgentTicketHistory.dtl
./Kernel/Output/HTML/Standard/AgentTicketZoom.dtl
./Kernel/Output/HTML/Standard/AgentTicketSearchResultPrint.dtl
./Kernel/Output/HTML/Standard/Header.dtl
./Kernel/Output/HTML/Standard/CustomerNavigationBar.dtl
./Kernel/Output/HTML/Standard/PrintHeader.dtl
./Kernel/Output/HTML/Standard/Test.dtl
./Kernel/Output/HTML/Standard/CustomerHeader.dtl
./Kernel/Modules/AgentTicketPhoneOutbound.pm
./Kernel/Modules/AgentTicketMove.pm
./Kernel/Modules/CustomerTicketMessage.pm
./Kernel/Modules/AgentTicketActionCommon.pm
./Kernel/Modules/AgentTicketBulk.pm
./Kernel/Modules/CustomerTicketZoom.pm
./Kernel/Modules/AgentTicketSearch.pm
下面介绍的shell脚本是利用正规表达式自动调换上述文件中Firstname和Lastname的显示顺序。
注意:执行shell脚本前,务必做好备份。

代码:
cd /opt/otrs/Kernel/Output/HTML/Standard
perl -p -i.bak -w -e's/(\$QData\{\"UserFirstname\"\})(\$QData\{\"UserLastname\"\})/$2$1/g'*.dtl
perl -p -i.bak -w -e's/(\$Quote\{\")(\$Data\{\"UserFirstname\"\})(\$Data\{\"UserLastname\"\})/$1$3$2/g'*.dtl
perl -p -i.bak -w -e's/(\$Env\{\"UserFirstname\"\})(\$Env\{\"UserLastname\"\})/$2$1/g'*.dtl
cd /opt/otrs/Kernel/Modules
perl -p -i.bak -w -e's/(\$Quote\{\")(\$Data\{\"UserFirstname\"\})(\$Data\{\"UserLastname\"\})/$1$3$2/g'*.pm
perl -p -i.bak -w -e 's/(\$Self->\{UserFirstname\})(\$Self->\{UserLastname\})/$2$1/g' *.pm


上述shell脚本的意思是:在指定目录中逐个找开每一个.dtl或.pm文件。若在当前文件中查找到匹配的字符串后,就执行替换操作(调换Firstname和Lastname的顺序并去掉它们之间的空格)。
最后需要说明的是,shell脚本执行后,会在指定目录中生成*.bak临时文件,可以按下述步骤将其删除。
cd /opt/otrs/Kernel/Output/HTML/Standard
rm *.bak
cd /opt/otrs/Kernel/Modules
rm *.bak

================================================================

我想micshi最后的总结应该是可行并且修改比较完整彻底的了。可惜的是,我是在Windows环境下做的测试,所以暂时没有用到他们提到的方法。我用的土办法。

1、我首先完成了上述micshi第一次说的方法,发现还有些没改过来;主要是界面右上角的“您以登录为:名字 姓”;

2、我使用EMEDITOR工具软件的“在文件中查找/替换”的方法,这可以发现不少文件中涉及到类似问题,全部备份并纠正。下面可以看到找出的这些文件,以及他们所在的行数。但是替换完了以后,界面右上角的“您以登录为:名字姓”依然如故,反复刷新,仍然如此。另一个困难的是,OTRS对URL做了屏蔽,并不能一目了然地看到控制这个部分的显示在哪个文件中。

image

3、看来还有别的文件在控制这个部分,切换到英文状态,看到它显示的“You ard logged inas”,呵呵,好了,我们可以根据它去找了。(稍微了解现代程序程序结构的都清楚为什么这样做了)。结果如下:

image

紧接着修改跟在绿色显示部分后面的字符串的顺序就可以了。

到此,中文姓名的问题,也基本得到解决。也算是micshi提供的方法之外的另外一个土办法吧,呵呵。。

 

二、接下来说说软件汉化:

对于OTRS的Windows安装来说,国际化文件位于C:\ProgramFiles\OTRS\OTRS\Kernel\Language目录下,

image

zh_CN.pm应该对应的基本模块HelpDesk的中文对照表。其他文件是因为我安装了相应的ITSM、FAQ等组件模块才有的。我试图完善zh_CN.pm。但是很费劲,仅仅过一遍就要花不少时间。285k大小,1k=1024英文/512汉字,285k*1024=?即使285k*512=?,总共十几、二十万字呢,呵呵。

我修改了一部分,然后碰到一些问题,认识到我不能这么做了。真的是比较头疼,看来只能先用起来,逐步完善修改了。

我碰到的问题在哪呢?本篇开头我提到的三点,第1、2点对我来说不成问题,问题在于第3点。我刚试用,还不熟悉系统,霸王硬上弓地翻译下去,难免没有异常情况出现。

所以,最终决定先试用,再逐步完善。

本节,暂时到这里吧。有必要以后再补充。

原创粉丝点击