UpstreamToKDE
transfer-upstream-to-kde.sh
1 #!/bin/bash
2 ### How to transfer upstream to KDE translations that are done on Launchpad.
3
4 ######################################################################################
5 ## How to get all the translations from the Launchpad
6 ######################################################################################
7 ##
8 ## Reference:
9 ## https://wiki.ubuntu.com/Translations/KnowledgeBase/Exporting#Full
10 ##
11 ## Where to get them:
12 ## https://translations.launchpad.net/ubuntu/natty/+language-packs
13 ##
14 ## Get the base pack and the latest update:
15 ## wget http://launchpadlibrarian.net/70194188/ubuntu-natty-translations.tar.gz
16 ## wget http://launchpadlibrarian.net/71172166/ubuntu-natty-translations-update.tar.gz
17 ######################################################################################
18
19 ### downloaded language packs
20 translations="./ubuntu-natty-translations.tar.gz"
21 translations_update="./ubuntu-natty-translations-update.tar.gz"
22
23 ### set the code of the language to be extracted
24 lng="sq"
25
26 ### get the names of the files corresponding to the given language
27 tar tvfz ubuntu-natty-translations.tar.gz | grep "/$lng/" | gawk '{print $6}' > extract-files.txt
28
29 ### extract these files from the language pack archives
30 ### after the extraction, there will be a directory named:
31 ### rosseta-natty/$lng/LC_MESSAGES
32 tar --extract --gunzip --files-from=extract-files.txt --overwrite --file=$translations
33 tar --extract --gunzip --files-from=extract-files.txt --overwrite --file=$translations_update
34
35 ### get the names of all the translation files in kde templates
36 find l10n-kde4/templates/messages/ -name '*.pot' | sed -e 's!^.*/!!' -e 's/t$//' > po-files.txt
37
38
39 ### copy relevant traslated files to a temporary directory
40 check_dir="${lng}1/"
41 mkdir -p $check_dir
42 for file in $(cat po-files.txt)
43 do
44 echo $file
45 cp rosetta-natty/$lng/LC_MESSAGES/$file $check_dir
46 done
47
48 ### several checks for errors
49 ### see also:
50 ### http://i18n.kde.org/docs/translation-howto/check-gui.html
51 ### http://translate.sourceforge.net/wiki/toolkit/using_pofilter
52 msgfmt --check $lng_dir/
53 scripts/msgfmt-test.sh $lng_dir/*.po
54 pofilter -i $check_dir -o ${check_dir}_err \
55 --kde -t accelerators -t escapes -t nplurals -t tab -t xmltags
56
57 ### try to fix all the errors and when everything is OK
58 ### commit PO files to the l10n-kde SVN
59
60 ### transfer checked files to the working dir of l10n-kde
61 find l10n-kde4/templates/messages/ -name '*.pot' > pot-files.txt
62 for pot_file in $(cat pot-files.txt)
63 do
64 dir=$(dirname $pot_file)
65 dir=${dir##templates/messages/} ## remove leading path: templates/messages/
66 file=$(basename $pot_file)
67 file=${file%%t} ## remove the trailing 't' (so that extension becomes .po)
68
69 if [ -f $check_dir/$file ]
70 then
71 mkdir -p l10n-kde4/$lng/messages/$dir
72 cp $check_dir/$file l10n-kde4/$lng/messages/$dir/
73 # echo $file
74 fi
75 done
76
77 ### add the new files to the l10n-kde SVN and commit
78 cd l10n-kde4/$lng/messages/
79 svn status | grep '?' | gawk '{print $2}' | xargs svn add
80 svn commit -m 'importing upstream to kde PO files modified on launchpad'
81
82 ### clean up
83 # cd $(dirname $0)
84 # rm extract-files.txt
85 # rm $translations
86 # rm po-files.txt
87 # rm pot-files.txt
88 # rm translations_update
89 # rm -rf $check_dir
90 # rm -rf ${check_dir}_err
91
msgfmt-test.sh
1 #!/bin/bash
2
3 ### http://www.translate.org.za/blogs/dwayne/en/content/continuous-integration-can-it-work-software-localisation
4
5 files=$*
6
7 # local variables
8 message=""
9 body=""
10 failures=0
11 successes=0
12
13 function failure
14 {
15 pofile=$1
16 body=$(echo $body; echo "\n"; echo "$message\n\n")
17 message=""
18 failures=$(($failures + 1))
19 }
20
21 function success
22 {
23 pofile=$1
24 body=$(echo $body; echo "\n")
25 message=""
26 successes=$(($successes + 1))
27 }
28
29 function run_msgfmt
30 {
31 pofile=$1
32 exit_status=$(msgfmt -cv -o /dev/null $pofile 2>/dev/null > /dev/null; echo $?)
33 message=$(msgfmt -cv -o /dev/null $pofile 2>/dev/stdout | while read i; do echo "$i\n" ; done)
34 return $exit_status
35 }
36
37 function print_header
38 {
39 echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
40 echo ""
41 }
42
43 function print_body
44 {
45 cat -
46 echo -e $body
47 }
48
49 function print_footer
50 {
51 cat -
52 echo ""
53 }
54
55 for pofile in $files
56 do
57 run_msgfmt $pofile && success $pofile || failure $pofile
58 done
59
60 print_header |
61 print_body |
62 print_footer
UpstreamToKDE (last edited 2011-05-10 06:42:44 by 109)