好的Java属性文件编辑器
我从事一个开源Java项目,我们有很多资源属性文件,其中包含可本地化的消息资源。这些文件由志愿者翻译成20多种语言,我是一名主要编辑代码的开发人员 在Java中,不同地区的资源文件按照命名约定分组在一起。例如,如果默认(通常为英语)资源是“foo.properties”,日语资源是“foo_ja.properties”,法语资源是“foo_fr.properties”,等等。为了解决这个问题,我们将这个组称为“资源组” 现在,我经常需要重构这些资源文件。此外,我需要该工具来支持属性文件的基础知识。总而言之,我的需求清单如下:好的Java属性文件编辑器,java,ide,resources,properties,editor,Java,Ide,Resources,Properties,Editor,我从事一个开源Java项目,我们有很多资源属性文件,其中包含可本地化的消息资源。这些文件由志愿者翻译成20多种语言,我是一名主要编辑代码的开发人员 在Java中,不同地区的资源文件按照命名约定分组在一起。例如,如果默认(通常为英语)资源是“foo.properties”,日语资源是“foo_ja.properties”,法语资源是“foo_fr.properties”,等等。为了解决这个问题,我们将这个组称为“资源组” 现在,我经常需要重构这些资源文件。此外,我需要该工具来支持属性文件的基础知识
有谁知道一个好的工具适合这个要求吗?我使用了eclipse插件。我觉得这个, 可以,允许添加和重命名属性,如果属性未翻译为所有支持的语言,则显示警告等
它的缺点是它总是对unicode字符使用“\uxxx”表示法。因此,您必须使用此插件读取创建的文件。这使得搜索非常困难。我不知道是否可以将其配置为创建UTF-8编码包 (Eclipse插件)确实做到了4。其他任何事情都不需要它。事实证明IntelliJ应该能够做到#3(除非它在当前版本中不起作用)。因此,我只需要#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')
}
}
此脚本是一种黑客行为,不理解属性文件语法,因此可靠性不高。但风投可以通过让你准确地看到脚本的作用来弥补这一缺点
我仍然希望能找到一个好的工具,这样从长远来看我会更有效率。所以请继续回答 我已经使用了一段时间,我认为它可以满足您的要求:
在这一点上,我想答案是Java中没有一个好的属性文件编辑器符合列出的标准。prbeditor听起来很有希望,但它已经不存在了,IntelliJ IDEA在纸上看起来不错,但遇到了一个严重的错误,然后Eclipse插件都有些原始。查看j18n 它可以满足您的需要,并引入资源继承,还为所有编辑提供版本控制。如果您仍在寻找此类插件,请签出:
只缺少#6要求。查看在线工具POEditor。它基于项目。这是一个古老的工具,但却是一个很好的工具 JRC编辑器:除了重新排序键(对它们进行排序)之外,它可以帮你做所有的事情,这可能不是你想要的。(可能是此功能可以关闭)
虽然重新排序密钥可能不太好,但我发现当许多人在一个资源包上工作时,它非常有用。源代码管理工具,如SVN,有更好的机会合并已排序的资源包。+1对于这个伟大的问题和Kohsuke(我喜欢这个地方,到处都是摇滚明星!)(您可能知道)在Java6中,您可以在其他编码中使用属性文件。即将到来的Eclipse也支持这一点。所以您可以在UTF-8中拥有您的属性,并在Eclipse中很好地显示它们!彼得:你是说属性。加载(读卡器)?但是人们应该使用ResourceBundle来加载特定于语言环境的资源,我看不到有任何东西可以指定编码(我也看不到有必要这样做。)啊,你说得对。我有一个自定义资源包类,它使用properties加载属性。加载(读取器)方法:-(将语言文件保存在utf-8中对我们来说效果更好。Peter:+1。我很好奇为什么ResourceBundle的第一个版本选择iso-8859-1作为资源文件编码。utf-8会更明智。谢谢,但这一版本似乎不支持任何跨资源组中所有文件的重构。或者是吗?它仍然支持看起来比IntelliJ差多了。谢谢你的指点。