| #!/bin/sh |
| . "${srcdir=.}/init.sh"; path_prepend_ . ../src |
| |
| # Test of Perl support. |
| |
| cat <<\EOF > xg-pl-1.pl |
| use Locale::Messages qw (textdomain bindtextdomain gettext ngettext dngettext); |
| |
| textdomain "prog"; |
| bindtextdomain "prog", "./"; |
| |
| s/foo/ |
| # stress test for string extraction /xe; |
| |
| print _"'Your command, please?', asked the waiter."; |
| |
| printf ngettext ("a piece of cake", "%d pieces of cake", $n), $n; |
| |
| printf _"%s is replaced by %s.", "FF", "EUR"; |
| |
| # Should be found. |
| printf dngettext prog => ("one file deleted", "%d files deleted"), $n, $n; |
| |
| # Should not be found. |
| printf dngettext ("prog"), ("one file created", "%d files created"), $n, $n; |
| |
| printf dngettext "prog", <<PERL, <<PERL; |
| Singular |
| PERL |
| Plural |
| PERL |
| |
| print <<PERL |
| tied hash $__{ Bareword |
| } |
| tied hash $__->{"quoted string"} |
| tied hash $__->{ "weird |
| formatting"} |
| PERL |
| |
| print $__ # Welcome |
| -> # to the |
| { # Republic of |
| 'Welcome to the Republic of Perl!' # |
| # Perl! |
| }; |
| |
| $! ? ?$__{"pattern match"}? : s # This is no delimiter. |
| {$__{substitution}}<$__-\>{"find me"}>; |
| |
| # No interpolation! |
| m'$__{secret}'; |
| |
| # Multiple here documents invoked from the same line. |
| print gettext <<PERL; print gettext <<PERL; |
| First here document. |
| PERL |
| Second here document. |
| PERL |
| |
| # These are not invalid interpolations, because the dollar is backslashed. |
| printf "%s\n", gettext "abc\$def"; |
| printf "%s\n", gettext "abc\\\$def"; |
| |
| # These are not interpolations. |
| printf "%s\n", gettext 'abc$defg'; |
| printf "%s\n", gettext 'abc\$defg'; |
| printf "%s\n", gettext 'abc\\$defg'; |
| printf "%s\n", gettext 'abc\\\$defg'; |
| |
| # Two consecutive backslashes count as one inside single-quote strings. |
| printf "%s\n", gettext 'ecs\tasy'; |
| printf "%s\n", gettext 'ecs\\tasy'; |
| printf "%s\n", gettext 'ecs\\\tasy'; |
| printf "%s\n", gettext 'ecs\\\\tasy'; |
| printf "%s\n", gettext 'ecs\\\\\tasy'; |
| printf "%s\n", gettext q(ecs\tasy); |
| printf "%s\n", gettext q(ecs\\tasy); |
| printf "%s\n", gettext q(ecs\\\tasy); |
| printf "%s\n", gettext q(ecs\\\\tasy); |
| printf "%s\n", gettext q(ecs\\\\\tasy); |
| |
| # Similarly, inside double-quote strings, two consecutive backslashes count |
| # as one, but the last backslash of a sequence is combined with the following |
| # character if possible. |
| printf "%s\n", gettext "ecs\tasy"; |
| printf "%s\n", gettext "ecs\\tasy"; |
| printf "%s\n", gettext "ecs\\\tasy"; |
| printf "%s\n", gettext "ecs\\\\tasy"; |
| printf "%s\n", gettext "ecs\\\\\tasy"; |
| printf "%s\n", gettext qq(ecs\tasy); |
| printf "%s\n", gettext qq(ecs\\tasy); |
| printf "%s\n", gettext qq(ecs\\\tasy); |
| printf "%s\n", gettext qq(ecs\\\\tasy); |
| printf "%s\n", gettext qq(ecs\\\\\tasy); |
| printf "%s\n", gettext "mari\huana"; |
| printf "%s\n", gettext "mari\\huana"; |
| printf "%s\n", gettext "mari\\\huana"; |
| printf "%s\n", gettext "mari\\\\huana"; |
| printf "%s\n", gettext "mari\\\\\huana"; |
| printf "%s\n", gettext qq(mari\huana); |
| printf "%s\n", gettext qq(mari\\huana); |
| printf "%s\n", gettext qq(mari\\\huana); |
| printf "%s\n", gettext qq(mari\\\\huana); |
| printf "%s\n", gettext qq(mari\\\\\huana); |
| |
| # Recognition of format strings. |
| gettext "This is {only} a brace formatstring."; |
| gettext "This is %s {mixed}."; |
| gettext "This is only %c."; |
| gettext "This is nothing at all."; |
| gettext "And this is %l also no format at all."; |
| |
| # xgettext: no-perl-format, perl-brace-format |
| gettext "The function '{func}' expects '%c' here."; |
| |
| # This is a contradictory case: The same string three times, |
| # with different xgettext comments. |
| # xgettext: perl-brace-format, no-perl-format |
| gettext "Left as an %exercise to {maintainer}."; |
| # xgettext: no-perl-brace-format, perl-format |
| gettext "Left as an %exercise to {maintainer}."; |
| # No xgettext comment this time. |
| gettext "Left as an %exercise to {maintainer}."; |
| |
| # Dollars inside sub argument lists have no effect. |
| sub testFunc($) { } |
| =item TestBug1 |
| If you have gettext()'d foo bar test1'... |
| =cut |
| |
| # Dollars inside sub argument lists have no effect. |
| testFunc = sub ($) { } |
| =item TestBug2 |
| If you have gettext()'d foo bar test2'... |
| =cut |
| |
| # Dollars inside sub argument lists have no effect. |
| sub testFunc($\$;*@) { } |
| =item TestBug3 |
| If you have gettext()'d foo bar test3'... |
| =cut |
| |
| gettext "Before slash-slash"; |
| print $foo // 'undef'; |
| gettext "After slash-slash"; |
| |
| pgettext "context", "message", |
| dpgettext "my domain", "context", "message"; |
| dcpgettext "my domain", "context", "message", LC_MESSAGES; |
| npgettext "context", "one message", "many messages"; |
| dnpgettext "my domain", "context", "one message", "many messages"; |
| dcnpgettext "my domain", "context", "one message", "many messages", |
| LC_MESSAGES; |
| |
| __END__ |
| gettext "Discarded!"; |
| EOF |
| |
| : ${XGETTEXT=xgettext} |
| ${XGETTEXT} --omit-header -n \ |
| -k_ --flag=_:1:pass-perl-format --flag=_:1:pass-perl-brace-format \ |
| -k%__ --flag=%__:1:pass-perl-format --flag=%__:1:pass-perl-brace-format \ |
| -k\$__ --flag=\$__:1:pass-perl-format --flag=\$__:1:pass-perl-brace-format \ |
| -d xg-pl-1.tmp xg-pl-1.pl || Exit 1 |
| LC_ALL=C tr -d '\r' < xg-pl-1.tmp.po > xg-pl-1.po || Exit 1 |
| |
| cat <<\EOF > xg-pl-1.ok |
| #: xg-pl-1.pl:9 |
| msgid "'Your command, please?', asked the waiter." |
| msgstr "" |
| |
| #: xg-pl-1.pl:11 |
| #, perl-format |
| msgid "a piece of cake" |
| msgid_plural "%d pieces of cake" |
| msgstr[0] "" |
| msgstr[1] "" |
| |
| #: xg-pl-1.pl:13 |
| #, perl-format |
| msgid "%s is replaced by %s." |
| msgstr "" |
| |
| #: xg-pl-1.pl:16 |
| #, perl-format |
| msgid "one file deleted" |
| msgid_plural "%d files deleted" |
| msgstr[0] "" |
| msgstr[1] "" |
| |
| #: xg-pl-1.pl:22 |
| #, perl-format |
| msgid "Singular\n" |
| msgid_plural "Plural\n" |
| msgstr[0] "" |
| msgstr[1] "" |
| |
| #: xg-pl-1.pl:28 |
| msgid "Bareword" |
| msgstr "" |
| |
| #: xg-pl-1.pl:30 |
| msgid "quoted string" |
| msgstr "" |
| |
| #: xg-pl-1.pl:31 |
| msgid "" |
| "weird\n" |
| "formatting" |
| msgstr "" |
| |
| #: xg-pl-1.pl:38 |
| msgid "Welcome to the Republic of Perl!" |
| msgstr "" |
| |
| #: xg-pl-1.pl:42 |
| msgid "pattern match" |
| msgstr "" |
| |
| #: xg-pl-1.pl:43 |
| msgid "substitution" |
| msgstr "" |
| |
| #: xg-pl-1.pl:43 |
| msgid "find me" |
| msgstr "" |
| |
| #: xg-pl-1.pl:50 |
| msgid "First here document.\n" |
| msgstr "" |
| |
| #: xg-pl-1.pl:52 |
| msgid "Second here document.\n" |
| msgstr "" |
| |
| #: xg-pl-1.pl:56 |
| msgid "abc$def" |
| msgstr "" |
| |
| #: xg-pl-1.pl:57 |
| msgid "abc\\$def" |
| msgstr "" |
| |
| #: xg-pl-1.pl:60 |
| msgid "abc$defg" |
| msgstr "" |
| |
| #: xg-pl-1.pl:61 xg-pl-1.pl:62 |
| msgid "abc\\$defg" |
| msgstr "" |
| |
| #: xg-pl-1.pl:63 |
| msgid "abc\\\\$defg" |
| msgstr "" |
| |
| #: xg-pl-1.pl:66 xg-pl-1.pl:67 xg-pl-1.pl:71 xg-pl-1.pl:72 xg-pl-1.pl:81 |
| #: xg-pl-1.pl:86 |
| msgid "ecs\\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:68 xg-pl-1.pl:69 xg-pl-1.pl:73 xg-pl-1.pl:74 xg-pl-1.pl:83 |
| #: xg-pl-1.pl:88 |
| msgid "ecs\\\\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:70 xg-pl-1.pl:75 |
| msgid "ecs\\\\\\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:80 xg-pl-1.pl:85 |
| msgid "ecs\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:82 xg-pl-1.pl:87 |
| msgid "ecs\\\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:84 xg-pl-1.pl:89 |
| msgid "ecs\\\\\tasy" |
| msgstr "" |
| |
| #: xg-pl-1.pl:90 xg-pl-1.pl:95 |
| msgid "marihuana" |
| msgstr "" |
| |
| #: xg-pl-1.pl:91 xg-pl-1.pl:92 xg-pl-1.pl:96 xg-pl-1.pl:97 |
| msgid "mari\\huana" |
| msgstr "" |
| |
| #: xg-pl-1.pl:93 xg-pl-1.pl:94 xg-pl-1.pl:98 xg-pl-1.pl:99 |
| msgid "mari\\\\huana" |
| msgstr "" |
| |
| #: xg-pl-1.pl:102 |
| #, perl-brace-format |
| msgid "This is {only} a brace formatstring." |
| msgstr "" |
| |
| #: xg-pl-1.pl:103 |
| #, perl-format, perl-brace-format |
| msgid "This is %s {mixed}." |
| msgstr "" |
| |
| #: xg-pl-1.pl:104 |
| #, perl-format |
| msgid "This is only %c." |
| msgstr "" |
| |
| #: xg-pl-1.pl:105 |
| msgid "This is nothing at all." |
| msgstr "" |
| |
| #: xg-pl-1.pl:106 |
| msgid "And this is %l also no format at all." |
| msgstr "" |
| |
| #: xg-pl-1.pl:109 |
| #, no-perl-format, perl-brace-format |
| msgid "The function '{func}' expects '%c' here." |
| msgstr "" |
| |
| #: xg-pl-1.pl:114 xg-pl-1.pl:116 xg-pl-1.pl:118 |
| #, perl-format, no-perl-brace-format |
| msgid "Left as an %exercise to {maintainer}." |
| msgstr "" |
| |
| #: xg-pl-1.pl:138 |
| msgid "Before slash-slash" |
| msgstr "" |
| |
| #: xg-pl-1.pl:140 |
| msgid "After slash-slash" |
| msgstr "" |
| |
| #: xg-pl-1.pl:142 xg-pl-1.pl:143 xg-pl-1.pl:144 |
| msgctxt "context" |
| msgid "message" |
| msgstr "" |
| |
| #: xg-pl-1.pl:145 xg-pl-1.pl:146 xg-pl-1.pl:147 |
| msgctxt "context" |
| msgid "one message" |
| msgid_plural "many messages" |
| msgstr[0] "" |
| msgstr[1] "" |
| EOF |
| |
| : ${DIFF=diff} |
| ${DIFF} xg-pl-1.ok xg-pl-1.po |
| result=$? |
| |
| exit $result |