#! /bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . ../src # Test of gettext facilities in the Java language. # Assumes an fr_FR locale is installed. # Assumes the following packages are installed: java. # Note: This test fails when using gcj from GCC 3.1 and GCC 3.2, due to a bug # (libgcj/6576). It is fixed in GCC 3.3. # Test whether we can build and test Java programs. test "${JAVA_CHOICE}" != no || { echo "Skipping test: configured with --disable-java" exit 77 } test "${BUILDJAVA}" = yes || { echo "Skipping test: Java compiler or jar not found" exit 77 } test "${TESTJAVA}" = yes || { echo "Skipping test: Java engine not found" exit 77 } cat <<\EOF > Program.java import java.util.*; import java.io.*; import java.text.*; import gnu.gettext.*; public class Program { public static void main (String[] args) { // Some systems (like Solaris) don't set Locale.getDefault() // as specified by LC_ALL. So set it by hand. Locale.setDefault(new Locale("fr","FR")); EOF case "$host_os" in darwin*) cat <<\EOF >> Program.java // Some systems (like MacOS X) don't set System.out's character encoding // according to LC_ALL, which is what we need for comparison purposes. try { System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out), true, args[1])); } catch (UnsupportedEncodingException e) { } EOF ;; esac cat <<\EOF >> Program.java int n = Integer.parseInt(args[0]); ResourceBundle catalog = ResourceBundle.getBundle("prog"); System.out.println(GettextResource.gettext(catalog,"'Your command, please?', asked the waiter.")); System.out.println(MessageFormat.format(GettextResource.ngettext(catalog,"a piece of cake","{0,number} pieces of cake",n), new Object[] { new Integer(n) })); System.out.println(MessageFormat.format(GettextResource.gettext(catalog,"{0} is replaced by {1}."), new Object[] { "FF", "EUR" })); System.out.println(MessageFormat.format(GettextResource.npgettext(catalog,"++","a piece of cake","{0,number} pieces of cake",n), new Object[] { new Integer(n) })); System.out.println(MessageFormat.format(GettextResource.pgettext(catalog,"++","{0} is replaced by {1}."), new Object[] { "FF", "EUR" })); } } EOF : ${JAVACOMP="/bin/sh ../../javacomp.sh"} CLASSPATH=../../../gettext-runtime/intl-java/libintl.jar ${JAVACOMP} -d . Program.java 2>prog.err \ || { cat prog.err 1>&2; exit 1; } : ${XGETTEXT=xgettext} ${XGETTEXT} -o prog.tmp --omit-header --no-location Program.java || exit 1 LC_ALL=C tr -d '\r' < prog.tmp > prog.pot || exit 1 cat < prog.ok msgid "'Your command, please?', asked the waiter." msgstr "" #, java-format msgid "a piece of cake" msgid_plural "{0,number} pieces of cake" msgstr[0] "" msgstr[1] "" #, java-format msgid "{0} is replaced by {1}." msgstr "" #, java-format msgctxt "++" msgid "a piece of cake" msgid_plural "{0,number} pieces of cake" msgstr[0] "" msgstr[1] "" #, java-format msgctxt "++" msgid "{0} is replaced by {1}." msgstr "" EOF : ${DIFF=diff} ${DIFF} prog.ok prog.pot || exit 1 cat <<\EOF > fr.po msgid "" msgstr "" "Content-Type: text/plain; charset=ISO-8859-1\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "'Your command, please?', asked the waiter." msgstr "«Votre commande, s'il vous plait», dit le garçon." # Les gateaux allemands sont les meilleurs du monde. #, java-format msgid "a piece of cake" msgid_plural "{0,number} pieces of cake" msgstr[0] "un morceau de gateau" msgstr[1] "{0,number} morceaux de gateau" # Reverse the arguments. #, java-format msgid "{0} is replaced by {1}." msgstr "{1} remplace {0}." # Euphemistic formulation. #, java-format msgctxt "++" msgid "a piece of cake" msgid_plural "{0,number} pieces of cake" msgstr[0] "un morceau de gateau succulent" msgstr[1] "{0,number} morceaux de gateau succulent" # Euphemistic formulation. #, java-format msgctxt "++" msgid "{0} is replaced by {1}." msgstr "Le nouveau {1} remplace le vieux {0}." EOF : ${MSGMERGE=msgmerge} ${MSGMERGE} -q -o fr.po.tmp fr.po prog.pot || exit 1 LC_ALL=C tr -d '\r' < fr.po.tmp > fr.po.new || exit 1 : ${DIFF=diff} ${DIFF} fr.po fr.po.new || exit 1 : ${MSGFMT=msgfmt} ${MSGFMT} -j -d . -r prog -l fr fr.po || exit 1 # Test which of the fr_FR locales are installed. : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ../testlocale case $? in 0) ;; 77) LOCALE_FR=none;; *) exit 1;; esac fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ../testlocale case $? in 0) ;; 77) LOCALE_FR_UTF8=none;; *) exit 1;; esac fi if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french locale is installed" else echo "Skipping test: no french locale is supported" fi exit 77 fi : ${DIFF=diff} cat <<\EOF > prog.ok «Votre commande, s'il vous plait», dit le garçon. 2 morceaux de gateau EUR remplace FF. 2 morceaux de gateau succulent Le nouveau EUR remplace le vieux FF. EOF cat <<\EOF > prog.oku «Votre commande, s'il vous plait», dit le garçon. 2 morceaux de gateau EUR remplace FF. 2 morceaux de gateau succulent Le nouveau EUR remplace le vieux FF. EOF : ${LOCALE_FR=fr_FR} : ${LOCALE_FR_UTF8=fr_FR.UTF-8} : ${JAVAEXEC="/bin/sh ../../javaexec.sh"} if test $LOCALE_FR != none; then prepare_locale_ fr $LOCALE_FR LANGUAGE= LC_ALL=$LOCALE_FR CLASSPATH=.:../../../gettext-runtime/intl-java/libintl.jar ${JAVAEXEC} Program 2 ISO-8859-1 > prog.out || exit 1 ${DIFF} prog.ok prog.out || exit 1 fi if test $LOCALE_FR_UTF8 != none; then prepare_locale_ fr $LOCALE_FR_UTF8 LANGUAGE= LC_ALL=$LOCALE_FR_UTF8 CLASSPATH=.:../../../gettext-runtime/intl-java/libintl.jar ${JAVAEXEC} Program 2 UTF-8 > prog.out || exit 1 ${DIFF} prog.oku prog.out || exit 1 fi exit 0