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: 7 UTF8_LOCALE_UNSUPPORTED=yes 8 9 tmpfiles="" 10 trap 'rm -fr $tmpfiles' 1 2 3 15 11 12 tmpfiles="$tmpfiles prog.py" 13 cat <<\EOF > prog.py 14 import gettext 15 16 gettext.textdomain('prog') 17 gettext.bindtextdomain('prog', '.') 18 19 print gettext.gettext("'Your command, please?', asked the waiter.") 20 print gettext.gettext("%(oldCurrency)s is replaced by %(newCurrency)s.") \ 21 % { 'oldCurrency': "FF", 'newCurrency' : "EUR" } 22 EOF 23 24 tmpfiles="$tmpfiles prog.pot" 25 : ${XGETTEXT=xgettext} 26 ${XGETTEXT} -o prog.pot --omit-header --no-location prog.py 27 28 tmpfiles="$tmpfiles prog.ok" 29 cat <<EOF > prog.ok 30 msgid "'Your command, please?', asked the waiter." 31 msgstr "" 32 33 #, python-format 34 msgid "%(oldCurrency)s is replaced by %(newCurrency)s." 35 msgstr "" 36 EOF 37 38 : ${DIFF=diff} 39 ${DIFF} prog.ok prog.pot || exit 1 40 41 tmpfiles="$tmpfiles fr.po" 42 cat <<\EOF > fr.po 43 msgid "" 44 msgstr "" 45 "Content-Type: text/plain; charset=ISO-8859-1\n" 46 "Plural-Forms: nplurals=2; plural=(n > 1);\n" 47 48 msgid "'Your command, please?', asked the waiter." 49 msgstr "Votre commande, s'il vous plait, dit le garon." 50 51 # Reverse the arguments. 52 #, python-format 53 msgid "%(oldCurrency)s is replaced by %(newCurrency)s." 54 msgstr "%(newCurrency)s remplace %(oldCurrency)s." 55 EOF 56 57 tmpfiles="$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 64 tmpfiles="$tmpfiles fr" 65 test -d fr || mkdir fr 66 test -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; } 74 case `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;; 77 esac 78 79 tmpfiles="$tmpfiles prog.ok prog.oku prog.out" 80 : ${DIFF=diff} 81 cat <<\EOF > prog.ok 82 Votre commande, s'il vous plait, dit le garon. 83 EUR remplace FF. 84 EOF 85 cat <<\EOF > prog.oku 86 Votre commande, s'il vous plait, dit le garon. 87 EUR remplace FF. 88 EOF 89 90 : ${LOCALE_FR=fr_FR} 91 : ${LOCALE_FR_UTF8=fr_FR.UTF-8} 92 if 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 95 fi 96 if 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 109 else 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 118 fi 119 120 rm -fr $tmpfiles 121 122 exit 0 123