Home | History | Annotate | Line # | Download | only in tests
      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