Seleccionar página

Obtener claves diferentes en ficheros .properties

por | Abr 9, 2014 | Java

Lo más común en aplicaciones de java es tener los textos externalizados en un fichero .properties (ResourceBundle)

Estos ficheros vienen ISO-8859-1 (lo que da algún quebradero de cabeza) y tienen un sufijo para cada idioma.

Por ejemplo, el idioma por defecto estaría en el fichero messages.properties, el inglés en messages_en.properties, el ruso en messages_ru.properties, el  español en messages_es.properties, etc

Pues bien, normalmente con el tiempo esto acaba siendo un lío y todos los textos acaban desordenados y/o no sabes que mensajes faltan por traducir

Si usas eclipse, recomiendo usar el plugin Eclipse ResourceBundle Editor, que te ayuda a ordenar, organizar y ver visualmente qué mensajes faltan por traducir entre unos ficheros y otros.

Pero como a veces esto no es suficiente, a continuación pongo algunos comandos en linux que nos ayudarán

 

Obtener las claves existentes en un .properties que no estan en otro

sort <FILE_A> | sed s/=[^=]*$// | sed '/^$/d' | sed 's/[ \t]*$//' | sed 's/^[ \t]*//' > /tmp/a
sort <FILE_B> | sed s/=[^=]*$// | sed '/^$/d' | sed 's/[ \t]*$//' | sed 's/^[ \t]*//' > /tmp/b

diff /tmp/a /tmp/b | tr -d '<>,' | sed 's/^[0-9d]*$//' | sed 's/^[ \t]*//' | sed '/^$/d' > /tmp/diff_ab

Con sort indicamos que nos ordene las líneas del archivo alfabéticamente. Con sed le indicamos que elimine desde el símbolo ‘=’ hasta final de línea (para quedarnos con las claves), que elimine las líneas vacías, y elimine los espacios al principio y al final. Luego redirigimos la salida para guardarlo en un fichero temporal

Esto lo hacemos para cada uno de los archivos en los que queramos ver las diferencias. Luego con diff comparamos los archivos y formateamos la salida para sacar solo el text

 

Obtener los textos existentes en un .properties que no estan en otro

Partiendo del archivo /tmp/diff_ab que hemos obtenido en la sección anterior, se lo pasamos a grep para obtener los pares clave / valor

grep -f /tmp/diff_ab <FILE_A> > /tmp/messages

 

Convertir los caracteres unicode (\u xxx) a ascii

Se puede usar la librería native2ascii

native2ascii -reverse /tmp/messages

 

Te puede interesar…

1 Comentario

  1. Hef

    Si estas interesado en traducir ficheros .properties, yo recomiendo altamente esta rápida y intuitiva herramienta en línea para la localización de software: https://poeditor.com/

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *