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