Difference between revisions of "Conversións masivas PHP - PO - TMX"

From Proxecto Trasno
m (Script xera)
m (Script xera)
Line 75: Line 75:
  
 
# &#169; Miguel Anxo Bouzada <mbouzada[fix@]gmail[fix.]com>
 
# &#169; Miguel Anxo Bouzada <mbouzada[fix@]gmail[fix.]com>
# &#169; Proxecto Trasno <roxecto[fix@]trasno[fix.]net>
+
# &#169; Proxecto Trasno <proxecto[fix@]trasno[fix.]net>
 
# july 2012
 
# july 2012
  

Revision as of 20:59, 18 August 2012

O traballo aquí proposto parte da necesidade de manexar os ficheiros de tradución do Moodle


Nota: Todo o proceso indicado aquí depende das ferramentas do Translate Toolkit, máis concretamente da ferramenta php2po


Procedemento base

O primeiro paso e crear un cartafol de traballo que aquí chamaremos PHP-PO

De seguido descargamos os ficheiros que imos empregar

Na Páxina de descargas do Moodle] atopamos a versión 2.4 nesta ligazón buscamos a versión en inglés (considerada a orixinal ou texto matriz) e atopamos un paquete zip co nome en.zip. Buscamos tamén a versión en galego e atopamos un paquete chamado gl.zip.

Descargamos ambos e, neste mesmo cartafol engadimos o script que vai na fin desta páxina, gardámolo co nome xera e dámoslle permisos de execución, co que teremos un cartafol máis ou menos así:


PHP-PO-inicial.png

Fig. num. 1 ─ Cartafol inicial de traballo



Dinámica de traballo

  1. Preparar a estrutura de traballo executando a orde ./xera prepareDir. O script descomprimirá os ZIP onde corresponda e xerará os cartafoles de traballo.
  2. Converter os PHP orixinais a PO executando a orde ./xera php2po. O script xerará un cartafol chamado po-orixinal, no que teremos os ficheiros PO listos para traducir.
  3. Copiar o ficheiro que queiramos traducir cara po-traballo (que xa foi xerado no primeiro paso).
  4. traducir e revisar
  5. A seguir, unha vez conformes coa tradución, enviamos manualmente o ficheiro traducido ao cartafol po-final (que tamén foi xerado no primeiro paso).
  6. Aínda que non teñamos nada no cartafol po-final, poderemos xerar un ficheiro tmx para compartir o traballo que levamos feito con outro(s) tradutor(es) empregando a orde ./xera po2tmx que xerará un ficheiro, coa data e hora actual no cartafol tmx. Xerará tamén un único PO.
  7. Como fase final, deberemos xerar os ficheiros PHP en galego, para remitírllelos ao(s) desenvolvedor(es). Empregaremos a orde ./xera po2php, con isto teremos un cartafol chamado gl que contén os ficheiros PHP e un arquivo gl.zip, ambos conforme o esuquema de traballo de Moodle.



PHP-PO-executando.png

Fig. num. 2 ─ Vista do cartafol tras executar prepareDir


Executaremos:

xera [prepareDir|php2po|po2php|po2tmx|po-old]

Explicamos os parámetros:

prepareDir
Esta función fai os preparativos iniciais, descomprimir os .zip e crear algún dos directorios de traballo.
php2po
Esta función fai conversións masivas de PHP a PO.
po2php
Esta función fai conversións masivas de PO a PHP e xera o arquivo comprimido .zip que emprega Moodle.
po2tmx
Esta función xera un tmx a partires de todo o traballo feito.
po-old
Esta función fai conversións masivas de PHP a PO. Neste caso está elaborado para facer ficheiros PO a partires de ficheiros PHP xa traducidos, ou con partes traducidas.


PHP-PO-final.png

Fig. num. 3 ─ Cartafol con todos os pasos do script executados



Alternativa de axuda

A fin de poder ter como referencia as traducións ao galego existentes en Moodle, empregando a función po-old poderemos obter os correspondentes ficheiros .po así como un .po da totalidade e o seu .tmx


PHP-PO-OLD.png

Fig. num. 4 ─ Vista do cartafol OLD


Script xera

#!/bin/bash

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>

# © Miguel Anxo Bouzada <mbouzada[fix@]gmail[fix.]com>
# © Proxecto Trasno <proxecto[fix@]trasno[fix.]net>
# july 2012

## -

# execute « [bash |./]xera [prepareDir|php2po|po2php|po2tmx|po-old] »

## Asignación de variábeis de nomes de directorios de traballo
## Axuste estes nomes de cartafoles á súa comenencia

## Assigning directory names variables for  work
## Set these directory names for your convenience

PHP_Original="en"       # No caso de exemplo o « en » de Moodle
PHP_Target="gl"         # No caso de exemplo o « gl » que imos crear

Old_PHP="gl"            # No caso de exemplo o « gl antigo » de Moodle
Old_PO="po"             # No caso de exemplo o « po » que se vai xerar

PO_Original="po-orixe"  	
PO_Work="po-traballo"   
PO_Final="po-final"     

tmp4TMX="tmp4tmx"    
TMX="tmx"               

function prepareDir(){
    # Esta función descomprime os ficheiros descargados,
    # xera os cartafoles/directorios precisos e coloca os antigos no seu sitio

    # This function unzip downloaded archives,
    # Creates the required folders/dirs and puts the old in place

    [ -d ${PHP_Original} ] && echo "SEMELLA QUE ESTA FUNCIÓN XA FOI EXECUTADA" && exit 0

    mkdir OLD ${PO_Work} ${PO_Final}

    unzip ${PHP_Original}.zip

    mv ${Old_PHP}.zip OLD/
    unzip  OLD/${Old_PHP}.zip -d OLD/
}

function phpTOpo(){
    # Esta función fai conversións masivas de PHP a PO
    # This function makes massive conversions of PHP to PO

    # listamos o directorio "${PHP_Original}" xa que interésanos todo o que hai nel
    ls ./${PHP_Original} > list.txt

    [ -d ${PO_Original} ] && rm ${PO_Original}/* || mkdir ${PO_Original}

    while read NAME
    do
        PONAME=`echo $NAME | cut -d. -f1`
        php2po ${PHP_Original}/$NAME ${PO_Original}/$PONAME.po
    done < list.txt

    rm list.txt
}

function poTOphp(){
    # Esta función fai conversións masivas de PO a PHP
    # e xera o arquivo comprimido .zip que emprega Moodle

    # This function makes massive conversions of PO to PHP
    # And creates the compressed .zip file it uses Moodle

    # listamos o directorio "${PO_Final}" xa que só nos interesa o que hai nel
    ls ./${PO_Final} > list.txt

    [ -d ${PHP_Target} ] && rm ${PHP_Target}/* || mkdir ${PHP_Target}

    while read NAME
    do
        PHPNAME=`echo $NAME | cut -d. -f1`
        po2php -t ${PHP_Original}/$PHPNAME.php ${PO_Final}/$NAME ${PHP_Target}/$PHPNAME.php
    done < list.txt

    [ -f ${PHP_Target}.zip ] && rm ${PHP_Target}.zip
    zip ${PHP_Target}.zip ${PHP_Target}/*

    rm list.txt
}

function poTOtmx(){
    # Esta función xera un "TMX" a partires de todo o traballo feito
    # This function generates a "TMX" from all the work done

    DATA=`date +%d%m%y-%H`

    [ -d ${tmp4TMX} ] && rm ${tmp4TMX}/* || mkdir ${tmp4TMX}
    [ -d ${TMX} ] && rm ${TMX}/* || mkdir ${TMX}

    cp ${PO_Work}/* ${tmp4TMX}/
    cp ${PO_Final}/* ${tmp4TMX}/

    ls ${tmp4TMX} > list.txt

    msgcat -D ${tmp4TMX} -f list.txt -u -o ${TMX}/${DATA}.po
    po2tmx ${TMX}/${DATA}.po -l gl ${TMX}/${DATA}.tmx

    rm list.txt
}

function po-old(){
    # Esta función fai conversións masivas de PHP a PO
    # Neste caso está elaborado para facer PO de ficheiros
    # PHP xa traducidos, ou con partes traducidas,
    # e xa postos, xeramos un PO Total e un oldTMX.

    # This function makes massive conversions of PHP to PO
    # In this case is made to PO files
    # PHP already translated, or translated parts,
    # And now stands, we generate a Total PO and oldTMX.


    # listamos só o directorio "OLD/${Old_PHP}" xa que só nos interesa o que haia nel
    ls OLD/${Old_PHP} > lista.txt

    [ -d OLD/${Old_PO} ] && rm OLD/${Old_PO}/* || mkdir OLD/${Old_PO}

    while read NAME
    do
        PONAME=`echo $NAME | cut -d. -f1`
        php2po -t ${PHP_Original}/$NAME OLD/${Old_PHP}/$NAME OLD/${Old_PO}/$PONAME.po
    done < lista.txt

    [ -d OLD/ALL ] && rm OLD/ALL/* || mkdir OLD/ALL

    ls OLD/${Old_PO} > lista.txt

    msgcat -D OLD/${Old_PO} -f lista.txt -u -o OLD/ALL/ALL.po
    po2tmx OLD/ALL/ALL.po -l gl OLD/ALL/oldTMX.tmx

    rm lista.txt
}

param=$1
[ $param = "" ] && exit 0
[ $param = prepareDir ] && prepareDir
[ $param = php2po ] && phpTOpo
[ $param = po2php ] && poTOphp
[ $param = po2tmx ] && poTOtmx
[ $param = po-old ] && po-old

#.EOF