[PLUTO-ildp] Come funziona l'aggiornamento dello stato traduzioni

Giulio Daprelà giulio a pluto.it
Gio 8 Giu 2006 02:44:38 CEST


Prima di passare all'argomento dell'oggetto dell'email informo che
l'amministratore del nostro server mi ha detto che non c'è nessun
problema a far girare uno script periodico. Quindi il problema di dove
farlo girare non esiste.

L'aggiornamento della pagina dello stato traduzioni ad oggi consiste
in un processo semi-automatico attraverso il quale io genero il codice
HTML sulla mia macchina con uno script php, e lo trasferisco sul sito
con un semplice copia-incolla. Il processo può apparire poco
efficiente, ma al momento è l'unica soluzione, anche per ragioni
storiche. Tutto risale ai tempi del vecchio sito: sembra un'era
geologica, ma stiamo parlando di 3 mesi fa. Allora lo script era sul
server, io aggiornavo la pagina HTML con lo script php e questa era
già disponibile on line. Con il passaggio al nuovo sito questo non è
più possibile, perché il nuovo sito si fonda su Drupal, che è un
sistema avanzato per la gestione dei siti, il quale non consente più
l'aggiornamento diretto delle pagine html, e sono costretto ad usare
il sistema descritto all'inizio. Lo script genera la pagina completa,
come sul vecchio sito, poi io faccio un copia-incolla della sola
tabella. Per chi ha usato Wiki, giusto per fare un paragone con un
sistema più noto, è come quando si aggiunge un testo in un sito wiki,
solo che qui si scrive il codice html della pagina del sito.

Per aggiornare le informazioni mi servo di un file di testo che si
chiama "st", che ha delle linee come le seguenti:

8021X-HOWTO,200410,,u
Accessibility-HOWTO,200206,199703,
Accessibility-Dev-HOWTO,200205,200205,
ACP-Modem,200207,,

Le righe funzionano in questo modo: nome howto,data ultima versione
inglese,data traduzione, stato
Nella prima riga abbiamo l'8021X-HOWTO, la cui versione inglese è
dell'ottobre 2004 (200410), non c'è ancora la versione italiana (tra
le due virgole non c'è nulla) ed è in traduzione (indicato dalla u in
fondo)
La seconda ci dice che l'ultimo aggiornamento dell'howto è del giugno
2002 e l'ultima traduzione è del marzo 1997. L'howto non è in
traduzione. Lo script genera automaticamente anche i colori delle
linee secondo quanto potete leggere sulla legenda nella stessa pagina
sul sito.
Lo script preleva le informazioni da questo file di testo e genera il
codice html della tabella. A questo aggiunge la parte iniziale della
pagina, che è sempre fissa e che si trova nel file "header", che
eliminerò dallo script perché è ormai ridondante.
Infine viene invocato il file eseguibile "make.sh", che contiene la
segunte riga, abbastanza autoesplicativa:

php st.php > /percorso/del/file/statotraduzioni.html


Per la verifica dello stato degli howto è bene sapere che bisognerà
andare a leggere il contenuto del server CVS di TLDP, nel quale sono
presenti gli howto aggiornati.

Lo script di cui vi incollo il codice di seguito, va detto, verrà
modificato dal sottoscritto per fare in modo che i nomi degli howto
nella tabella diventino dei link alle versioni in inglese dei medesimi
(questo penso di essere in grado di farlo anche senza studiare il
php), e continuerà inevitabilmente a girare sulla mia macchina per
aggiornare la pagina dello stato traduzioni. Ritengo che lo script che
verificherà gli aggiornamenti degli howto sarà molto diverso da
questo, ma questa è una cosa di cui potrò discutere in privato con il
programmatore.

Ciao a tutti
-- 
Giulio
---------------------
Linux user #356310
LFS user #11031

st.php

<?php

function Estrai_Stringa($stringa, $n)
{
  $n_campi = 4;
  $str = $stringa;
  if ($n == $n_campi)
  {
    $n1 = $n;
    $n = $n-1;
  }
  for ($i=1; $i<=$n; $i++)
  {
    $stringa = substr($str, 0, strpos($str, ","));
    $str = substr($str, strpos($str, ",")+1);
  }
  if ($n1 == 3)
    return $str;
  else
    return $stringa;
}

function Mese($num_mese)
{
  switch ($num_mese)
  {
    case 1: return "Gennaio";
             break;
    case 2: return "Febbraio";
             break;
    case 3: return "Marzo";
             break;
    case 4: return "Aprile";
             break;
    case 5: return "Maggio";
             break;
    case 6: return "Giugno";
             break;
    case 7: return "Luglio";
             break;
    case 8: return "Agosto";
             break;
    case 9: return "Settembre";
            break;
    case 10: return "Ottobre";
             break;
    case 11: return "Novembre";
             break;
    case 12: return "Dicembre";
             break;
  }
}

include 'header';

$file = fopen("st", "r");

echo "<table>\n";
echo "<tr class=\"center\"><td><strong>Titolo</strong></td><td><strong>Versione
originale</strong></td><td><strong>Versione
tradotta</strong></td><td><strong>Stato</strong></td></tr>\n";
$n_doc = 0;
$non_tradotto = 0;
$da_aggiornare = 0;
$da_aggiornare2 = 0;
$in_traduzione = 0;
while ($riga = fgets($file)) {
  $nomedoc = Estrai_Stringa($riga, 1);
  $versione_en = Estrai_Stringa($riga, 2);
  $versione_it = Estrai_Stringa($riga, 3);
  $anno_en = substr($versione_en, 0, 4);
  $anno_it = substr($versione_it, 0, 4);
  $mese_en = substr($versione_en, strlen($versione_en)-2, 2);
  $mese_it = substr($versione_it, strlen($versione_it)-2, 2);
  $up = substr($riga, strlen($riga)-2, 1);
  $bg = "tradotto";
  $status = "Tradotto";
  if ($up == "u")
  {
    $bg = "in_traduzione";
    $in_traduzione++;
    $status = "In traduzione";
  }
  else if (trim($versione_it) == "")
  {
    $bg = "non_tradotto";
    $non_tradotto++;
    $status = "Non tradotto";
  }
  else if ($versione_en > $versione_it+300)
  {
    $bg = "da_aggiornare2";
    $da_aggiornare2++;
    $status = "Da aggiornare";
  }
  else if ($versione_en > $versione_it)
  {
    $bg = "da_aggiornare";
    $da_aggiornare++;
    $status = "Da aggiornare";
  }
  $n_doc++;
  echo "<tr class=\"$bg\"><td><strong>$nomedoc</strong></td><td
class=\"ver\">" . Mese($mese_en) . " $anno_en</td><td class=\"ver\">"
. Mese($mese_it) . " $anno_it</td><td>$status</td></tr>\n";
}
fclose($file);
echo "\n</table><br>\n";
echo "<em><small>Nota: dalla lista sono stati esclusi i documenti
riguardanti la localizzazione della lingua e quelli rimossi dall'<a
href=\"http://tldp.org/HOWTO/HOWTO-INDEX/howtos.html\">elenco degli
HOWTO di LDP</a>.</small></em><br><br>\n";

echo "<a name=\"statistiche\"><strong>Statistiche:</strong></a><br>\n";
$tradotti = $n_doc-($non_tradotto+$in_traduzione);
printf ("Documenti totali: %d<br>\n", $n_doc);
printf ("Documenti tradotti: %d (%0.2f%% del totale)<br>\n",
$tradotti, ($tradotti*100)/$n_doc);
printf ("Traduzioni da aggiornare: %d (%0.2f%% delle
traduzioni)<br>\n", $da_aggiornare2+$da_aggiornare,
($da_aggiornare2+$da_aggiornare)*100/$tradotti);
printf ("Traduzioni in corso: %d (nuove traduzioni e
aggiornamenti)<br>\n", $in_traduzione);

echo "</body></html>";

?>



Maggiori informazioni sulla lista pluto-ildp