Eclipse零起步系列讲座 (十一)
===========================================
(前言)
PDE除了可以开发plugin, 还可以开发fragment, feature 和 site.
(正文)
fragment不是一个完整的plugin, 而是plugin功能的扩展. 对于一个fragment来说, 它
都有一个对应的plugin, 如果
plugin不安装运行, 那fragment就算装了也不会起作用.
一般来说, fragment 最广泛的应用是 nls (native language support). 基本上你看一
下wsad里面的plugins, 都有一
个对应的一个fragment, 名字是对应的plugin后加.nl1来表示. 这个可以看一下零起步
九, 你可以从中了解更多的关于
plugin 在 i18n (internationalization) 方面的应用.
那下面我们来介绍一下,如何开发一个helloworld的fragment, 来实现helloworld的i18n
应用.
我们先用PDE新建一个hello world的例子, 详见零起步九, 我们假设这个项目的名字叫
做org.eclipse.example.xyz
然后我们再用pde新建一个fragment, 具体如下:
file->new -> plug-in development -> fragment project
fragment project 的名字叫做 org.eclipse.example.xyz.nls, 按next
然后使用code generation wizard来创建插件, 选default fragment structure, 按nex
t
在simple fragment content的plug-in id 按browse 选或直接键入
org.eclipse.example.xyz,确定我们这个fragment
所扩展的plug-in. 然后finish. 这时, 一个fragment已经生成好了.
hello world中, 大家应该还记得它的作用就是resource透视图中有一个sample
menu->sample action, 点击这个菜单后
会有弹出一个对话框, "hello, eclipse world."
那如果在不同的系统中,我们要让这段提示输出不同语言的helloworld, 比如我想在用中
文系统中显示"你好,eclipse世
界!" 的话, 那可以用fragment来实现. 使你的plug-in成为一个多语言版本的plug-in.
我们打开org.eclipse.example.xyz.actions.SampleAction.java,
=================================================
public void run(IAction action) {
MessageDialog.openInformation(
window.getShell(),
"Xyz Plug-in",
"Hello, Eclipse world");
}
=================================================
这段代码是不符合i18n规则的
我们利用jdt的一个功能, menu->source->externalize string
设"Xyz Plug-in"的key为DIALOG_TITLE, "Hello, Eclipse world"的key为DIALOG_CONTE
NT
然后设properties file的name为message.properties, 这样next之后, 这些string就都
抽出来了
我们会发现sampleaction.java的代码变成了
================================================
public void run(IAction action) {
MessageDialog.openInformation(
window.getShell(),
Messages.getString("SampleAction.DIALOG_TITLE"), //$NON-NLS-1$
Messages.getString("SampleAction.DIALOG_CONTENT"));
//$NON-NLS-1$
}
================================================
同时, 有多了一个messages.java 和message.properties
messages.java是一个resouce bundle的控制类, 而数据都存在message.properties里面
我们看一下message.properties
SampleAction.DIALOG_TITLE=Xyz Plug-in
SampleAction.DIALOG_CONTENT=Hello, Eclipse world
这里等于将这些需要翻译的字符串都外部化出来了
此时,我们要对fragment的事就很简单了.
在fragment对应的src目录下新建一个包 org.eclipse.example.xyz.actions, 在这个包
下面新建一个message_zh.
properties的文件,然后填入:
SampleAction.DIALOG_TITLE=Xyz u63d2u4ef6
SampleAction.DIALOG_CONTENT=u4f60u597d,eclipseu4e16u754c!
你会发觉我填进去的都是uxxxx, 你可以利用jdk下面的native2ascii来转换, 详见零起
步九
然后,我们就可以测试我们的plug-in和fragment了
点击run...-> new workbench configuration
我们可以看见这个配置的arguments这个页面中的program arguments这一项的有四个参
数(window下):
-os win32 -ws win32 -arch x86 -nl zh_CN
-nl这个参数就是用来确定启动的这个测试平台的语言环境的, 如果-nl等于zh_CN(中文)
,那启动后点击菜单按钮, 你就会发现弹出一个标题为"Xyz 插件",内容为"你好,Eclipse
世界!"的对话框
如果你的-nl的值是 en_US, 那出来的结果就是"Hello, Eclipse World"
当然, 如果你想开发其他语言版本的话, 可以新建message_xx.properties, xx代表那个
语言的缩写.
如果你启动的-nl的值是 de_DE(德国), 但你没有对应语言的properties的话, 就会自动
调用默认的message.properties
ok, 今天就讲了fragment和fragment在i18n的实际应用, 大家好好消化把
|