website annotate lib/i18n-info.sh @ rev 1089

i18n.php: add scripts to auto-generate table
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Jul 27 13:59:05 2012 +0000 (2012-07-27)
parents
children 359e00fe4d11
rev   line source
al@1089 1 #!/bin/sh
al@1089 2
al@1089 3 # for english po statistics using `msgfmt --statistics`
al@1089 4 LC_ALL=C; export LC_ALL
al@1089 5
al@1089 6 HG_URL="http://hg.slitaz.org"
al@1089 7 INFO_FILE="/var/cache/slitaz/website/i18n.html"
al@1089 8 mkdir -p "/var/cache/slitaz/website"
al@1089 9 touch "${INFO_FILE}.new"
al@1089 10 echo "" > "${INFO_FILE}.new"
al@1089 11
al@1089 12 # echo to file
al@1089 13 echof()
al@1089 14 {
al@1089 15 echo "$@" >> "${INFO_FILE}.new"
al@1089 16 }
al@1089 17
al@1089 18 # print table cells with 'pot' and 'po's
al@1089 19 out_pot_po()
al@1089 20 {
al@1089 21 TMP_PO="/tmp/i18n.po"
al@1089 22 # get all links to files in folder
al@1089 23 LINKS=$(wget "$HG_URL/$PROJ_BASE/$PROJ_PODIR/" -q -O - | \
al@1089 24 grep -A 1 "filename" | \
al@1089 25 grep "href" | \
al@1089 26 sed 's|.*"\([^"]*\)".*|http://hg.slitaz.org\1|g' | \
al@1089 27 sed 's|/file/[^/]*/|/raw-file/tip/|g')
al@1089 28 # get link to 'pot' and print cell
al@1089 29 LINK_POT=$(echo "$LINKS" | grep -e '\.pot$')
al@1089 30
al@1089 31 echof "
al@1089 32 <td class=\"pot\">
al@1089 33 <a href=\"$LINK_POT\">
al@1089 34 $(echo $LINK_POT | sed 's|.*/\([^/]*\.pot\)$|\1|')</a></td>
al@1089 35 <td class=\"po\">"
al@1089 36
al@1089 37 # process 'po's
al@1089 38 IFS="
al@1089 39 "
al@1089 40 for FILE in $(echo "$LINKS" | grep -e '.po$'); do
al@1089 41 # temp download
al@1089 42 wget $FILE -q -O $TMP_PO
al@1089 43 # get stats
al@1089 44 STAT=$(msgfmt --statistics $TMP_PO 2>&1 | sed 's|[^0-9 ]||g')
al@1089 45 rm $TMP_PO
al@1089 46 # language; number of translated and untranslated entries
al@1089 47 LNG=$(echo $FILE | sed 's|.*/\([^/]*\)\.po$|\1|')
al@1089 48 TRAN=$(echo $STAT | cut -d" " -f1)
al@1089 49 UNTR=$(($(echo $STAT | awk '{print $2}') + 0))
al@1089 50 # percents done
al@1089 51 PCNT=$(($TRAN * 100 / ($TRAN + $UNTR)))
al@1089 52 echof " <a href=\"$FILE\">$LNG<hr/>${PCNT}%</a>"
al@1089 53 done
al@1089 54 echof " </td>"
al@1089 55 }
al@1089 56
al@1089 57
al@1089 58 # print table cell with html documentations
al@1089 59 out_doc()
al@1089 60 {
al@1089 61 # get all links to files in folder
al@1089 62 LINKS=$(wget "$HG_URL/$PROJ_BASE/$PROJ_DOCDIR/" -q -O - | \
al@1089 63 grep -A 1 "filename" | \
al@1089 64 grep "href" | \
al@1089 65 sed 's|.*"\([^"]*\)".*|http://hg.slitaz.org\1|g' | \
al@1089 66 sed 's|/file/[^/]*/|/raw-file/tip/|g')
al@1089 67
al@1089 68 echof " <td class=\"docs\">"
al@1089 69
al@1089 70 IFS="
al@1089 71 "
al@1089 72 # get name of subproject, example: subproject 'tazusb-box' from 'tazusb'
al@1089 73 SUB_PROJ=$(echo "$PROJ_PODIR" | sed 's|.*/\(.*\)|\1|')
al@1089 74 for DOCUMENT in $(echo "$LINKS" | grep -e '.html$'); do
al@1089 75 # strip project and subproject names from doc filename
al@1089 76 NAME_DOC=$(echo $DOCUMENT | \
al@1089 77 sed 's|.*/\([^/]*\)\.html$|\1|' | \
al@1089 78 sed 's|'$PROJ_BASE'\.||; s|'$SUB_PROJ'\.||')
al@1089 79 # first part of filename, example faq.en -> faq
al@1089 80 NAME_DOC1=$(echo $NAME_DOC | cut -d"." -f1)
al@1089 81 # second part of filename, faq.en -> en
al@1089 82 NAME_DOC2=$(echo $NAME_DOC | cut -d"." -f2)
al@1089 83 # if filename have only [lang] then rename it to doc.[lang]
al@1089 84 if [ "x$NAME_DOC2" == "x" ]; then
al@1089 85 NAME_DOC2=$NAME_DOC1
al@1089 86 NAME_DOC1="doc"
al@1089 87 fi
al@1089 88 # not print 'linked' common documents, only localized ones
al@1089 89 # (often link [project].html pointed to [project].en.html)
al@1089 90 if [ "$NAME_DOC" != "$SUB_PROJ" ] && [ "$NAME_DOC" != "$PROJ_BASE" ]; then
al@1089 91 echof " <a href=\"$DOCUMENT\">$NAME_DOC1<br/>$NAME_DOC2</a>"
al@1089 92 fi
al@1089 93 done
al@1089 94 echof " </td>"
al@1089 95 }
al@1089 96
al@1089 97
al@1089 98 # print table cell with link to .desktop files
al@1089 99 out_app()
al@1089 100 {
al@1089 101 APP_DIR="$HG_URL/$PROJ_BASE/file/tip/$PROJ_APPDIR"
al@1089 102 PAGE=$(wget $APP_DIR -q -O -)
al@1089 103 LINKS=$(echo "$PAGE" | grep -A 1 "filename" | grep "href" | wc -l)
al@1089 104 # plural form
al@1089 105 if [ "$LINKS" == "1" ]; then
al@1089 106 APP_TEXT="1<br/>item"
al@1089 107 else
al@1089 108 APP_TEXT="$LINKS<br/>items"
al@1089 109 fi
al@1089 110
al@1089 111 # rowspan: folder with desktop files is one for project
al@1089 112 # combine all subprojects
al@1089 113 echof " <td class=\"desk\"$ROWSPAN><a href=\"$APP_DIR\">$APP_TEXT</a></td>"
al@1089 114 }
al@1089 115
al@1089 116
al@1089 117
al@1089 118 # standard path to folder with 'pot' and 'po's
al@1089 119 S="file/tip/po"
al@1089 120 # standard path to doc folder
al@1089 121 D="file/tip/doc"
al@1089 122
al@1089 123 # list of all processed projects; fields description:
al@1089 124 # [1]: Human readable project name (once)
al@1089 125 # [2]: Project base: http://hg.slitaz.org/[2]
al@1089 126 # [3]: Spanned cells (number or empty)
al@1089 127 # [4]: Pot&po folder: http://hg.slitaz.org/[2]/[4]/
al@1089 128 # [5]: Docs folder: http://hg.slitaz.org/[2]/[5]/
al@1089 129 # [6]: Apps folder: http://hg.slitaz.org/[2]/file/tip/[6]/
al@1089 130 PROJ_LIST="
al@1089 131 SliTaz Base Files|slitaz-base-files||$S||rootfs/usr/share/applications
al@1089 132 pkgs.slitaz.org|slitaz-forge/file/tip/pkgs||po||
al@1089 133 SliTaz Pizza|slitaz-pizza||$S|$D|
al@1089 134 SliTaz Tools|slitaz-tools|5|$S/slitaz-boxes||applications
al@1089 135 |slitaz-tools||$S/slitaz-tools||
al@1089 136 |slitaz-tools||$S/tazbox||
al@1089 137 |slitaz-tools||$S/tazdrop||
al@1089 138 |slitaz-tools||$S/tazinst|$D|
al@1089 139 SSFS|ssfs|2|$S/server||data
al@1089 140 |ssfs||$S/ssfs||
al@1089 141 TazBug|tazbug||$S||data
al@1089 142 TazLito|tazlito||$S/tazlito-wiz|$D|applications
al@1089 143 TazPanel|tazpanel||$S|$D|data
al@1089 144 TazPkg|tazpkg|2|$S/tazpkg|$D|applications
al@1089 145 |tazpkg||$S/tazpkg-notify||
al@1089 146 TazUsb|tazusb|2|$S/tazusb|$D|applications
al@1089 147 |tazusb||$S/tazusb-box||"
al@1089 148
al@1089 149 # print table header
al@1089 150 echof "
al@1089 151 <table>
al@1089 152 <thead class=\"thead\">
al@1089 153 <tr><td>Project</td>
al@1089 154 <td>POT file</td>
al@1089 155 <td>PO files</td>
al@1089 156 <td>Docs</td>
al@1089 157 <td>Menu</td>
al@1089 158 </tr>
al@1089 159 </thead>
al@1089 160 <tbody>"
al@1089 161
al@1089 162
al@1089 163 # main loop
al@1089 164 IFS="
al@1089 165 "
al@1089 166 for PROJECT in $PROJ_LIST
al@1089 167 do
al@1089 168 IFS="|"
al@1089 169 echo "$PROJECT" | while read P_NAME PROJ_BASE P_SPAN PROJ_PODIR PROJ_DOCDIR PROJ_APPDIR
al@1089 170 do
al@1089 171 if [ -n "$P_SPAN" ]; then
al@1089 172 ROWSPAN=" rowspan=\"$P_SPAN\""
al@1089 173 else
al@1089 174 ROWSPAN=""
al@1089 175 fi
al@1089 176
al@1089 177 echof -n " <tr>"
al@1089 178
al@1089 179 if [ -n "$P_NAME" ]; then
al@1089 180 echof "<td$ROWSPAN class=\"proj\">
al@1089 181 <a href=\"http://hg.slitaz.org/$PROJ_BASE\">$P_NAME</a></td>"
al@1089 182 else
al@1089 183 echof "<!-- td -->"
al@1089 184 fi
al@1089 185
al@1089 186 # unconditional out pot and po
al@1089 187 out_pot_po
al@1089 188
al@1089 189 # out doc if exists
al@1089 190 if [ -n "$PROJ_DOCDIR" ]; then
al@1089 191 out_doc
al@1089 192 else
al@1089 193 echof " <td class=\"docs\">&nbsp;</td>"
al@1089 194 fi
al@1089 195
al@1089 196 # out apps if exists
al@1089 197 if [ -n "$PROJ_APPDIR" ]; then
al@1089 198 out_app
al@1089 199 elif [ -n "$P_NAME" ]; then
al@1089 200 echof " <td class=\"desk\">&nbsp;</td>"
al@1089 201 fi
al@1089 202
al@1089 203
al@1089 204 echof " </tr>"
al@1089 205
al@1089 206 IFS="
al@1089 207 "
al@1089 208 done
al@1089 209 done
al@1089 210
al@1089 211 echof " </tbody>
al@1089 212 </table>
al@1089 213 <p>Updated: $(date '+%x %X')</p>"
al@1089 214
al@1089 215 mv "${INFO_FILE}.new" "$INFO_FILE"
al@1089 216 # the end