原文链接:http://wiki.hudson-ci.org/display/HUDSON/Internationalization
指定语言翻译:
1. 开发者要须知
Hudson的i18n支持的一些相关内容是开发者需要知道的:
-
通过
Messages.properties
生成类型安全的Message类 -
在jelly文件中标记Message
-
创建帮助提示HTML文件
1.1. 生成Message类
Hudson在安全的方式下,用localizer通过message资源文件生成Message类。对于每个src/main/resources/**/Messages.properties
都对应生成一个Message类。进入localizer主页可看到生成类的结构。如果你的IDE没有找到生成的类,则需要手工把target/generated-sources/localizer
目录加入源码目录中
代码无论在什么位置返回要显示的字符串(比如使用Descriptor.getDisplayName()
),都是用Message类去获取本地化信息。在运行时,会动态的选择本地化信息。下面是一个典型的处理流程:
-
本地化你的信息
-
把这些信息放置在
Messages.propertees
文件中。你可以为每个包内都放置这个文件,也可以在整个module/plugin
内放置一个文件。 -
运行
mvn compile
重新生成Messages.java
-
更新你的代码来使用新发生的Messages。
提示
建议查看一下核心代码可能会帮助你理解这个过程。
1.2. 在jelly文件中标记Message
jelly文件在src/main/resources
目录下,用来包含需要被本地化的信息,并且需要被标记。举个最简单的例子,假设你的Jelly文件包含下面内容:
那么你需要更改成如下的样子
${%...}
标记说明这是要在本地化文件里寻找的信息,如果没有找到就还是输出“Output”。
来看看需要参数化的本地化例子,假设你有一个Jelly文件foo.jelly
像下面的内容:
在这个例子中,你首先要编写默认的本地化资源文件
foo.properties
:
然后编辑foo.jelly
:
如果你有多个参数就用逗号分隔(就像函数调用),在资源属性文件中你可以通过{0},{1},...
来对应。请看消息格式化类习惯用法
最后说明一下消息在表达式中的用法,假如你有个Jelly文件:
标记表达式中的两个字符串:
1.3. 创建帮助提示的HTML文件
在jelly文件中可以指定一个实体文件,用来描述相关的帮助提示,当用户点击帮助图标时显示这些实体内容。
然后创建helt.html
(英语),help_xx.html
为其它语言。
2. 翻译者须知
Hudson项目欢迎翻译捐献者。如果你能够帮助我们,请发邮件到dev@hudson.dev.java.net
。我们会给你提交权限。本章说说翻译都需要做什么。
重要
记住!资源属性文件必须是ISO 8859-1
编码。这个是必须的!!!
2.1. 翻译工具
-
Translation Tool:命令行翻译工具,能够添加翻译信息,还有更多其它功能。
-
Translation Assistance Plugin:在Hudson加入一个翻译对话框,能够发送翻译信息。
-
Glottr是一款强大的开发工具帮助你进行本地化,虽然现在还没有一个稳定版本,但是你可以向Hudson开发者列表发送邮件来获取
bate
版。
2.2. 翻译Messages.properties
开发者把本地化后的信息放在Messages.properties
中,这里要遵守一些翻译习惯,Messages_jp.properties
对于新手来说是一个很好的例子。
有时只看Messages.properties
一个文件是不能获得足够的本地化信息,对此,要鼓励开发者使用localizer生成类型安全的Message类来访问本地化信息。要找到信息真实的使用位置,需要使用你的IDE查找出所有的本地化调用方法。
2.3. 翻译Jelly内的信息引用
另一个需要翻译的信息在Jelly文件里,它们在src/main/resources/**.jelly
。要本地化它们,你首先要运行Maven命令来发生本地化资源文件框架。
$ cd hudson/main/core (or hudson/plugins/xyz)
$ mvn stapler:i18n -Dlocale=fr
这个命令会在src/main/resources
目录生成一批*_fr.properties
文件,文件内部是空值。如果已经存在了这个文件,它会把缺少的key添加到已有文件中。
下面你需要翻译每个属性资源文件,你不用翻译整个文件,如果某些值是空,它会使用默认的本地化信息。
提示
Quick locale switcher Firefox插件可以方便的让你在各种语言之间切换。
2.4. 翻译静态HTML资源
一个单独的HTML文件经常被用来显示Hudson的帮助信息。这些资源需要被翻译,使用不同的本地化扩展名来放置本地化编码。例如,中文版本的abc.html
应该命名为abc_zh_CN.html
,英国版本的应该命名为abc_en_GB.html
。这些文件必须是UTF-8
编码。
2.5. 推荐更新
一旦你更新了一些内容,你就可以提交。翻译者会考虑更新本地化属性文件的相关内容。如果你是一个新手,第一次提交使用小范围的提交是个好主意,你可以经常发布一个patch确保操作安全。
当开始翻译,尽量检查是否有其它人在编辑同一个本地化文件,使用CVS历史可以查看已存在的本地化文件以及谁在使用它,尝试联系他以避免不必要的冲突。
3. IntelliJ IDEA的Stapler插件
重构已有的i18n
是比较痛苦的,所以开发IntelliJ IDEA的Stapler插件就是用来解决这个问题(JetBrains为Hudson项目提供了免费许可,所以Hudson捐献者可以免费得到使用许可--如果你需要请联系Kohsuke)。
安装后会在Refactor菜单项里出现下图所示的子菜单,强烈推荐为此功能设置一个快捷键,我设置为Ctrl+Alt+I。
图 1. Stapler插件
要使用这个功能,选择要国际化的信息,然后用快捷键触发重构命令,插件会询问你提供一个信息属性名,所以挑选一个名字:
图 2. 指定一个信息属性名
IDEA会把信息放置在资源文件中,然后调整代码访问资源信息。注意IDEA会提示一个错误,直到你运行mvn compile
发生了Messages类后才会消失。