1#!/bin/sh 2 3# see doc/translation.txt for more info 4 5updatepot() 6{ 7 # check we have all files from POTFILES present 8 while read f 9 do 10 if [ ! -f "$f" ]; then 11 echo "cannot find file '$f' from POTFILES" 12 exit 1 13 fi 14 done < locale/POTFILES 15 16 grep ui_MainWindow.h locale/POTFILES >/dev/null 2>/dev/null 17 if [ $? -ne 0 ] ; then 18 echo "cannot find .../ui_xxxxx.h files. perhaps if you run make...?" 19 exit 1 20 fi 21 22 # extract example names from the index JSON file 23 cat -n examples/examples.json \ 24 | grep '\[$' | sed -e 's/^[ \ŧ]*//; s/:.*//' \ 25 | awk '{ printf "#: examples/examples.json:%d\nmsgid %s\nmsgstr \"\"\n\n", $1, $2 }' \ 26 > ./locale/json-strings.pot 27 28 # extract strings from appdata file 29 itstool -o ./locale/appdata-strings.pot ./openscad.appdata.xml.in --its=./contrib/appdata.its 30 31 VER=`date +"%Y.%m.%d"` 32 OPTS= 33 OPTS=$OPTS' --package-name=OpenSCAD' 34 OPTS=$OPTS' --package-version='$VER 35 OPTS=$OPTS' --default-domain=openscad' 36 OPTS=$OPTS' --language=c++' 37 OPTS=$OPTS' --keyword=' #without WORD means not to use default keywords 38 OPTS=$OPTS' --keyword=_' 39 OPTS=$OPTS' --keyword=q_' 40 OPTS=$OPTS' --keyword=_:1,2c' 41 OPTS=$OPTS' --keyword=q_:1,2c' 42 OPTS=$OPTS' --keyword=ngettext:1,2' 43 OPTS=$OPTS' --files-from=./locale/POTFILES' 44 cmd="${GETTEXT_PATH}xgettext "$OPTS' -o ./locale/openscad-tmp.pot' 45 echo $cmd 46 $cmd 47 if [ ! $? = 0 ]; then 48 echo error running xgettext 49 exit 1 50 fi 51 52 cmd="${GETTEXT_PATH}msgcat -o ./locale/openscad.pot ./locale/openscad-tmp.pot ./locale/json-strings.pot ./locale/appdata-strings.pot" 53 echo $cmd 54 $cmd 55 if [ ! $? = 0 ]; then 56 echo error running msgcat 57 exit 1 58 fi 59 60 sed -e s/"CHARSET"/"UTF-8"/g ./locale/openscad.pot > ./locale/openscad.pot.new && mv ./locale/openscad.pot.new ./locale/openscad.pot 61 rm -f ./locale/json-strings.pot ./locale/openscad-tmp.pot ./locale/appdata-strings.pot 62} 63 64updatepo() 65{ 66 for LANGCODE in `cat ./locale/LINGUAS | grep -v "#"`; do 67 OPTS='--update --backup=t' 68 cmd="$GETTEXT_PATH"'msgmerge '$OPTS' ./locale/'$LANGCODE'.po ./locale/openscad.pot' 69 echo $cmd 70 $cmd 71 if [ ! $? = 0 ]; then 72 echo error running msgmerge 73 exit 1 74 fi 75 done 76} 77 78updatemo() 79{ 80 SUFFIX="$1" 81 for LANGCODE in `cat locale/LINGUAS | grep -v "#"`; do 82 mkdir -p ./locale/$LANGCODE/LC_MESSAGES 83 OPTS='-c -v' 84 cmd="$GETTEXT_PATH"'msgfmt '$OPTS' -o ./locale/'$LANGCODE'/LC_MESSAGES/openscad.mo ./locale/'$LANGCODE'.po' 85 echo $cmd 86 $cmd 87 if [ ! $? = 0 ]; then 88 echo error running msgfmt 89 exit 1 90 fi 91 done 92 93 if which itstool > /dev/null 2>&1; then 94 # ugly workaround for bug https://bugs.freedesktop.org/show_bug.cgi?id=90937 95 for LANGCODE in `cat locale/LINGUAS | grep -v "#"`; do 96 ln -s openscad.mo ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo 97 done 98 99 # generate translated appdata file 100 itstool -j ./openscad.appdata.xml.in -o ./openscad.appdata.xml ./locale/*/LC_MESSAGES/[a-z][a-z].mo 101 102 # clean the mess 103 for LANGCODE in `cat locale/LINGUAS | grep -v "#"`; do 104 unlink ./locale/$LANGCODE/LC_MESSAGES/$LANGCODE.mo 105 done 106 else 107 if [ x"$(uname -s)" = x"Linux" ]; then 108 echo "itstool missing, won't apply translations to openscad.appdata.xml" 109 fi 110 cp -f ./openscad.appdata.xml.in ./openscad.appdata.xml 111 fi 112 113 if test -n "$SUFFIX" 114 then 115 echo "using suffix '$SUFFIX'" 116 fi 117 cp -f ./icons/openscad.desktop.in ./icons/openscad.desktop 118 sed -i -e "s,@@openscad@@,openscad${SUFFIX}," ./icons/openscad.desktop 119 sed -i -e "s,</id>,${SUFFIX}\\0,; s/openscad.desktop/openscad${SUFFIX}.desktop/; s/openscad.png/openscad${SUFFIX}.png/" ./openscad.appdata.xml 120} 121 122GETTEXT_PATH="" 123#if [ "x$OPENSCAD_LIBRARIES" != x ]; then 124# GETTEXT_PATH="$OPENSCAD_LIBRARIES/bin/" 125#fi 126 127SCRIPTDIR="`dirname \"$0\"`" 128TOPDIR="`dirname \"$SCRIPTDIR\"`" 129 130cd "$TOPDIR" || exit 1 131 132if [ "x$1" = xupdatemo ]; then 133 updatemo "$2" 134else 135 echo "Generating POTFILES..." 136 ./scripts/generate-potfiles.sh > locale/POTFILES 137 updatepot && updatepo && updatemo "" 138fi 139 140