2011-03-02 18 views
30

Trabajo en un proyecto Java de código abierto, y tenemos muchos archivos de propiedades de recursos que contienen recursos de mensajes localizables. Esos archivos son traducidos por voluntarios a más de 20 idiomas, y soy un desarrollador que edita principalmente el código.Buen editor de archivos de propiedades Java

En Java, los archivos de recursos para diferentes configuraciones regionales se agrupan por una convención de nomenclatura. Por ejemplo, si el recurso predeterminado (normalmente inglés) es "foo.properties", el recurso japonés está en "foo_ja.properties", el francés es "foo_fr.properties", etc. Por el bien de esta pregunta, llamemos a este grupo un "grupo de recursos".

Ahora, cada cierto tiempo, necesito refactorizar esos archivos de recursos. Además, necesito la herramienta para soportar los conceptos básicos de los archivos de propiedades. Con todo, mi lista de requisitos son algo así como:

  1. Cambiar el nombre de la propiedad nombre de la clave, y quiero una herramienta para cambiar el nombre todas las llaves de todos los archivos en el mismo grupo, sin mí ir de forma individual a través de ellos.
  2. Mueva una propiedad de un grupo de recursos a otro, y quiero una herramienta para cada archivo de recursos en el grupo.
  3. En Java, los archivos de recursos están en la codificación ISO-8859-1 y no en la codificación predeterminada de la plataforma.
  4. No quiero ver \ uXXXX al editar/examinar archivos de propiedades, pero sí espero que la herramienta los conserve.
  5. No quiero que la herramienta reordene el orden de las propiedades en el archivo de recursos, ni se meta con los comentarios. Espero que la herramienta los preserve.
  6. Quiero que la herramienta maneje otros detalles de sintaxis de los archivos de recursos, como el texto de varias líneas.

Lamentablemente, no encuentro ninguna buena herramienta que cumpla con estos criterios. Principalmente soy un usuario de IntelliJ IDEA, pero no es el número 2 ni el 3. El editor de archivos de propiedades incorporado de Eclipse es aún peor, y AFAICT no lo hace # 1, # 2, # 4. De hecho, carece de la vista que corta los archivos de recursos en el mismo grupo. NetBeans es similarmente primitivo. Lo mismo ocurre con NetBeans, aunque sí con el n. ° 4.

¿Alguien sabe de una buena herramienta que se ajuste a la ley?

+1

+1 por la gran pregunta y por ser Kohsuke (¡Me encanta este lugar, estrellas de rock en todas partes!) –

+0

(Como probablemente sabrá) en Java6 puede usar archivos de propiedades en otras codificaciones. El próximo Eclipse también lo admite. Entonces puede tener sus propiedades en UTF-8 y hacer que se muestren bien en Eclipse. –

+0

Sean: ¡Gracias! Peter: ¿Quieres decir Properties.load (Reader)? Pero la gente debería usar ResourceBundle para cargar recursos específicos de la configuración regional, y no veo nada allí para especificar la codificación (ni veo la necesidad). –

Respuesta

2

En este punto, supongo que la respuesta es que no hay un buen editor de archivos de propiedades en Java que coincida con los criterios enumerados. prbeditor sonaba prometedor pero se ha ido, IntelliJ IDEA se ve bien en el papel pero está sufriendo un error crítico, y luego los plugins de Eclipse son algo primitivos.

+0

IDEA es el mejor cajero automático. Sin embargo, no se puede encontrar una buena independiente. ¿Has encontrado uno? – Delfic

5

Utilicé el complemento para eclipse. Creo que éste: http://sourceforge.net/projects/eclipse-rbe/

Está bien, permite añadir y cambiar el nombre de propiedades, muestra advertencias si la propiedad no está traducido a todos los idiomas soportados etc.

Su desventaja es que siempre utiliza notación `\ uXXXX' para caracteres Unicode. Por lo tanto, debe usar este complemento para leer los archivos creados. Hace la búsqueda muy difícil. Y no sé si es posible configurarlo para crear paquetes codificados en UTF-8.

+0

Gracias por el puntero. Necesito probar esto. La captura de pantalla indica que está en la dirección correcta, pero no está claro si admite cualquier refactorización. –

+1

Puede configurar el plugin eclipse-rbe NO para convertir valores Unicode. Mire en: "Windows/Preferences/ResourceBundle Editor/Formating/Convertir valores unicode a \ uXXXX." También tenga en cuenta que el plugin está ahora en github y tiene un nuevo sitio: http://essiembre.github.io/eclipse-rbe/ –

2

Properties Editor (plugin de Eclipse) hace # 4 para seguro. Nunca lo necesité para nada más.

+0

Gracias, pero este no parece apoyar ninguna refactorización que atraviese todo el les en un grupo de recursos. O lo hace? Todavía parece mucho peor que IntelliJ. –

2

Resulta que IntelliJ debería poder hacer # 3 (excepto que no funciona en la versión actual due to a bug). Así que eso me deja simplemente con # 2.

Por el momento (y para el problema en cuestión) que decidió que la elaboración de un guión maravilloso es más rápido que probar estas herramientas:

#!/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') 
    } 
} 

Este script es un truco y no entiende la sintaxis del archivo de propiedad, por lo que no es terriblemente confiable. Pero VCS puede compensar esa desventaja al permitirle ver exactamente lo que hizo el guión.

Todavía estoy esperando encontrar una buena herramienta para que sea más productivo en una carrera más larga. ¡Por favor, sigan respondiendo!

+0

bueno, sí, quería agregar ese número 3 ahora mismo ... –

2

He estado usando prbeditor desde hace algún tiempo y creo que puede manejar los requisitos que tiene:

  1. se puede hacer mediante el cambio de la columna de clave en la vista de tabla.
  2. Se puede hacer copiando la columna clave que realmente copiará la clave y todos los valores en los diferentes idiomas y luego pegarla en una vista de tabla diferente, que insertará la clave y los valores en las diferentes columnas de la tabla .
  3. Los caracteres se pueden escapar usando \ uXXXX, no estoy seguro de si lo hace solo para caracteres que no sean ISO-8591-1 o incluso para todos los caracteres que no sean US-ASCII.
  4. \ uXXXX se decodifica para el editor y se vuelve a escribir en el archivo como \ uXXXX.
  5. El orden de las propiedades no cambia, no estoy seguro de cómo maneja los comentarios.
  6. Puede ingresar texto multilínea y escribirá correctamente en el archivo de propiedades.
+0

Gracias. Según su descripción, parece que es la herramienta correcta. Conozco un poco sobre los cambios de java.net, y me temo que el proyecto se borra. Java.net optó por un enfoque de migración bastante aterrador en el que los proyectos debían habilitarse o, de lo contrario, todo su trabajo duro se elimina permanentemente. Sospecho que prbeditor no optó por participar. –

0

la salida j18n http://j18n.nomagicsoftware.com Se hace lo que quiere e introduce la herencia de recursos y también proporciona control de versiones para todas las ediciones

3

Salida Multiproperties, si todavía está buscando un plugin como: see here

Sólo # 6 requisito falta.

+0

bueno, y aún activamente desarrollado. Solo desearía tener mejores características de navegación de propiedad a fuente, pero aún no lo he probado por completo. – Gregor

1

Esto es viejo pero es una buena herramienta.

Editor de JRC: http://zaval.org/products/jrc-editor/ hace todo lo que hace excepto excepto volver a ordenar las claves (ordenarlas) que pueden no ser lo que quiere. (Puede ser que esta característica se puede desactivar)

Aunque puede que no sea bueno volver a pedir las llaves, me pareció muy útil cuando mucha gente trabaja en un paquete de recursos. Las herramientas de control de origen, como SVN, tienen una mejor oportunidad de combinar los paquetes de recursos ordenados.

Cuestiones relacionadas