Jump to content

User:ManuelGR/traducir mw con wp

From Meta, a Wikimedia project coordination wiki
#!/bin/bash
# Licencia: GPL 2 o posterior.
# Autor: [[Meta:User:ManuelGR]]

# Este script obtiene una lista de mensajes que faltan de traducir en el
# archivo LanguageXX.php y luego obtiene el mensaje de Wikipedia (se supone
# que en Wikipedia muchos de estos mensajes están ya traducidos). El resultado
# es un fichero traducidos_w.txt con los mensajes tal cual se han de insertar
# en el array $wgAllMessagesXX de LanguageXX.php
# Nota: añadir el contenido de traducidos_w.txt en el array $wgAllMessagesXX,
# Usa un editor UTF8 y sigue las instrucciones de:
# http://meta.wikimedia.org/wiki/MediaWiki_localisation

# El idioma se configura con estas variables:
CODIGO=es
CODIGO_PHP=Es

function saca_de_language ()
{

  # Este grep presupone un formato homogeneo para los elementos de
  # $wgAllMessagesEn. Esto se cumple a dia de hoy, pero podria cambiar
  # y este grep dejaria de funcionar.
  #
  grep "^'.*'[ 	]*=>" $1 |nawk '{print $1}' | nawk -v FS=\' '{print $2}'> $1.msg.tmp
  grep "^\".*\"[ 	]*=>" $1 |nawk '{print $1}' | nawk -v FS=\" '{print $2}' >> $1.msg.tmp

  sort -u $1.msg.tmp > $1.msg
  rm $1.msg.tmp
}
TRADUCIBLE=Messages${CODIGO_PHP}.php
ORIGINAL=MessagesEn.php

saca_de_language $TRADUCIBLE
saca_de_language $ORIGINAL

# Con esto obtenemos en no_traducidos.txt la lista de mensajes que no existen
# en el fichero de traduccion.
join -v 1  ${ORIGINAL}.msg  ${TRADUCIBLE}.msg > no_traducidos.txt

echo > traducidos_w.txt

for i in `cat no_traducidos.txt`
do
  # Obtener el mensaje de Wikipedia y hacer unos reemplazos simples para
  # sustituir referencias a Wikipedia por sus correspondientes genéricos.
  TRADUCCION=$(wget "http://${CODIGO}.wikipedia.org/w/index.php?title=MediaWiki:$i&action=raw" --output-document=- | sed "s/[wW]ikipedia:/{{ns:project}}:/g; s/Wikipedia/{{SITENAME}}/g; s/'/\\\'/g")

  if [ ! -z "$TRADUCCION" ]; then
  # Generar el fichero con los mensajes tal cual se incluiran en MessagesXX.php
      echo "'$i'	=> '$TRADUCCION'," >> traducidos_w.txt
  fi 
  # No saturemos al servidor
  sleep 1
done