Renombrar archivos en las traducciones de sitios web

Imaginemos la siguiente hipótesis que se ha presentado un par de veces en nuestra empresa: hay que traducir un sitio web con muchísimos archivos, todos denominados “index.html” y ubicados en distintos niveles, cada uno en su propia carpeta.

Me dicen que es una pesadilla manejar algunos sistemas de gestión que acepten los archivos individuales para traducción, debido a que después es muy difícil combinar el archivo traducido que le corresponde a cada archivo original.

Una idea que funciona bien es renombrar cada archivo con la ruta completa de la estructura de directorio. Esto garantiza un nombre único y, al mismo tiempo, mantiene la ubicación del archivo dentro de la estructura.

Por ejemplo, supongamos que tenemos dos archivos:

site/main/index.htmlsite/deeply/nested/folder/index.html

Podemos renombrarlos así:

site_main_index.htmlsite_deeply_nested_folder_index.html

Después de traducirlos, el reemplazo del carácter separador de la carpeta (“/” en Unix) restablecerá el nombre original y la estructura correcta de la carpeta.

En este caso en particular funciona bien, porque el carácter utilizado “/” no aparece en los nombres de los archivos.  En la vida real, suelo elegir “__”, que es una combinación muy poco frecuente de caracteres (a pesar de que no serviría si el nombre de alguna carpeta terminara en “_”), pero cualquier carácter o combinación de ellos que no aparezca en los nombres servirá a tal fin.

A esta altura, puedo oír el clamor de las masas rugiendo que no se puede hacer esto en docenas de archivos, porque sería una tarea interminable. Bueno, yo tuve que hacerlo en 150 archivos, y me llevó algunos segundos. Esto fue lo que usé:

mkdir for_translationfind * -iname *.html > /tmp/files.txtwhile read x; do cp "$x"  for_translation"${x////__}"; done < /tmp/files.txt

Y luego, una vez que se tradujeron los archivos, la conversión de regreso puede realizarse en un flash como este:

ls > /tmp/files.txtwhile read x; do full_name=${x//__//}; dir=$(dirname $full_name);mkdir -p "$dir"; mv "$x" "$full_name"; done < /tmp/files.txt

¡Es más fácil hacerlo que decirlo!

Lo explico rápidamente. El redireccionamiento a un archivo temporal elimina los problemas que podrían surgir si los archivos o las carpetas contuvieran espacios, comas u otros caracteres rebeldes en los nombres. Las comillas dobles («) cumplen la misma función. El copiado (cp) puede reemplazarse por un renombrado (mv), si lo deseara (con el copiado, conservamos los originales, por si los necesitáramos luego). El bit crucial tiene lugar en el interior de las llaves ({}), pero para obtener más información al respecto, tendrá que leer un tutorial más avanzado sobre la materia.

Los especialistas en Unix opinarán que estos métodos son triviales, pero yo considero que funcionan bien, y que son de fácil acceso para cualquier persona con el sistema Unix (Linux, y especialmente, Ubuntu, que parece ser el más popular en Linux).

 

Artículo original: Renaming Files for Website Translations