Archivo de la etiqueta: bash

Convertir a gettext

Buenas, os dejo un sencillo script para modificar el código fuente de archivos PHP al formato de gettext.

Se parte de la base que el código está traducido usando un array para las cadenas a traducir, esto es, usamos:

$LANG["buttons"][0]="Botón";

para definir la matriz de traducciones y ésta se almacena en un archivo independiente.

#!/bin/bash
#
# gtranslate.sh
#
# Script para convertir cadenas que están guardadas en un array en PHP
# como $LANG["button"][0]="Botón";
# al formato de gettext como _('Button') en los archivos .php bajo
# el directorio donde se ejecuta el script.
#
# Script for convert strings that are saved as array in PHP
# like $LANG["button"][0]="Botón";
# to gettext format like _('Button') in .php files under script
# current path.
#
#
# Es necesario adaptar la variable $LANG_FILE al archivos donde se
# encuentran los arrays de traducciones.
# La variable $LANG_FILE_ALT se utiliza para excluir otro archivo de
# traducciones de ser modificado
#
# Por cada archivo a modificar, se crea un archivo de backup .bak
# Si ya existe un archivo .bak del archivo a modificar, no se realiza
# la modificación
#
# You need to fit the $LANG_FILE var to the file where translation array
# are saved.
# The $LANG_FILE_ALT var is used to exclude another translation file from
# being modified.
#
# Every file to modify is backed up into .bak file
# If .bak of file to be modified already exist, modify won't be made.
#
#
# (c) 2013 - nuxsmin - http://cygnux.org
#
# Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.
#

LANG_FILE="./locales/es_ES.php"
LANG_FILE_ALT="./locales/en_US.php"

find ./ -name "*.php" | while read FILE;do
  test "$FILE" = "$LANG_FILE" && continue
  test "$FILE" = "$LANG_FILE_ALT" && continue

  echo "$FILE ..."

  test -e "$FILE.bak" && continue
  cp $FILE $FILE.bak || continue

  egrep '^\$LANG\[' $LANG_FILE | while read LINE;do
    test -z "$LINE" && continue

    STRIP="$(echo "$LINE" | sed -e 's/;//g' -e 's/\]/\\\]/g' -e 's/\[/\\\[/g' -e 's/\$/\\\$/g' -e 's/\//\\\//g' -e 's/\&/\\\&/g' -e \"s/'/\\\'/g\")"
    ARR_LANG=`echo "$STRIP" | cut -d "=" -f 1`
    ARR_LANG_DESC=`echo "$STRIP" | cut -d "=" -f 2 | sed -e 's/"//g' -e 's/\&/\&/g' -e 's/\//\\\//g' -e "s/'/\\\'/g"`

    sed -i "s/$ARR_LANG/_('$ARR_LANG_DESC')/g" $FILE || exit
    #break
  done
  #break
done

Espero que os sirva… ;)