枫林在线论坛精华区>>程序设计 |
[340911] 主题: Eclipse零起步系列讲座(九) |
作者: little (渺小·Happy^_^) | ||
标题: Eclipse零起步系列讲座(九)[转载] | ||
来自: 192.168.*.* | ||
发贴时间: 2005年04月25日 11:25:36 | ||
长度: 5395字 | ||
Eclipse零起步系列讲座 (九) =========================================== (前言) 昨天我们已经开发了一个简单的hello world插件了, 但是我们发现是英文 界面的. 而用 过WSAD的朋友都应该知道, WSAD 是可以支持很多国家的语言的. 而且IBM也捐献给eclipse一个translatio n package, 装 了之后就可以有中文界面的 eclipse出来了. 那这个东东,eclipse到底是如何实现的呢? 我们来介绍一 下. (正文) [Eclipse 2.1.x Translation Package] 你可以从eclipse.org 或者 交大的ftp 里 下载到 这个翻译包, 我们把它 下载下来,安 装到eclipse中 然后我们在控制面板的区域设置中,设置自己所在的区域,比如中国(中华人 民共和国) 然后,我们启动一下eclipse,你会发现界面都是中文显示了 如果设置为法国, 那就启动后就都是法文显示了 这个包之所以能够如此神奇, 都是靠了, resource bundle来解决的 其实eclipse还未开源前, wsad的国际化问题(internationalization = i 18n), 一开始 作为IBM内部项目NLS, 进行研究 的. 这个项目的进行, 也逐渐是eclipse的i18n问题的解决方案成形了 [eclipse i18n 解决方案] 我们首先要找到所有表现层的地方,主要有这几块: 1. 文本: plugin.xml , 联机帮助文档 , GUI中的消息,标签 2. 数据格式 3. 地区和称谓 那我们一个个来讲: 比如标签,消息: 昨天那个hello world的例子中,当点击sample action就会显示hello ,ec lipse world! 但是这只是在英文的界面显示, 那别的语言表示怎么办呢? 有办法, 用resource bundle, 怎么个用法, 我们后面会介绍. 然后就是plugin.xml了: <plugin name="Java Development Tools UI" id="org.eclipse.jdt.ui" version="2.1.2" provider-name="Object Technology International, Inc.&q uot; class="org.eclipse.jdt.internal.ui.JavaPlugin"> ; 比如这是jdt的plugin.xml的一个描述, 这是没有i18n的plugin.xml 加入i18n解决方案的plugin.xml是这样的 <plugin name="%plugin.name" id="org.eclipse.jdt.ui" version="2.0.0" provider-name="Object Technology International, Inc.&qu ot; class="org.eclipse.jdt.internal.ui.JavaPlugin"> 然后我们还有在plugin根目录下的文件plugin.properties 包含了以下信息: plugin.name: Java Development Tools UI 我们把要翻译的字符串都拉到properties文件中, 对于不同的语言,只要翻 译这些拉出来 的字符串,并存放到plugin_xx. properties文件中就行了 联机帮助: eclipse的帮助系统也可以进行翻译 数据格式: 包括数字,日期,时间,货币,不同语言国家的这些数据格式都是 不同的 地区称谓: 每个国家都有自己的尊称,度量等等 [eclipse i18n 实现步骤] 1. 把要翻译的字符串装到 .properties文件中去 点菜单里source-> externalize string, 这个方法是外部化字符串, 这个功能会搜寻你 文件中所有常量字符串, 然后在 弹出对话框里,可以设定这些字符串的ID, 之后还有生成resource bundle 类和相应的.pr operties文件名设定的选项, 设 定好之后, 要翻译的字符串就给包进resource bundle中, 数据在xxx.pro perties文件中 , 那倒是只要相应的生成 xxx_de.properties, xxx_zh.properties等文件, 这样程序会根据不同的 语言去读取不 同的properties, 这样显示的消 息也就是多国语言版了. 当然,如果你觉得那个字符串不需要国际化, 那就在这行的后面加一个注释 /* NON-I18N */ 举个例子: public class HelloWorld { static public void main(String[] args) { String a = "yes"; System.out.println("Hello, eclipse world!"); } } 我们外部化后,如果用HelloWorldMessages类封装resource bundle , 数据 文件为 HelloWorld.properties 那就会变成这样: public class HelloWorld { static public void main(String[] args) { String a = "yes"; //$NON-NLS-1$ <-- 这个说 明字符串不需要翻译 System.out.println(HelloWorldMessages.getString(HELLO_W ORLD)); } } HelloWorld.properties: HELLO_WORLD : Hello, eclipse world! 这样我们把要翻译的字符串装properties里面,就可以进行翻译了. 如何用resource bundle做i18n, 有很多文章有介绍, 大家如果不清楚, 可 以上网查阅相 关文章. 2. 翻译字符串 这个靠的就不是技术了, 而是要靠翻译了. 对于不同的翻译来说, 它会根 据properties 来翻译出你想要的本地语言 比如,一个中文翻译 它拿到properties文件后,会翻译成这样 HELLO_WORLD: 你好, eclipse世界! 并且写在helloworld_zh.properties文件中(zh - "中文"的英 文所写) 这还没好, 由于eclipse运行机制问题,我们还要对这个文件转一下 就是把unicode字符转成acsii字符, 比如"你好,eclipse世界!" 应转成 "u4f60u597d,eclips eu4e16u754c!" 转换的工具为native2ascii.exe, 在jdk里面 这样, 一个语言的properties文件才算编辑完成 3. 创建片段 这里要介绍一个新的概念,就是片段, 它不是完整的插件, 而是某个插件的 一部分. 而我 们一般的解决方案是把这些 translation放在片段中, 而主插件负责功能的实现即可. 所以你装了translation 包后,你会发觉你有很多这样的插件,名字叫:xxx .xxx.xxx_1.0. 0 而且肯定还附带一个xxx.xxx.xxx.nl1_1.0.0, 这个就是对应插件的片段, 用来存放翻译 信息. 注意: 创建片段的话,可不是用plugin.xml,而是用fragment.xml 我们看一下org.eclipse.ui这个插件的翻译包片段 <fragment name="Eclipse UI NL Support" id="org.eclipse.ui.nl1" version="2.1.2" plugin-id="org.eclipse.ui" plugin-version="2.1.1"> <runtime> <library name="nl1.jar" /> </runtime> </fragment> 这里定义了这个片段的name和id,已经它所属的plugin-id,还有翻译的信息 运行库nl1.ja r 4. 测试 创建好了片段,就要开始进行测试, 这个测试主要还是语言方面的检测,语 义核对之类的 当然, 说句老实话, 我们今天也只是了解一下这个技术, 做插件的国际化 的技术一点都 不难, 难就难在你要翻译这么多 东西, 而且还要翻译的对,翻译的好,让各国的人都用的爽,这个就难了, 估 计也只有像IB M这样的大公司才有本事做好这 个工作,呵呵. 自己开发么...呵呵, 能弄个中英文版已经很不错了 |
||
========== * * * * * ==========
|
返回 |