source: spip-zone/_plugins_/trad-lang/trunk/abstrait_langue.sh @ 120875

Last change on this file since 120875 was 103864, checked in by spip.franck@…, 4 years ago

En finir une fois pour toutes avec spip-contrib, pour mettre à la place contrib.spip

  • Property svn:executable set to *
File size: 2.3 KB
Line 
1#!/bin/sh
2
3# Script prenant en argument un nom N et une liste de fichiers,
4# et remplacant dans ces fichiers les expressions PHP de la forme
5# _L('C\'est une chaîne')
6# par
7# _T('N:c_est_une_chaine')
8# et produit un fichier de langue N.php contenant
9# array( 'c_est_une_chaine' => 'C\'est une chaîne' )
10
11# Limitations:
12# 1. il ne doit y avoir qu'un seul _L par ligne
13# 2. l'argument de _L ne doit pas contenir les signes ) et |
14
15echo "Ce script Shell est un prototype d'un service fourni par Langonet v 0.7:"
16echo "https://contrib.spip.net/LangOnet-Presentation-generale"
17echo "Utiliser plutot Langonet, qui traite beaucoup plus de cas"
18echo "et produit des items plus intuitifs et ergonomiques."
19echo
20
21if [ $# -lt 2 ]
22then echo usage: $0 nom file1 file2 ... fileN
23exit 1
24fi
25e=/tmp/e.sed
26c=/tmp/c.sed
27f=/tmp/l.txt
28t=/tmp/n.txt
29dest=$1
30shift
31# Extraire les libelles
32grep -h "_L *('" $* | \
33        sed "s/^.*_L *('/'/;s/').*$/'/g" | \
34        sort -u > $f
35# Reperer les entites HTML
36# construire le sed-script remplacant les entites par leur premiere lettre:
37# &eacute --> e etc mais on traite a part  
38echo 's/ /_/g'  > $e
39tr " " "\n" < $f | \
40        grep '&'| \
41        sed -e 's/^.*\&/\&/g;s/;.*$/;/' | \
42        sort -u | \
43        sed 's/^&\(.\)\(.*\)$/s@\&\1\2@\1@g/' >> $e
44
45# Remplacer par "_"
46# les balises, les sequences de non alpha-numeriques et ' si precede de \
47echo "s@<[^>]*>@_@g" >> $e
48echo "s@[^a-zA-Z0-9'\\]@_@g" >> $e
49echo "s@\\\\\\\\'@_@g" >> $e
50# Eliminer les repetitions de _
51echo "s@\([^_]\)__*\([^_]\)@\1_\2@g" >> $e
52# Eliminer les derniers caracteres si non alph-num
53echo "s@_'@'@g" >> $e
54
55# Lancer le sed-script obtenu et abandonner les majuscules
56sed -f $e $f | tr '[A-Z]' '[a-z]' > $t
57
58# Construire le fichier de langues
59cat > $dest.php <<-EOF
60<?php
61
62        // This is a SPIP language file  --  Ceci est un fichier langue de SPIP
63
64        \$GLOBALS[\$GLOBALS['idx_lang']] = array(
65
66EOF
67paste -d, $t $f |sed "s/',/' => /;s/'$/',/" >> $dest.php
68echo '); ?>' >> $dest.php
69
70# Construire le script sed remplacant les _L par _T
71sed 's@^\(.*\)$@s|_L(\1)@' $f > $f.tmp
72sed "s@^.\(.*\).\$@_T('$dest:\1')|g@" $t > $t.tmp
73paste -d'|' $f.tmp $t.tmp  | sed 's/\\/./g'> $c
74rm $f.tmp $t.tmp
75
76# Appliquer le sed script sur les fichiers de langues
77for i in $*
78do
79sed -f $c $i > /tmp/x.php
80php /tmp/x.php > /dev/null
81if [ $? -eq 0 ]
82then
83        mv /tmp/x.php $i
84else   
85    echo Fichier $i inexploitable. Revoir ses appels a _L
86fi
87done
88
Note: See TracBrowser for help on using the repository browser.