良好的 Java 属性文件编辑器

Posted

技术标签:

【中文标题】良好的 Java 属性文件编辑器【英文标题】:Good Java property files editor 【发布时间】:2011-03-02 08:08:57 【问题描述】:

我从事一个开源 Java 项目,我们有很多资源属性文件,其中包含可本地化的消息资源。这些文件由志愿者翻译成 20 多种语言,我是一名主要编辑代码的开发人员。

在 Java 中,不同语言环境的资源文件通过命名约定组合在一起。例如,如果默认(通常是英文)资源是“foo.properties”,日文资源在“foo_ja.properties”,法文资源是“foo_fr.properties”等。为了这个问题,我们称这个组一个“资源组”。

现在,我经常需要重构这些资源文件。此外,我需要该工具来支持属性文件的基础知识。总而言之,我的要求清单如下:

    重命名属性键名,我想要一个工具来重命名同一组中所有文件中的所有键,而无需我单独进行。 将属性从一个资源组移动到另一个,我想要一个工具来为组中的每个资源文件执行此操作。 在 Java 中,资源文件采用 ISO-8859-1 编码,而不是平台默认编码。 我不想在编辑/浏览属性文件时看到 \uXXXX,但我确实希望该工具能够保留它们。 我不希望该工具重新排列资源文件中的属性顺序,也不希望弄乱 cmets。我希望该工具能够保护它们。 我希望该工具能够处理资源文件的其他语法细节,例如多行文本。

很遗憾,我没有找到任何符合这些标准的好工具。我主要是 IntelliJ IDEA 用户,但它不执行 #2 和 #3。 Eclipse 内置的属性文件编辑器更糟糕,而且 AFAICT 它不执行#1、#2、#4。事实上,它缺乏跨同一组中的资源文件的视图。 NetBeans 同样是原始的。 NetBeans 也是如此,尽管它确实是 #4。

有谁知道符合要求的好工具吗?

【问题讨论】:

+1 为伟大的问题和作为 Kohsuke(我喜欢这个地方,到处都是摇滚明星!) (您可能知道)在 Java6 中,您可以使用其他编码的属性文件。即将推出的 Eclipse 也支持这一点。因此,您可以在 UTF-8 中使用您的属性,并在 Eclipse 中很好地显示它们。 肖恩:谢谢!彼得:你是说 Properties.load(Reader) 吗?但是人们应该使用 ResourceBundle 来加载特定于语言环境的资源,我没有看到任何指定编码的东西(我也看不到需要它。) 啊,你说得对。我有自定义资源包类,它使用 Properties.load(Reader) 方法加载属性:-( 将语言文件保存在 utf-8 中对我们来说效果更好。 彼得:+1。我很好奇为什么 ResourceBundle 的第一个版本选择了 iso-8859-1 作为资源文件编码。 UTF-8 会更明智。 【参考方案1】:

我使用了 Eclipse 插件。我觉得这个:http://sourceforge.net/projects/eclipse-rbe/

没关系,允许添加和重命名属性,如果属性未翻译成所有支持的语言等显示警告。

它的缺点是它总是使用 `\uXXXX' 表示 unicode 字符。因此,您必须使用此插件来读取创建的文件。它使搜索变得非常困难。而且我不知道是否可以将其配置为创建 UTF-8 编码的捆绑包。

【讨论】:

感谢您的指点。我需要试试这个。屏幕截图表明这是在正确的方向,但不清楚它是否支持任何重构。 您可以配置 eclipse-rbe 插件不转换 unicode 值。查看:“Windows/Preferences/ResourceBundle Editor/Formating/Convert unicode values to \uXXXX。”另请注意,该插件现在在 github 上并且有一个新站点:essiembre.github.io/eclipse-rbe【参考方案2】:

看看在线工具POEditorhttps://poeditor.com。它基于项目。

【讨论】:

【参考方案3】:

查看Multiproperties,如果你还在寻找这样的插件:see here

仅缺少 #6 要求。

【讨论】:

好一个,并且仍在积极开发中。只希望它有更好的从属性到源的导航功能,但我还没有完全尝试过。【参考方案4】:

Properties Editor(Eclipse 插件)肯定会执行 #4。其他任何事情都不需要它。

【讨论】:

谢谢,但这个似乎不支持任何跨越资源组中所有文件的重构。或者是吗?它似乎仍然比 IntelliJ 差很多。【参考方案5】:

事实证明 IntelliJ 应该能够做到 #3(除非它在当前版本中不起作用due to a bug。)所以我只剩下 #2。

目前(以及手头的问题)我决定将 Groovy 脚本放在一起比尝试这些工具要快:

#!/usr/bin/env groovy
// base name of the resource group to move a property from
File base = new File(args[0])
// key name of the property to move
String from = args[1]
// base name of the resource group to move the property to
File dst  = new File(args[2])
// name of the new property after move
String to = args[3]

/*
TODO:
  support multi-line
  insert the text in a better place, in the sort order
*/

base.parentFile.eachFileMatch(~"$base.name(_.*)?\\.properties")  f ->
  def l = f.name.substring(base.name.length())
  println "$f"

  def tmp = new File(f.path+".tmp")

  // delete this property from the source, and remember it
  def dropped = null;
  tmp.withWriter("iso-8859-1")  w ->
    f.filterLine(w,"iso-8859-1")  line ->
      if (line.startsWith(from)) 
        dropped = line;
        return false;
       else 
        return true;
      
    
  
  tmp.renameTo(f)

  if (dropped==null)    return; // nothing to copy to

  // append
  f = new File(dst.path+l)
  tmp = new File(f.path+".tmp")
  println "-> $f"

  existing = f.bytes
  needsLF = (existing[existing.length-1]!='\n')

  f.withWriterAppend("iso-8859-1")  w ->
    if (needsLF) w.write('\n')
    w.write(to+dropped.substring(from.length()))
    w.write('\n')
  

这个脚本是一个 hack,不理解属性文件的语法,所以它不是很可靠。但是 VCS 可以通过让您准确查看脚本的作用来弥补这一缺点。

我仍然希望找到一个好的工具,以便从长远来看更高效。所以请继续提供答案!

【讨论】:

【参考方案6】:

在这一点上,我想答案是 Java 中没有符合所列条件的好的属性文件编辑器。 prbeditor 听起来很有希望,但它已经消失了,IntelliJ IDEA 在纸面上看起来不错,但遇到了一个严重的错误,然后 Eclipse 插件都有些原始。

【讨论】:

IDEA 是最好的。不过,找不到好的单机。找到了吗?【参考方案7】:

我已经使用prbeditor 有一段时间了,我认为它可以满足您的要求:

    可以通过更改表格视图中的键列来完成。 可以通过复制键列来实现. 可以使用 \uXXXX 对字符进行转义,但不确定它是否仅适用于非 ISO-8591-1 字符,甚至适用于所有非 US-ASCII 字符。 \uXXXX 为编辑器解码并作为 \uXXXX 写回文件。 属性的顺序没有改变,不确定它如何处理 cmets。 您可以输入多行文本,它会正确写入属性文件。

【讨论】:

谢谢。根据您的描述,这听起来像是正确的工具。碰巧知道一点java.net的变化,怕是项目被删了。 Java.net 决定采用一些非常可怕的迁移方法,项目必须选择加入,否则他们所有的努力都将被永久删除。我怀疑prbeditor 没有选择加入。【参考方案8】:

这是旧的但是是一个很好的工具。

JRC-Editor:http://zaval.org/products/jrc-editor/ 它可以完成所有工作,除了重新排序可能不是您想要的键(对它们进行排序)。 (可能这个功能可以关闭)

虽然重新排序密钥可能不好,但我发现当很多人在一个资源包上工作时它非常有用。源代码控制工具,如 SVN,有更好的机会合并已排序的资源包。

【讨论】:

【参考方案9】:

查看 j18n http://j18n.nomagicsoftware.com 它做你想做的事并引入资源继承,还为所有编辑提供版本控制

【讨论】:

以上是关于良好的 Java 属性文件编辑器的主要内容,如果未能解决你的问题,请参考以下文章

jsp怎么获取spring配置文件properties中的信息

Spring属性编辑器详解

SpringIOC自定义属性编辑器PropertyEditor

spring 学习自定义属性编辑器

Spring 属性编辑器的问题

Eclipse属性文件编辑器---Properties Editor