用了一段時間的liferay,被它的中文問題搞的頭大。據說作者是個華人,怎么都沒有考慮中文的兼容問題呢?最直接的問題就是它的中文翻譯,作者看樣子似乎不懂漢語,還需要靠翻譯軟件來幫忙,翻譯出的漢語簡體加繁體,句子完全按照英文的順序逐詞直譯。這個肯定要靠自己逐個修改了,工作量不小。下面列舉一下因為中文問題而出現的程序bug。liferay版本:4.1.21. 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建立門戶的例子。研究該網站后發(fā)現其中的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. RSSliferay的Message Boards提供了RSS功能,點擊Category右邊的RSS圖標IE會打開xml頁,但如果xml中包含中文頁面就會報錯。原來liferay在生成xml文件時編碼設置為“UTF-8”,而xml中如果包含中文,xml文件編碼必須設置成“GBK”才能夠正常打開。解決的辦法就是把encoding="UTF-8"修改為encoding="GBK",有多個可修改的類,我傾向于在最外層修改,所以修改com.liferay.portlet.messageboards.action.RSSAction的getRSS()方法,將最后一行return rss.getBytes();修改為rss.replaceFirst("UTF-8", "GBK").getBytes();另外還有一個問題就是平臺的相關性,Liferay在Linux下的中文問題要比WinXP下少(其它環(huán)境沒有測試)。比如中文附件的上傳,我在WinXP下無法上傳中文文件名的附件,但部署到Linux下就可以。所以建議Liferay要在Linux下運行。目前就發(fā)現這些,有問題了再陸續(xù)貼上來。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請
點擊舉報。