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