枫林在线论坛精华区>>程序设计
[340913] 主题: Eclipse零起步系列讲座(十一)
作者: little (渺小·Happy^_^)
标题: Eclipse零起步系列讲座(十一)[转载]
来自: 192.168.*.*
发贴时间: 2005年04月25日 11:27:11
长度: 4169字

Eclipse零起步系列讲座 (十一)

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

(前言)
PDE除了可以开发plugin, 还可以开发fragment, feature 和 site.

(正文)

[fragment 简介]

fragment不是一个完整的plugin, 而是plugin功能的扩展. 对于一个frag
ment来说, 它
都有一个对应的plugin, 如果

plugin不安装运行, 那fragment就算装了也不会起作用.

一般来说, fragment 最广泛的应用是 nls (native language support).
 基本上你看一
下wsad里面的plugins, 都有一

个对应的一个fragment, 名字是对应的plugin后加.nl1来表示. 这个可以
看一下零起步
九, 你可以从中了解更多的关于

plugin 在 i18n (internationalization) 方面的应用.

那下面我们来介绍一下,如何开发一个helloworld的fragment, 来实现hel
loworld的i18n
应用.

[PDE 开发 fragment]

我们先用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 str
ucture, 按nex
t

在simple fragment content的plug-in id 按browse 选或直接键入
org.eclipse.example.xyz,确定我们这个fragment

所扩展的plug-in. 然后finish. 这时, 一个fragment已经生成好了.

hello world中, 大家应该还记得它的作用就是resource透视图中有一个s
ample
menu->sample action, 点击这个菜单后

会有弹出一个对话框, "hello, eclipse world."

那如果在不同的系统中,我们要让这段提示输出不同语言的helloworld, 比
如我想在用中
文系统中显示"你好,eclipse世

界!" 的话, 那可以用fragment来实现. 使你的plug-in成为一个多语
言版本的plug-in.

[修改plug-in为符合i18n的代码]

我们打开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, Eclip
se 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&q
uot;), //$NON-NLS-1$
            Messages.getString("SampleAction.DIALOG_CONTENT
"));
//$NON-NLS-1$
    }
================================================

同时, 有多了一个messages.java 和message.properties
messages.java是一个resouce bundle的控制类, 而数据都存在message.p
roperties里面


我们看一下message.properties

SampleAction.DIALOG_TITLE=Xyz Plug-in
SampleAction.DIALOG_CONTENT=Hello, Eclipse world

这里等于将这些需要翻译的字符串都外部化出来了

[编写 fragment]

此时,我们要对fragment的事就很简单了.

在fragment对应的src目录下新建一个包 org.eclipse.example.xyz.acti
ons, 在这个包
下面新建一个message_zh.

properties的文件,然后填入:

SampleAction.DIALOG_TITLE=Xyz u63d2u4ef6
SampleAction.DIALOG_CONTENT=u4f60u597d,eclipseu4e16u754c!

你会发觉我填进去的都是uxxxx, 你可以利用jdk下面的native2ascii来转
换, 详见零起
步九

然后,我们就可以测试我们的plug-in和fragment了

[测试不同语言版本的plug-in]

点击run...-> new workbench configuration

我们可以看见这个配置的arguments这个页面中的program arguments这一
项的有四个参
数(window下):

-os win32 -ws win32 -arch x86 -nl zh_CN

-nl这个参数就是用来确定启动的这个测试平台的语言环境的, 如果-nl等
于zh_CN(中文)
,那启动后点击菜单按钮, 你就会发现弹出一个标题为"Xyz 插件&qu
ot;,内容为"你好,Eclipse
 世界!"的对话框

如果你的-nl的值是 en_US, 那出来的结果就是"Hello, Eclipse Wo
rld"


当然, 如果你想开发其他语言版本的话, 可以新建message_xx.propertie
s, xx代表那个
语言的缩写.

如果你启动的-nl的值是 de_DE(德国), 但你没有对应语言的properties的
话, 就会自动
调用默认的message.properties


ok, 今天就讲了fragment和fragment在i18n的实际应用, 大家好好消化把



========== * * * * * ==========
返回