b3c56ddb27650ea424d388abcc5e1edd12f32338
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

1) #!/bin/bash
2) #
3) # Author: Runa Sandvik, <runa.sandvik@gmail.com>
4) # Google Summer of Code 2009
5) #
6) # This is Free Software (GPLv3)
7) # http://www.gnu.org/licenses/gpl-3.0.txt
8) #
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

9) # This script will convert all of the English wml files in
10) # https://svn.torproject.org/svn/website/trunk/ to pot files, and
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

11) # keep them updated. The script will also convert subdirectories that
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

12) # exist in the website module.
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

13) #
14) # For more information, see the HOWTO and README in
15) # translation/tools/gsoc09.
16) # 
17) 
18) ### start config ###
19) 
20) # Location of the wml files
21) wmldir="$PWD"
22) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

23) # Location of the pot files.
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

24) # Assuming that the translation directory is relative to the website
Runa A. Sandvik updated scripts with new path

Runa A. Sandvik authored 14 years ago

25) podir="`dirname $wmldir`/translation/projects/website/po/templates"
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

26) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

27) # Set the copyright holder of the files,
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

28) # for example "The Tor Project, Inc"
29) copyright="The Tor Project, Inc"
30) 
31) # A lot of the wml files have custom tags. These tags have been defined
32) # in website/include/versions.wmi. Tags that people usually forget to close,
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

33) # as well as tags that are not defined in versions.wmi, have been added.
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

34) # See: https://svn.torproject.org/svn/website/trunk/include/versions.wmi
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

35) customtag=`echo $(cat "$wmldir/include/versions.wmi" | awk '{ printf "<%s> " , $2 }' | sed 's/<>//g') "<svnsandbox> <svnwebsite> <svnprojects> <input> <hr> <br> <img> <gitblob> <version-android-components> <package-androidbundle-alpha> <package-androidbundle-alpha-sig> <version-androidbundle-tor> <video controls>"`
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

36) 
37) # We also need to use the nodefault option of po4a; space separated list
38) # of tags that the module should not try to set by default in any
39) # category. For now, we only need the input tag.
40) nodefault='<input>'
41) 
42) # The script can write the name of unprocessed files to a log.
43) # If you want to enable this option, set the logfile here.
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

44) logfile=""
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

45) 
46) # This is the temp logfile. Leave this line even if you don't want to
47) # log. This will be deleted when the script is done.
48) tmplog="`dirname $wmldir`/tmp.log"
49) 
50) ### end config ###
51) 
52) # Create a lockfile to make sure that only one instance of the script
53) # can run at any time.
54) LOCKFILE=wml2po.lock
55) 
56) if lockfile -! -l 60 -r 3 "$LOCKFILE"; 
57) then
58) 	echo "unable to acquire lock" >2
59) 	exit 1
60) fi
61) 
62) trap "rm -f '$PWD/$LOCKFILE'" exit
63) 
64) # Check if translation/projects/website exist, i.e. has been checked out
65) if [ ! -d $podir ]
66) then
67) 	echo "Have you remembered to check out translation/projects/website?"
68) 	exit 1
69) fi
70) 
71) # If the logfile is set, write the date.
72) if [ $logfile ]
73) then
74) 	echo `date` > $logfile
75) fi
76) 
77) # Create the temp log
78) touch $tmplog
79) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

80) # We only need the English wml files, but we do not wish to translate
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

81) # the eff documents.
82) wml=`find $wmldir -regex '^'$wmldir'/.*en/.*\.wml' -type f | grep -v '^'$wmldir'/eff'`
83) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

84) # For every English wml, see if the pot needs to be created or updated
85) for file in $wml ; do
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

86) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

87) 	# Get the basename of the file we are dealing with
88) 	wmlfile=`basename $file`
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

89) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

90) 	# Get the translation priority
91) 	priority=`cat $file | grep "# Translation-Priority" | awk '{print $3}'`
Runa A. Sandvik if the subdirectory does no...

Runa A. Sandvik authored 15 years ago

92) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

93) 	# If the file doesn't have a translation-priority, we can assume
94) 	# that it doesn't need to be translated. Skip this file and
95) 	# continue on with the next.
96) 	if [ ! $priority ]
97) 	then
98) 		continue
99) 	fi
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

100) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

101) 	# Strip the file for its original extension and add .pot
102) 	pofile="$priority.${wmlfile%%.*}.pot"
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

103) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

104) 	# Find out what directory the file is in.
105) 	# Also, remove the part of the path that is $wmldir
106) 	indir=`dirname $file`
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

107) 	
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

108) 	# We need to know what one dir up is
109) 	onedirup=`dirname $indir | sed "s#$wmldir/##"`
110) 
111) 	# We need to have the correct, full path to the pot
112) 	# directory for the file we are working on.
113) 	# Also, did the subdirectory exist prior to running this
114) 	# script? If not, create it now and add it to the
115) 	# repository.
116) 	if [ $onedirup = $wmldir ]
117) 	then
118) 		popath="$podir"
119) 	else
120) 
121) 		# We need to know if a subdirectory, such as torbutton,
122) 		# exist in the translation module. If it does not exist,
123) 		# the script will create it in all the directories under
124) 		# translation/projects/website (excluding .svn)
125) 		subdir=`find "$podir" -maxdepth 1 -type d ! -path "$ppodir" ! -path "*\.*"`
126) 
127) 		for dir in $subdir ; do
128) 			if [ ! -d "$podir/$onedirup" ]
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

129) 			then
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

130) 				svn mkdir "$podir/$onedirup"
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

131) 			fi
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

132) 		done
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

133) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

134) 		# Set the path
135) 		popath="$podir/$onedirup"
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

136) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

137) 	fi
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

138) 		
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

139) 	# Check to see if the pot existed prior to running this
140) 	# script. If it didn't, check if there any files with the same
141) 	# filename, but different priority. If neither of the files
142) 	# exist, create with po4a-gettextize.
143) 	if [ -e "$popath/$pofile" ]
144) 	then
145) 		poexist=1
146) 	elif [ `find $popath -type f -name "*.$filename" | wc -l` -gt "0" ]
147) 	then
148) 		poexist=2
149) 
150) 	# We need to rename the other file
151) 	for file in `find $popath -type f -name "*.$filename"` ; do
152) 		svn mv "$file" "$popath/$pofile"
153) 		echo "$popath/$pofile" > $tmplog
154) 	done
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

155) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

156) 	else
157) 		poexist=0
158) 	fi
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

159) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

160) 	# If the pot file does not exist, convert it with
161) 	# po4a-gettextize, set the right encoding and charset
162) 	# and the correct copyright.
163) 	if [ $poexist = 0 ]
164) 	then
165) 		# Convert it
166) 		po4a-gettextize -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

167) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

168) 		# Check to see if the file exists
169) 		if [ -e "$popath/$pofile" ]
170) 		then
171) 			# We don't want files without
172) 			# content, so check the file first.
173) 			content=`cat "$popath/$pofile" | grep '^#[.]' | wc -l`
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

174) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

175) 			# If the file does not have any
176) 			# content, delete it.
177) 			if [ $content = 0 ] 
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

178) 			then
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

179) 				rm -f "$popath/$pofile"
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

180) 				echo "$popath/$pofile" > $tmplog
181) 			else
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

182) 				# Set the right encoding and charset, as well
183) 				# as the correct copyright holder.
184) 				sed -i '0,/ENCODING/ s/ENCODING/8bit/' "$popath/$pofile"
185) 				sed -i '0,/CHARSET/ s/CHARSET/utf-8/' "$popath/$pofile"
186) 				sed -i "0,/Free Software Foundation, Inc/ s/Free Software Foundation, Inc/$copyright/" "$popath/$pofile"
187) 				
188) 				# And add it to the repository
189) 				svn add "$popath/$pofile"
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

190) 				echo "$popath/$pofile" > $tmplog
191) 			fi
192) 		fi
Runa A. Sandvik convert to po for all langu...

Runa A. Sandvik authored 15 years ago

193) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

194) 		# Update the file with po4a-updatepo to make the
195) 		# word wrapping perfect
196) 		po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
197) 
198) 		# Delete the backup
199) 		rm -f "$popath/$pofile~"
200) 	fi
201) 		
202) 	# If the pot file does exist, calculate the hash first,
203) 	# then update the file, then calculate the hash again.
204) 	if [ $poexist = 1 ]
205) 	then
206) 		# Calculate the hash before we update the file
207) 		before=`grep -vE '^("POT-Creation-Date:|#)' "$popath/$pofile" | md5sum | cut -d " " -f1`
208) 
209) 		# Update the pot file
210) 		po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
211) 
212) 		# Calculate the new hash
213) 		after=`grep -vE '^("POT-Creation-Date:|#)' "$popath/$pofile" | md5sum | cut -d " " -f1`
214) 
215) 		# Delete the backup
216) 		rm -f "$popath/$pofile~"
217) 
218) 		# Now we need to compare the before and after
219) 		# hash. If they match (i.e. nothing has
220) 		# changed), revert the file.
221) 		if [ $before = $after ]
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

222) 		then
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

223) 			svn revert "$popath/$pofile"
224) 			echo "$popath/$pofile" > $tmplog
225) 		else
226) 			echo "$popath/$pofile" > $tmplog
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

227) 		fi
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

228) 	fi
229) 
230) 	# If a file with the same name but different priority
231) 	# exist, then rename the file (we have done so already)
232) 	# and update it with po4a-updatepo to make sure
233) 	# everything else is ok.
234) 	if [ $poexist = 2 ]
235) 	then
236) 		# Update the file
237) 		po4a-updatepo -f wml -m "$file" -p "$popath/$pofile" --master-charset utf-8 -o customtag="$customtag" -o nodefault="$nodefault"
238) 	fi
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

239) 	
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

240) 	# Write to the logfile
241) 	if [ -e $logfile ]
242) 	then
243) 		if [ `cat $tmplog | grep "$popath/$pofile" | wc -l` -eq "0" ]
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

244) 		then
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

245) 			echo "could not process: " "$file" >> $logfile
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

246) 		fi
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

247) 	fi
Runa A. Sandvik put the scripts in website

Runa A. Sandvik authored 15 years ago

248) 
Runa A. Sandvik create pot files for just t...

Runa A. Sandvik authored 14 years ago

249) 	# Delete the temp log
250) 	rm -f $tmplog