利用EclipseNLS来实现插件的多语.doc

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用Eclipse NLS来实现插件的多语 NLS是Eclipse中负责实现多语的一个类,利用这个类来实现插件的多语只需要写一个Message类来继承NLS类,然后利用NLS的方法去配置文件中寻找参数对应的值进行绑定。 例如: 在Message类中指定一个BUNDLE_NAME作为key-value对所在文件的路径信息(注释中的$NON-NLS-1$是告诉编译器该行代码的第一个String类型的变量是一个tag或者keyword,不需要被本地化)。 例如BUNDLE_NAME = “example.messages”,则NLS的initializeMessages方法会将类Message中的String成员key_1,key_2与BUNDLE_NAME的文件中写的key-value对中的key_1, key_2进行绑定。 因此message.properties应保存key_1 key_2具体的值: ?? NLS中载入资源的基本思想是通过对资源文件的顺序载入,保证优先级高的资源优先被载入到Message类中。按当前语种(如zh_CN会尝试载入_zh和_zh_CN资源)优先、默认资源(即不添加任何语种的资源文件)最后的原则,顺序载入资源文件。 ?????? 为了保证Meesage中的字段只被设一次值,NLS构造了Map属性名,字段结构,初始化时置入所有FieldName, Field,当Properties载入时,将使用一个已赋值的约定标记,记为Flag与原值交换,若交换出的是字段(初始值),那么利用反射进行首次设值;若交换出的是NULL则表示Messages类中可能缺失了某多语资源的定义,不做处理;若交换出的是Flag,表示该字段已经赋值,不做处理。 ?????? 最后将所有非Flag的属性名进行一次补偿设置,将值设为NLS资源缺失的提示文本。 综上所述,利用NLS实现多语的步骤: 建立一个Message.class,将message文件的路径写到BUNDLE_NAME中(messages.properties or messages_CN.properties); 将需要多语的变量作为public static的String写在Message.class中; 调用NLS.initializeMessages方法绑定该类与messages.properties; 将多语变量的值写到message中(message.properties or message_CN.properties)。 还可以使用Eclipse将写好的Java类文件进行字符串的提取,动态生成Message类及.properties文件,步骤如下所示: ?????? 1.在项目、包或者源代码文件上点击右键,使用Source/Externalize Strings...进行字符串的提取 2.此时弹出一个可提取资源的列表,选择需要提取的类文件 ?????? 3.其中Enter common prefix for generated keys(optional)中的内容是多语资源Key的前缀,不建议修改;下方列出的key值对应了资源文件的key值,请修改为更易读的名称;Acessor class指定访问器类和资源文件,可以通过configure...按钮进行编辑 ?????? 4.最后可以预览代码的变更,点击Finish完成 ?????? 5.添加多语的.properties文件,并键入对应的key值 如果想要实现在值中插入数据:比如key_1=Hi **, this is key1! 而**是程序中动态载入的某个数据,则需要在.properties文件中以{index}的形式写入。例如: 然后在Message.class文件中调用NLS的String bind(String message, Object binding)方法: 该方法负责将String.valueOf(binding)插入到message中。 注:如果需要插入两个变量则调用NLS.bind(String message, Object binding1, Object binding2);如果需要插入多个变量则调用NLS.bind(String message, Object[] bindings)。

文档评论(0)

yuxiufeng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档