From: "Jakub Narębski" <jnareb@gmail.com>
To: Vasco Almeida <vascomalmeida@sapo.pt>,
Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org
Cc: "Jiang Xin" <worldhello.net@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"David Aguilar" <davvid@gmail.com>
Subject: Re: [PATCH v2 03/11] i18n: add--interactive: mark strings with interpolation for translation
Date: Fri, 30 Sep 2016 19:52:52 +0200 [thread overview]
Message-ID: <b8c25ae3-143c-3e9b-0c7b-115a9b4756ae@gmail.com> (raw)
In-Reply-To: <1472646690-9699-4-git-send-email-vascomalmeida@sapo.pt>
W dniu 31.08.2016 o 14:31, Vasco Almeida pisze:
> Use of sprintf following die or error_msg is necessary for placeholder
> substitution take place.
No, it is not. Though I don't think that we have in out Git::I18N
the support for Perl i18n placeholder substitution.
From gettext manual:
https://www.gnu.org/software/gettext/manual/gettext.html#perl_002dformat
15.3.16 Perl Format Strings
There are two kinds format strings in Perl: those acceptable to the Perl
built-in function printf, labelled as ‘perl-format’, and those acceptable
to the libintl-perl function __x, labelled as ‘perl-brace-format’.
Perl printf format strings are described in the sprintf section of
‘man perlfunc’.
Perl brace format strings are described in the Locale::TextDomain(3pm)
manual page of the CPAN package libintl-perl. In brief, Perl format uses
placeholders put between braces (‘{’ and ‘}’). The placeholder must have
the syntax of simple identifiers.
Git doesn't use Locale::TextDomain, from what I understand, to provide
fallback in no-gettext case. Also, Locale::TextDomain is not in core.
The syntax, with the help of shorthand helper function, looks like this:
http://search.cpan.org/dist/libintl-perl/lib/Locale/TextDomain.pm#EXPORTED_FUNCTIONS
https://metacpan.org/pod/Locale::TextDomain#EXPORTED-FUNCTIONS
__x MSGID, ID1 => VAL1, ID2 => VAL2, ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
One of the nicest features in Perl is its capability to interpolate
variables into strings:
print "This is the $color $thing.\n";
This nice feature might con you into thinking that you could now write
print __"This is the $color $thing.\n";
[But this doesn't work...]
[...] The Perl backend to GNU gettext has defined an alternative format
[to using printf / sprintf] for interpolatable strings:
"This is the {color} {thing}.\n";
Instead of Perl variables you use place-holders (legal Perl variables
are also legal place-holders) in curly braces, and then you call
print __x ("This is the {color} {thing}.\n",
thing => $thang,
color => $color);
> Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt>
> ---
> git-add--interactive.perl | 26 ++++++++++++++------------
> 1 file changed, 14 insertions(+), 12 deletions(-)
>
> diff --git a/git-add--interactive.perl b/git-add--interactive.perl
> index e11a33d..4e1e857 100755
> --- a/git-add--interactive.perl
> +++ b/git-add--interactive.perl
> @@ -612,12 +612,12 @@ sub list_and_choose {
> else {
> $bottom = $top = find_unique($choice, @stuff);
> if (!defined $bottom) {
> - error_msg "Huh ($choice)?\n";
> + error_msg sprintf(__("Huh (%s)?\n"), $choice);
So this would be, self explained without need of comment
for translators:
+ error_msg __x ("Huh ({choice})?\n"), choice => $choice);
> next TOPLOOP;
> }
Though this is probably more work that you wanted to do.
The __x might be defined like this (borrowing from Locale::TextDomain),
which needs to be put into perl/Git/I18N.pm
sub __ ($);
sub __expand ($%);
# With interpolation.
sub __x ($@)
{
my ($msgid, %vars) = @_;
return __expand (__($msgid), %vars);
}
sub __expand ($%)
{
my ($translation, %args) = @_;
my $re = join '|', map { quotemeta $_ } keys %args;
$translation =~ s/\{($re)\}/defined $args{$1} ? $args{$1} : "{$1}"/ge;
return $translation;
}
Best regards,
--
Jakub Narębski
next prev parent reply other threads:[~2016-09-30 17:53 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-31 12:31 [PATCH v2 00/11] Mark strings in perl script for translation Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 01/11] i18n: add--interactive: mark strings " Vasco Almeida
2016-09-25 22:52 ` Junio C Hamano
2016-09-28 12:43 ` Vasco Almeida
2016-09-28 14:29 ` Duy Nguyen
2016-09-28 16:59 ` Junio C Hamano
2016-09-29 21:21 ` Jakub Narębski
2016-08-31 12:31 ` [PATCH v2 02/11] i18n: add--interactive: mark simple here documents " Vasco Almeida
2016-09-25 22:54 ` Junio C Hamano
2016-09-29 14:31 ` Vasco Almeida
2016-09-29 17:05 ` Junio C Hamano
2016-09-29 21:27 ` Jakub Narębski
2016-09-29 21:31 ` Junio C Hamano
2016-10-03 12:43 ` Vasco Almeida
2016-09-30 17:26 ` Jakub Narębski
2016-10-03 13:21 ` Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 03/11] i18n: add--interactive: mark strings with interpolation " Vasco Almeida
2016-09-25 22:57 ` Junio C Hamano
2016-09-30 17:52 ` Jakub Narębski [this message]
2016-10-03 12:41 ` Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 04/11] i18n: add--interactive: mark plural strings Vasco Almeida
2016-09-26 18:15 ` Vasco Almeida
2016-09-26 18:21 ` Junio C Hamano
2016-10-01 16:49 ` Jakub Narębski
2016-10-03 12:46 ` Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 05/11] i18n: add--interactive: mark message for translation Vasco Almeida
2016-09-25 23:09 ` Junio C Hamano
2016-10-01 17:09 ` Jakub Narębski
2016-10-03 12:49 ` Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 06/11] i18n: add--interactive: i18n of help_patch_cmd Vasco Almeida
2016-09-25 23:11 ` Junio C Hamano
2016-08-31 12:31 ` [PATCH v2 07/11] i18n: add--interactive: mark edit_hunk_manually message for translation Vasco Almeida
2016-10-01 18:48 ` Jakub Narębski
2016-08-31 12:31 ` [PATCH v2 08/11] i18n: send-email: mark strings " Vasco Almeida
2016-09-25 23:14 ` Junio C Hamano
2016-09-25 23:18 ` Junio C Hamano
2016-10-01 18:55 ` Jakub Narębski
2016-08-31 12:31 ` [PATCH v2 09/11] i18n: send-email: mark warnings and errors " Vasco Almeida
2016-10-01 19:51 ` Jakub Narębski
2016-08-31 12:31 ` [PATCH v2 10/11] i18n: send-email: mark string with interpolation " Vasco Almeida
2016-08-31 12:31 ` [PATCH v2 11/11] i18n: difftool: mark warnings " Vasco Almeida
2016-09-25 23:21 ` Junio C Hamano
2016-10-01 19:56 ` Jakub Narębski
2016-08-31 17:23 ` [PATCH v2 00/11] Mark strings in perl script " Junio C Hamano
2016-09-25 23:31 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2016-06-29 15:09 Vasco Almeida
2016-06-29 15:09 ` [PATCH v2 03/11] i18n: add--interactive: mark strings with interpolation " Vasco Almeida
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b8c25ae3-143c-3e9b-0c7b-115a9b4756ae@gmail.com \
--to=jnareb@gmail.com \
--cc=avarab@gmail.com \
--cc=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=vascomalmeida@sapo.pt \
--cc=worldhello.net@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).