现在的位置: 首页 > 综合 > 正文

Liferay中文问题及解决办法

2013年05月27日 ⁄ 综合 ⁄ 共 2057字 ⁄ 字号 评论关闭

    用了一段时间的liferay,被它的中文问题搞的头大。据说作者是个华人,怎么都没有考虑中文的兼容问题呢?
    最直接的问题就是它的中文翻译,作者看样子似乎不懂汉语,还需要靠翻译软件来帮忙,翻译出的汉语简体加繁体,句子完全按照英文的顺序逐词直译。这个肯定要靠自己逐个修改了,工作量不小。
    下面列举一下因为中文问题而出现的程序bug。
    liferay版本:4.1.2 Professional  运行环境:WinXP Professional、Oracle 9i、JDK1.4.2、Tomcat  
    1. portlet标题。
    如果修改某个portlet的标题为中文,会出现乱码。
    原因是liferay将portlet属性信息以xml的格式存入数据库,但在构建xml document时没有指定format编码,导致中文显示成乱码。 
    解决办法:修改com.liferay.portlet.PortletPreferencesSerializer的toXML()方法,将
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XMLWriter writer = new XMLWriter(baos, OutputFormat.createCompactFormat());
    修改为
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        OutputFormat format = OutputFormat.createCompactFormat();
        format.setEncoding("GBK");
        XMLWriter writer = new XMLWriter(baos, format);

    2. 内容管理。
    内容管理是建立门户最重要的portlet。liferay的网站也是用liferay portal构建的,这个网站是一个很好的如何使用liferay建立门户的例子。研究该网站后发现其中的Journal Content均使用了Structure和Template,这对于构建结构丰富的Journal Content很有帮助。但如果使用Structure和Template建立我们自己的Journal Content,中文又变成乱码了。
    原因:这个问题和第一个问题类似,也和xml有关。因为如果使用了Structure和Template,liferay会将文本内容写入Structure和Template的xml,然后一同存进数据库。和第一个问题不同的是前者需要在持久化之前format数据,而在这里我们需要在读取数据时设置编码。
    解决办法:修改com.liferay.portlet.journal.util.JournalXslUtil的transform(),这个方法的功能是把xml转换成能够在页面上显示的html。将最后一行
        return outputBaos.toString();
    修改为
        return outputBaos.toString("UTF-8");
    此时会报“Unhandled exception type UnsupportedEncodingException”错误,使用try catch处理一下就可以了。

    3. RSS
    liferay的Message Boards提供了RSS功能,点击Category右边的RSS图标IE会打开xml页,但如果xml中包含中文页面就会报错。原来liferay在生成xml文件时编码设置为“UTF-8”,而xml中如果包含中文,xml文件编码必须设置成GBK或GB2312才能够正常打开。
    解决的办法就是把encoding="UTF-8"修改为encoding="GBK",有多个可修改的类,我倾向于在最外层修改,所以修改com.liferay.portlet.messageboards.action.RSSAction的getRSS()方法,将最后一行
        return rss.getBytes();
    修改为
        rss.replaceFirst("UTF-8", "GBK").getBytes();

    下面两个问题和平台有关
    4. 上传中文附件
    部署在WinXP下的Liferay,上传中文附件出错。
    解决办法就是把Liferay部署到Linux。

    5. CMS
    使用Oracle9i,在内容管理中添加过多的中文内容后,读取这些数据时系统不响应,若重新启动服务器,启动到 Auto deploy scanner started for /home/liferay/deploy 就停止。
    解决办法是将数据库升级到10g,并使用最新的驱动。

    目前就发现这些,有问题了再陆续贴上来。

抱歉!评论已关闭.