好的Java属性文件编辑器

时间:2011-03-02 08:08:57

标签: java ide resources properties editor

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

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

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

  1. 重命名属性键名称,我想要一个工具来重命名同一组中所有文件中的所有键,而不需要单独检查它们。
  2. 将属性从一个资源组移动到另一个资源组,我想要一个工具为该组中的每个资源文件执行此操作。
  3. 在Java中,资源文件采用ISO-8859-1编码,而不是平台默认编码。
  4. 我不想在编辑/浏览属性文件时看到\ uXXXX,但我确实希望该工具能够保留它们。
  5. 我不希望该工具重新排列资源文件中的属性顺序,也不希望该注释混乱。我希望该工具能够保留它们。
  6. 我希望该工具能够处理资源文件的其他语法细节,例如多行文本。
  7. 不幸的是,我找不到符合这些标准的好工具。我主要是IntelliJ IDEA用户,但它不做#2和#3。 Eclipse内置的属性文件编辑器更糟糕,而AFAICT它没有做#1,#2,#4。实际上,它缺少跨越同一组中的资源文件的视图。 NetBeans同样具有原始性。 NetBeans也是如此,尽管它确实是#4。

    有没有人知道一个适合该法案的好工具?

9 个答案:

答案 0 :(得分:5)

我使用插件进行日食。我想这一个:http://sourceforge.net/projects/eclipse-rbe/

没关系,允许添加和重命名属性,如果属性未转换为所有支持的语言等,则会显示警告。

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

答案 1 :(得分:3)

如果您仍在寻找这样的插件,请查看Multipropertiessee here

仅缺少#6要求。

答案 2 :(得分:3)

查看在线工具POEditor https://poeditor.com。它的项目基于。

答案 3 :(得分:2)

Properties Editor(Eclipse插件)肯定会#4。从来没有把它用于其他任何事情。

答案 4 :(得分:2)

原来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')
  }
}

这个脚本是一个黑客,并不理解属性文件的语法,所以它不是非常可靠。但是VCS可以通过让你看到脚本的确切内容来弥补这一缺点。

我仍然希望找到一个好的工具,以便我在更长的时间内提高工作效率。所以请保持答案!

答案 5 :(得分:2)

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

  1. 可以通过更改表格视图中的键列来完成。
  2. 可以通过复制密钥列来完成,该密钥列将实际复制密钥和不同语言中的所有值,然后将其粘贴到不同的表视图中,这将把键和值插入到表视图的不同列中
  3. 可以使用\ uXXXX转义字符,不确定它是仅针对非ISO-8591-1字符,还是针对所有非US-ASCII字符。
  4. \ uXXXX针对编辑器进行解码,并以\ uXXXX形式写回文件。
  5. 不会更改属性的顺序,也不确定它如何处理注释。
  6. 您可以输入多行文字,它会正确写入属性文件。

答案 6 :(得分:2)

此时,我想答案是Java中没有与列出的标准匹配的好的属性文件编辑器。 prbeditor听起来很有希望,但它已经消失了,IntelliJ IDEA在纸面上看起来不错,但却遇到了一个严重的错误,然后Eclipse插件都有些原始。

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:0)

查看j18n http://j18n.nomagicsoftware.com 它可以满足您的需求并引入资源继承,并为所有编辑提供版本控制