1#! /bin/sh
2
3# Test of gettext facilities in the Python language.
4
5# Note: This test fails with Python 2.3, 2.4 when an UTF-8 locale is present.
6# It looks like a bug in Python's gettext.py. This here is a quick workaround:
7UTF8_LOCALE_UNSUPPORTED=yes
8
9tmpfiles=""
10trap 'rm -fr $tmpfiles' 1 2 3 15
11
12tmpfiles="$tmpfiles prog.py"
13cat <<\EOF > prog.py
14import gettext
15
16gettext.textdomain('prog')
17gettext.bindtextdomain('prog', '.')
18
19print gettext.gettext("'Your command, please?', asked the waiter.")
20print gettext.gettext("%(oldCurrency)s is replaced by %(newCurrency)s.") \
21      % { 'oldCurrency': "FF", 'newCurrency' : "EUR" }
22EOF
23
24tmpfiles="$tmpfiles prog.pot"
25: ${XGETTEXT=xgettext}
26${XGETTEXT} -o prog.pot --omit-header --no-location prog.py
27
28tmpfiles="$tmpfiles prog.ok"
29cat <<EOF > prog.ok
30msgid "'Your command, please?', asked the waiter."
31msgstr ""
32
33#, python-format
34msgid "%(oldCurrency)s is replaced by %(newCurrency)s."
35msgstr ""
36EOF
37
38: ${DIFF=diff}
39${DIFF} prog.ok prog.pot || exit 1
40
41tmpfiles="$tmpfiles fr.po"
42cat <<\EOF > fr.po
43msgid ""
44msgstr ""
45"Content-Type: text/plain; charset=ISO-8859-1\n"
46"Plural-Forms: nplurals=2; plural=(n > 1);\n"
47
48msgid "'Your command, please?', asked the waiter."
49msgstr "�Votre commande, s'il vous plait�, dit le gar�on."
50
51# Reverse the arguments.
52#, python-format
53msgid "%(oldCurrency)s is replaced by %(newCurrency)s."
54msgstr "%(newCurrency)s remplace %(oldCurrency)s."
55EOF
56
57tmpfiles="$tmpfiles fr.po.new"
58: ${MSGMERGE=msgmerge}
59${MSGMERGE} -q -o fr.po.new fr.po prog.pot
60
61: ${DIFF=diff}
62${DIFF} fr.po fr.po.new || exit 1
63
64tmpfiles="$tmpfiles fr"
65test -d fr || mkdir fr
66test -d fr/LC_MESSAGES || mkdir fr/LC_MESSAGES
67
68: ${MSGFMT=msgfmt}
69${MSGFMT} -o fr/LC_MESSAGES/prog.mo fr.po
70
71# Test for presence of python version 2.0 or newer.
72(python -V) >/dev/null 2>/dev/null \
73  || { echo "Skipping test: python not found"; rm -fr $tmpfiles; exit 77; }
74case `python -c 'import sys; print sys.hexversion >= 0x20000F0'` in
75  1 | True) ;;
76  *) echo "Skipping test: python version too old"; rm -fr $tmpfiles; exit 77;;
77esac
78
79tmpfiles="$tmpfiles prog.ok prog.oku prog.out"
80: ${DIFF=diff}
81cat <<\EOF > prog.ok
82Votre commande, s'il vous plait�, dit le gar�on.
83EUR remplace FF.
84EOF
85cat <<\EOF > prog.oku
86��Votre commande, s'il vous plait��, dit le gar��on.
87EUR remplace FF.
88EOF
89
90: ${LOCALE_FR=fr_FR}
91: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
92if test $LOCALE_FR != none; then
93  LANGUAGE= LC_ALL=$LOCALE_FR python prog.py > prog.out || exit 1
94  ${DIFF} prog.ok prog.out || exit 1
95fi
96if test -z "$UTF8_LOCALE_UNSUPPORTED"; then
97  if test $LOCALE_FR_UTF8 != none; then
98    LANGUAGE= LC_ALL=$LOCALE_FR_UTF8 python prog.py > prog.out || exit 1
99    ${DIFF} prog.oku prog.out || exit 1
100  fi
101  if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then
102    if test -f /usr/bin/localedef; then
103      echo "Skipping test: no french locale is installed"
104    else
105      echo "Skipping test: no french locale is supported"
106    fi
107    rm -fr $tmpfiles; exit 77
108  fi
109else
110  if test $LOCALE_FR = none; then
111    if test -f /usr/bin/localedef; then
112      echo "Skipping test: no traditional french locale is installed"
113    else
114      echo "Skipping test: no traditional french locale is supported"
115    fi
116    rm -fr $tmpfiles; exit 77
117  fi
118fi
119
120rm -fr $tmpfiles
121
122exit 0
123