文档章节

Liferay 6.1开发学习(六):国际化【转】

攻城狮不是猫
 攻城狮不是猫
发布于 2015/07/02 09:12
字数 1218
阅读 28
收藏 0

一、Portlet属性的国际化

在前面创建的Portlet的时候,portlet的名称等都是英文的,在添加portlet的时候,显示的也是英文的,如何将这些信息显示成中文呢?如将下面Study显示成中文。

1、检查portelt.xmlXML文件中的此portlet的信息,是否包含下面的代码,这个是关键,如果没有手动的添加到portlet-info标签的上面。如查在portlet的创建向导里面勾选了“Create resource bundle file”,则会自动生成。

<resource-bundle>content/Language</resource-bundle>

2、工程的src目录下面找到content包,如果没有则创建,如果有则打开。在里面新建Language_zh_CN.properties文件,我们的portlet中文信息写在此文件里面。

3、在此文件中写入“javax.portlet.title=此处写相应的标题文字”,可以直接写中文,eclipseproperties编辑器,会自动的转换成unicode代码。一般我们只写title就可以,如果有特别需求,可以加上javax.portlet.keywords,javax.portlet.short-title等信息。

4、现在重新打包部署此工程,再次添加portlet,即可看到portlet的名称变成了中文。

注意<resource-bundle>content/Language</resource-bundle>这里的内容定义了,我们存放语言文件的目录在content目录下面的Language文件,这里也可以定义成自己喜欢的,只要按照此规则即可。

二、内容的国际化

上面的国际化是portlet属性信息的国际化,如果是我们想在代码中使用这些国际化信息呢?比如提示语、按钮名称等等。这个地方的方法就和普通的java代码的国际化一样,在上面的语言文件中写入相应的key,在代码中读取即可。

1、如我们要将“参数名称”这个词国际化,则在Language_zh_CN.properties中写入:

propertyName=\u53c2\u6570\u540d\u79f0

后面的是参数名称的unicode码,我们在编辑器中直接写入中文,编辑器会自动转换,如果不能转换可以使用JDK的命令如:

native2ascii -encoding UTF-8 Language_zh_CN.properties.native Language_zh_CN.properties

进行中文编码的转换。

2、在代码中调用:

JSP中:LanguageUtil.get(pageContext,"propertyName")

JAVA代码中:LanguageUtil.get(portletRequest.getLocale(), "propertyName")。其中的第一个参数为Local,也可以使用Locale.CHINESE

三、Liferay Portlet属性国际化的修改

在一中提到的portlet属性的国际化存在一个问题,也就是我们一个语言文件中只能定义一个portlet的属性信息,如果我们在一个插件工程中需要国际化多个portlet的属性信息怎么办?在Liferay的官方论坛、Wiki里面也有不少人讨论此问题,但Liferay的解释就是不支持!在一个资源文件里面只能写一个portlet的属性信息。

个人觉得这一点非常不好,如我的一个插件工程中有十几个portlet,那么难道需要定义十几个语言资源文件或者拆分成十几个Portlet?如果支持下面这样:

javax.portlet.title.MyPortletTitle = My Portlet Title

如果是这样的才是很合理的,Liferay平台里面的Portlet的信息就是这样的形式国际化的,但是插件里面不支持。Liferay平台本身是使用的Strtus resource bundle,所以和我们的不太一样。

既然官方不支持,我们就自己动手改造了,好在Liferay是开源的,我们修改他的源码自己实现就可以了。

方法如下:

1、参考上一篇文章,http://www.huqiwen.com/2012/09/21/liferay-6-1-development-study-5-compile-debug-deploy/,如果编译部署关联Liferay的源码

2、在源码里面找到PortletResourceBundle.java这个类(小提示:可以在eclipse中使用快捷键ctrl+shift+r来快速定位此文件)。找到其中的handleGetObject方法,修改成如下,下面有注释,显示了哪里修改的:

@Override
 protected Object handleGetObject(String key) {
 if (key == null) {
 throw new NullPointerException();
 }
String value = null;
 
 if (parent != null) {
 try {
 value = parent.getString(key);
 }
 catch (MissingResourceException mre) {
 //hqw 2012.09.09 add begin
 String titlekey = key.concat(StringPool.PERIOD).concat(_portletInfo.getTitle());
 if (Validator.isNotNull(titlekey)) {
 titlekey = titlekey.toLowerCase();
 }
 try {
 value = parent.getString(titlekey);
 } catch (MissingResourceException mre2) {
 }
 //end
 }
 }
if ((value == null) || (value == ResourceBundleUtil.NULL_VALUE)) {
 value = _getJavaxPortletString(key);
 }
if ((value == null) && ResourceBundleThreadLocal.isReplace()) {
 value = ResourceBundleUtil.NULL_VALUE;
 }
return value;
 }

在我debug时,发现liferay只是通过javax.portlet.tiltle这个key值寻找,那我们在给他加上具体的title值就可以了。现在修改后的不但兼容他原来的,而且又支持javax.portlet.title.MyPortletTitle = My Portlet Title。这样的多好

3、现在使用ant进行deploy源码,再次启动tomcat就发现,现在的国际化已经支持我们需要的形式了。

© 著作权归作者所有

共有 人打赏支持
攻城狮不是猫
粉丝 3
博文 57
码字总数 86313
作品 0
杭州
程序员
私信 提问
Liferay Portal 6.1 CE 发布

Liferay 的新版本旗舰软件产品 Liferay Portal 6.1 CE 今天发布![下载][快速开始] Liferay 的产品团队和开发团队与我们优秀的社区协调一致,历时数月致力于 6.1 的发布,现在终于大功告成。...

红薯
2012/02/24
1K
4
liferay整理(留着备用)

Liferay 6.1开发学习(二十):Dynamic Query高级查询 在上一篇的博客《Liferay 6.1开发学习(十九):Liferay ServiceBuilder之自定义查询》之中介绍了一部分简单的Dynamic Query方法,可以...

IT小香猪
2014/07/17
0
5
初学liferay,怎么用liferay整合第三方应用程序,请高手给点建议?

本人大学实习生,刚进公司实习,刚接触liferay,请教高手们怎么用liferay去整合第三方应用程序,给点学习建议,谢谢。目前我用的是liferay版本是6.1的,是在win7系统上安装部署测试的,目的是...

jobbiss
2013/03/23
1K
2
在Tomcat 6.0.33上安装Liferay 6.1.0 CE的步骤

一、准备工作 下载tomcat 6.0.33, liferay 6.1.0 CE的war文件包、源码包、SQL脚本包以及附加依赖包。本例子采用Mysql数据库作为存储引擎,故请安装Mysql数据库并确保mysql服务已经启动。由于...

mj4738
2012/05/27
0
0
Liferay标签(一):liferay-ui:search-container(1)

Liferay自带的标签有很多,现在就来说说用的比较频繁的标签--liferay-ui:search-container,在页面上使用时,很方便,像下面这样定义就行: <certusnet-ui:search-containersearchContainer=...

沉默的子明
2013/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
49分钟前
7
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
今天
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
今天
4
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
今天
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部