1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#! /bin/sh
# Test of gettext facilities in the Object Pascal language.
# Assumes the following packages are installed: fpk.
# Note: This test fails with fpk 1.0.10 when an UTF-8 locale is present,
# because fpk ignores the locale's encoding. It supports only unibyte locales.
# This here is a quick workaround:
UTF8_LOCALE_UNSUPPORTED=yes
tmpfiles=""
trap 'rm -fr $tmpfiles' 1 2 3 15
tmpfiles="$tmpfiles prog.pp"
cat <<\EOF > prog.pp
program prog;
{$mode delphi}
uses gettext, sysutils;
resourcestring
question = '''Your command, please?'', asked the waiter.';
currencies = '%s is replaced by %s.';
begin
translateresourcestrings('%s/LC_MESSAGES/prog.mo');
writeln(question);
writeln(format(currencies, ['FF', 'EUR']));
end.
EOF
tmpfiles="$tmpfiles prog.o prog.rst prog"
(ppc386 prog.pp) >/dev/null 2>&1 ||
(ppcx64 prog.pp) >/dev/null 2>&1 ||
{
echo "Skipping test: Pascal compiler ppc386 or ppcx64 not found"
rm -fr $tmpfiles; exit 77
}
tmpfiles="$tmpfiles prog.tmp prog.pot"
: ${XGETTEXT=xgettext}
${XGETTEXT} -o prog.tmp --omit-header --add-location prog.rst
test $? = 0 || { rm -fr $tmpfiles; exit 1; }
LC_ALL=C tr -d '\r' < prog.tmp > prog.pot
test $? = 0 || { rm -fr $tmpfiles; exit 1; }
tmpfiles="$tmpfiles prog.ok"
cat <<EOF > prog.ok
#: prog.question
msgid "'Your command, please?', asked the waiter."
msgstr ""
#: prog.currencies
#, object-pascal-format
msgid "%s is replaced by %s."
msgstr ""
EOF
: ${DIFF=diff}
${DIFF} prog.ok prog.pot || exit 1
tmpfiles="$tmpfiles fr.po"
cat <<\EOF > fr.po
msgid ""
msgstr "Content-Type: text/plain; charset=ISO-8859-1\n"
#: prog.question
msgid "'Your command, please?', asked the waiter."
msgstr "«Votre commande, s'il vous plait», dit le garçon."
# Reverse the arguments.
#: prog.currencies
#, object-pascal-format
msgid "%s is replaced by %s."
msgstr "%1:s remplace %0:s."
EOF
tmpfiles="$tmpfiles fr.po.tmp fr.po.new"
: ${MSGMERGE=msgmerge}
${MSGMERGE} -q -o fr.po.tmp fr.po prog.pot
test $? = 0 || { rm -fr $tmpfiles; exit 1; }
LC_ALL=C tr -d '\r' < fr.po.tmp > fr.po.new
test $? = 0 || { rm -fr $tmpfiles; exit 1; }
: ${DIFF=diff}
${DIFF} fr.po fr.po.new || exit 1
tmpfiles="$tmpfiles fr"
test -d fr || mkdir fr
test -d fr/LC_MESSAGES || mkdir fr/LC_MESSAGES
: ${MSGFMT=msgfmt}
${MSGFMT} -o fr/LC_MESSAGES/prog.mo fr.po
tmpfiles="$tmpfiles prog.ok prog.oku prog.out"
: ${DIFF=diff}
cat <<\EOF > prog.ok
«Votre commande, s'il vous plait», dit le garçon.
EUR remplace FF.
EOF
cat <<\EOF > prog.oku
«Votre commande, s'il vous plait», dit le garçon.
EUR remplace FF.
EOF
: ${LOCALE_FR=fr_FR}
: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
if test $LOCALE_FR != none; then
LANGUAGE= LC_ALL= LC_MESSAGES= LC_CTYPE= LANG=$LOCALE_FR ./prog > prog.out || exit 1
: ${DIFF=diff}
${DIFF} prog.ok prog.out || exit 1
fi
if test -z "$UTF8_LOCALE_UNSUPPORTED"; then
if test $LOCALE_FR_UTF8 != none; then
LANGUAGE= LC_ALL= LC_MESSAGES= LC_CTYPE= LANG=$LOCALE_FR_UTF8 ./prog > prog.out || exit 1
: ${DIFF=diff}
${DIFF} prog.oku prog.out || exit 1
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
rm -fr $tmpfiles; exit 77
fi
else
if test $LOCALE_FR = none; then
if test -f /usr/bin/localedef; then
echo "Skipping test: no traditional french locale is installed"
else
echo "Skipping test: no traditional french locale is supported"
fi
rm -fr $tmpfiles; exit 77
fi
fi
rm -fr $tmpfiles
exit 0
|