----- Mensaje Original -----
Remitente: Aleix Badia i Bosch [EMAIL PROTECTED]
Destinatario: Josep Puigdemont [EMAIL PROTECTED]
Fecha: Lunes, Enero 26, 2004 2:48pm
Asunto: Re: M�s informaci� sobre latraducci� de l'Evolution
>
>Hola Josep, he llegit el correu despr�s d'haver enviat l'anterior. M'he
>mirat molt per sobre (est� molt ben documentada i t� fins l'�ltim
>detall) la seq��ncia del Xavier. No s� si est� plantejat diferent o no
>ho s� veure, per� crec que no hi ha implementat un criteri per dividir
>que sigui agrupar per """seccions""". La import�ncia d'aquest criteri
>l'he intentat explicar al correu anterior, tot i que nom�s era una
>proposta.
>
>Qu� us sembla a vosaltres ?
>
>Xavier: La seq��ncia que proposes implementa el que comentava ? ..Ho
>implementa impl�citament pq les cadenes del .po segueix un ordre per
>""seccions""" (independentment de si despr�s queda tallat pel n�mero de
>l�nies especificat com a argument de la seq��ncia). Si no �s el cas,
>potser et puc donar un cop de m� o si m�s no la idea pq ho puguis
>implementar a la teva seq��ncia.
>
>
En el fitxer de text t'explico m�s b� el funcionament.
Simplement, agafa el nombre de missatges que t� el fitxer d'entrada i en
fa peda�os d'una mida proporcional. En comptes de tallar l�nies, agrupa
els missatges sencers, sense tallar-los (no nom�s conta l�nies). No vaig
pensar que calgu�s agrupar-los per temes. Puc modificar el meu script
perqu� en faci peda�os per temes. Suposo que has
agafat el camp #: per saber on parava, no?
Tingues en compte que �s m�s senzill controlar 5 peda�os de cinc
persones que 7 peda�os per a 5 persones, per exemple. Si vols jo ho puc
coordinar.
En principi sembla bona idea fer grups de traduccions, segons cada part,
i despr�s ajuntar-les totes. Hi treballar� una mica i us dir� quelcom.
Mentrestant, aniria b� que m�s gent s'apunt�s a traduir l'Evolution.
>On dl, 2004-01-26 at 14:20, Josep Puigdemont wrote:
>> On Mon, 2004-01-26 at 12:47, Enric Balletb� i Serra wrote:
>> > Hola a tots, em sembla perfecte, seria ideal poder partir el
>fitxer en
>> > diversos trossos i assignar-lo a diferents persones, crec que
>alg� havia
>> > dit que tenia un script o alguna cosa semblant per fer-ho,
>despr�s crec
>>
>> Us passo un programa que va fer en Xavier Conde Rueda per partir (i
>> ajuntar) fitxers po, molt bo!
>>
>> Cal tenir el perl instal�lat. No s� si hi ha una versi� nova, Xavier?
>> El mateix programa incorpora ajuda si no li passeu par�metres.
>>
>> > que faltaria falta que una o dues persones per revisar els diversos
>> > fitxers perqu� quedi una cosa coherent, com ho veus Aleix? tu que
>ets el
>> > que �ltimament est� m�s actiu te'n pot encarregar de coordinar-ho?
>>
>> ----
>>
>
>> #!/usr/bin/perl -w
>>
>> # Aix� �s programari lliure; podeu redistribuir-lo i/o\n"
>> # modificar-lo sota els termes de la Llic�ncia P�blica General GNU
>tal i\n"
>> # com ha estat publicada per la Free Software Foundation; b� sota
>la\n"> # versi� 2 de la Llic�ncia.
>> #
>> # Aquest programa es distribueix amb l'expectativa de que ser� �til
>> # per� SENSE CAP GARANTIA; ni tan sols la garantia impl�cita de
>> # COMERCIABILITAT o ADEQUACI� PER UN PROP�SIT PARTICULAR. Vegeu la
>> # Llic�ncia P�blica General GNU per obtenir-ne
>> # m�s detalls.
>> #
>> # Copyright 2003 Free Software Foundation
>> # Xavier Conde Rueda (xaviconde a eresmas.com)
>>
>> # Aquesta fitxer de seq��ncia agafa un fitxer PO (o una part feta
>amb aquest)
>> # fitxer de sequencia) i en fa N trossos, on cada tros t�
>aproximadament> # el mateix nombre de cadenes tradu�bles.
>> # A m�s, permet agafar m�ltiples fitxers PO fragmentats i fer-ne un
>complet.>
>> # Parsegem l'entrada:
>>
>> # Quants par�metres d'entrada hi ha?
>>
>> $numParam = scalar @ARGV;
>>
>> # Qu� vol fer l'usuari:
>> # 1. --parts: es separa un fitxer en parts
>> # 2. --fusio: es fusionen les parts d'un fitxer
>> # 3. No res: escriu l'ajuda
>>
>> if ($numParam < 2)
>> {
>> &escriuAjuda ();
>> }
>> else
>> {
>> if ($ARGV[0] eq "--parts")
>> {
>> # L'usuari vol tallar un fitxer
>>
>> $numParts = $ARGV[1];
>>
>> if (2 <= (scalar $numParts))
>> {
>> if (($numParam >= 4) && ($ARGV[2] eq "--entrada"))
>> {
>> $nomFitxer = $ARGV[3];
>> print STDERR "Es tallara el fitxer $nomFitxer en
>$numParts parts\n";
>> &fesParts ($numParts, $nomFitxer);
>>
>> if (($numParam == 5) &&
>> ($ARGV[4] eq "--esborra"))
>> {
>> # No ho esborrar� ben b�, per�
>> unlink $nomFitxer;
>> print STDERR "S'ha esborrat el fitxer
>$nomFitxer\n";> }
>>
>> print STDERR "Fet\n";
>> }
>> else
>> {
>> print STDERR "Heu d'especificar un fitxer d'entrada
>amb --entrada\n";
>> }
>> }
>> else
>> {
>> print STDERR "Nomes es poden fer 2 o mes parts\n";
>> }
>> }
>> elsif ($ARGV[0] eq "--fusio")
>> {
>> # Hem d'esborrar els fitxers d'entrada?
>>
>> if ($ARGV[$numParam - 1] eq "--esborra")
>> {
>> pop (@ARGV);
>> $numParam = scalar @ARGV;
>> $esborra = 1;
>> }
>> else
>> {
>> $esborra = 0;
>> }
>>
>> # L'usuari vol fusionar N parts en un fitxer
>>
>> if ($ARGV[$numParam - 2] eq "--sortida")
>> {
>> # S'especifica un fitxer de sortida
>>
>> $sortida = pop (@ARGV);
>>
>> # Traiem els elements que no siguin fitxers
>>
>> pop (@ARGV);
>> shift (@ARGV);
>>
>> # Llista de fitxers que es fusionaran
>>
>> @fitxersParts = @ARGV;
>>
>> if (scalar @fitxersParts > 1)
>> {
>> print STDERR "Es fusionaran ", scalar
>@fitxersParts, " fitxers\n";
>> &fusionaParts ($sortida, @fitxersParts);
>>
>> if ($esborra)
>> {
>> print STDERR "S'esborraran els fitxers
>@fitxersParts\n";> unlink (@fitxersParts);
>
>> }
>>
>> print STDERR "Fet\n";
>> }
>> else
>> {
>> print STDERR "S'han d'especificar mes d'un fitxer
>d'entrada\n";> }
>> }
>> else
>> {
>> print STDERR "No s'ha especificat cap fitxer amb --
>sortida\n";> }
>> }
>> else
>> {
>> &escriuAjuda ();
>> }
>> }
>>
>> # fesParts (numParts, nomFitxer)
>>
>> sub fesParts
>> {
>> my $numParts = $_[0];
>> my $nomFitxer = $_[1];
>> my $numCadenesTotals;
>>
>> if (!open ENTRADA, "<$nomFitxer")
>> {
>> print STDERR "No s'ha pogut obrir el fitxer $nomFitxer\n";
>> exit 0;
>> }
>>
>> # Donat que els fitxers PO no son massa grans, es factible
>> # construir una llista i tenir-la en mem�ria per treballar-hi
>>
>> my @entrada = <ENTRADA>;
>> close ENTRADA;
>>
>> # Hem de comptar quants missatges hi ha al fitxer d'entrada
>>
>> foreach $linia (@entrada)
>> {
>> if ($linia=~/^(\s)*msgid(\s)+/)
>> {
>> $numCadenesTotals ++;
>> }
>> }
>>
>> # Tallem els missatges en $numCadenes com a m�xim
>>
>> my $numCadenes;
>>
>> if (($numCadenesTotals % $numParts) == 0)
>> {
>> $numCadenes = $numCadenesTotals / $numParts;
>> }
>> else
>> {
>> $numCadenes = ($numCadenesTotals / $numParts) + 1;
>> }
>>
>> if ($numCadenes < $numParts)
>> {
>> print STDERR "No hi han suficients missatges per fer
>$numParts parts\n";
>> exit 0;
>> }
>>
>> # Per a cada part...
>>
>> for (; $numParts != 0; $numParts--)
>> {
>> # Creem un nou fitxer...
>>
>> my $nomFitxerPart = $nomFitxer.".".$numParts;
>> my $textFitxer = "";
>>
>> # Recorrem el fitxer del final al principi
>> # Trobem $numCadenes vegades (o les que quedin)...
>>
>> for ($i = $numCadenes;
>> ($numCadenesTotals > 0) && ($i > 0) && (scalar @entrada
>> 0);
>> $i --,
>> $numCadenesTotals--)
>> {
>> # ...una cadena traduible
>>
>> for ($trobada = 0; !$trobada;)
>> {
>> $linia = pop (@entrada);
>> $textFitxer = $linia.$textFitxer;
>>
>> if ($linia=~/^(\s)*msgid(\s)+/)
>> {
>> $trobada = 1;
>> }
>> }
>> }
>>
>> # Quan trobem la darrera cadena traduible, no agafem
>> # els comentaris que pugui tenir (en les altres s�)
>> # Ho fem ara:
>>
>> for ($trobada = 0;
>> !$trobada &&
>> (scalar @entrada) >0; )
>> {
>> $linia = $entrada[(scalar @entrada) - 1];
>>
>> if ($linia=~/^(\s)*#/)
>> {
>> $textFitxer = (pop (@entrada)).$textFitxer;
>> }
>> else
>> {
>> $trobada = 1;
>> }
>> }
>>
>> # Ja podem escriure el fitxer de sortida
>>
>> if (!open PART, ">$nomFitxerPart")
>> {
>> print STDERR "No s'ha pogut obrir el fitxer
>$nomFitxerPart\n";> exit 0;
>> }
>> print PART "$textFitxer";
>> close PART;
>>
>> print STDERR "S'ha escrit el fitxer $nomFitxerPart\n";
>> }
>> }
>>
>> # fusionaParts ($sortida, @fitxersParts)
>>
>> sub fusionaParts()
>> {
>> my $sortida = $_[0];
>> my $fitxersParts = \$_[1];
>> my $primer = 0;
>> my @fitxerSortida;
>>
>> # Per a cada fitxer d'entrada...
>>
>> foreach $nomFitxer (@fitxersParts)
>> {
>> if (!open ENTRADA, "<$nomFitxer")
>> {
>> print STDERR "No s'ha pogut obrir el fitxer
>$nomFitxer\n";> exit 0;
>> }
>> my @fitxer = <ENTRADA>;
>> close ENTRADA;
>>
>> # Hem de saber quin �s el primer fitxer pq cont� la cap�alera
>> # No importa que els altres no estiguin ordenats
>>
>> for ($i = 0; $i < (scalar @fitxer - 2) && !$primer; $i ++)
>> {
>> $linia = $fitxer[$i];
>>
>> if ($linia=~/^(\s)*msgid(\s)+""/)
>> {
>> # Tenim un candidat a ser cap�alera
>>
>> $linia = $fitxer[$i + 1];
>>
>> if ($linia=~/^(\s)*msgstr(\s)+""/)
>> {
>> $primer = 1;
>>
>> # Com ha de ser el primer, canviem l'ordre
>> # de les dues llistes perque el push ho faci b�
>>
>> @aux = @fitxerSortida;
>> @fitxerSortida = @fitxer;
>> @fitxer = @aux;
>> }
>> }
>> }
>>
>> # Actualitzem la llista de sortida
>> push (@fitxerSortida, @fitxer);
>> }
>>
>> if (!open SORTIDA, ">$sortida")
>> {
>> print STDERR "No s'ha pogut obrir el fitxer $sortida\n";
>> exit 0;
>> }
>>
>> # Escrivim la llista en la sortida
>>
>> foreach $linia (@fitxerSortida)
>> {
>> print SORTIDA $linia;
>> }
>>
>> close SORTIDA;
>> }
>>
>> # escriuAjuda ()
>>
>> sub escriuAjuda
>> {
>> print STDERR "Un fitxer de sequencia per tallar un fitxer PO en
>N parts\n";
>> print STDERR "en que cada part te aproximadament el mateix
>nombre de traduccions.\n";
>> print STDERR "\n";
>> print STDERR "Us: retalla opcio\n";
>> print STDERR "opcio es una d'aquestes dues:\n";
>> print STDERR "--parts numParts --entrada nomFitxer\tSepara el
>fitxer d'entrada en numParts parts\n";
>> print STDERR "\t\t\t\tS'afegira l'extensio .1, .2, ...,
>.numParts\n";> print STDERR "\t\t\t\tCompte: es sobreescriuran
>els fitxers generats\n";
>> print STDERR "--fusio fitxers --sortida nomFitxer\tCrea un unic
>fitxer dels fitxers d'entrada\n";
>> print STDERR "\t\t\t\tNo cal que els fitxers estiguin
>ordenats\n";> print STDERR "\t\t\t\tCompte: es sobreescriura el
>fitxer de sortida\n";
>> print STDERR "\n";
>> print STDERR "El modificador per a --parts es:\n";
>> print STDERR "--entrada nomFitxer\t\tEspecifica un fitxer PO
>d'entrada.\n";> print STDERR "\t\t\t\tNo es pot fer servir
>l'entrada estandard.\n";
>> print STDERR "El modificador per a --fusio es:\n";
>> print STDERR "--sortida nomFitxer\t\tEscriu la sortida en el
>fitxer nomFitxer.\n";
>> print STDERR "\t\t\t\tSi s'especifica \"-\", s'escriura el
>fitxer per la sortida estandard.\n";
>> print STDERR "\n";
>> print STDERR "Un modificador final comu a tots dos es:\n";
>> print STDERR "--esborra\t\t\tOpcional. S'esborrara el fitxer PO
>d'entrada.\n";> print STDERR "\t\t\t\tUtil per no tenir duplicats
>entre parts i subparts.\n";
>> print STDERR "\t\t\t\tNo es recomenable esborrar el PO
>orginal.\n";> }
>
>
>----------------------------------------------------------------
>Podeu consultar els arxius d'aquesta llista o canviar la vostra
>subscripci� a http://www.softcatala.org/llistes/
>----------------------------------------------------------------
>
-----------------------------------------------------------------------
Ll�vate 2 libros de bolsillo y te regalamos uno de humor - Ahora, al
comprar 2 libros de bolsillo puedes llevarte 1 de los 3 libros de la
'Antolog�a de la Mejor Literatura de Humor de Todos los Tiempos'
http://www.eresmas.com/banners/promo.html?zanox
L'script “retalla” permet separar en múltiples parts un fitxer PO, a més de
reconstruir-lo a partir de tote les parts fetes.
Per obtenir ajuda quant a l'script, es pot executar sense arguments.
1.Retallar un fitxer d'entrada
Per retallar un fitxer d'entrada, executem l'script amb les següents opcions:
./retalla --parts numParts --entrada fitxer.ca.po
Si volem fer 4 parts, executem l'ordre:
./retalla --parts 4 --entrada fitxer.ca.po
Això crearà els fitxers fitxer.ca.po.1, fitxer.ca.po.2, fitxer.ca.po.3,
fitxer.ca.po.4. Cada fitxer mantindrà la sintaxi normal dels fitxers PO, i només el
primer tindrà la capçalera. Per tant, podem comprovar la sintaxi dels fitxers amb la
comanda msgfmt.
També podem fer parts d'una part:
./retalla --parts 2 --entrada fitxer.ca.po.1
Això crearà els fitxers fitxer.ca.po.1.1, fitxer.ca.po.1.2. En fer dues parts del
fitxer, tenim duplicades les cadenes. Si no volem conservar el fitxer del que fem
parts, podem afegir al final el paràmetre --esborra:
./retalla --parts 2 --entrada fitxer.ca.po.1 --esborra
Crerà els fitxers anteriors i esborrarà fitxer.ca.po.1.
2.Fusionar fitxers d'entrada
Per fusionar les parts d'un fitxer en un, fem servir el paràmetre --fusio:
./retalla --fusio fitxersParts --sortida fitxerSortida
Per fusionar els fitxers que haviem tallat abans, fem servir la següent ordre:
./retalla --fusio fitxer.ca.po.* --sortida fitxer.ca.po
També es poden esborrar els fitxers de parts amb el paràmetre --esborra:
./retalla --fusio fitxer.ca.po.* --sortida fitxer.ca.po --esborra
crearà el fitxer de sortida i esborrarà les parts.
Compte: si, per exemple, fusionem les parts fitxer.ca.po .1, fitxer.ca.po .1.1,
fitxer.ca.po .1.2 estarem duplicant les cadenes. Per tant, és recomenable esborrar
una part quan en fem subparts. També és recomenable no esborrar el fitxer PO
original.