[pacman-dev] [PATCH] makepkg-template: Add gettext support

Allan McRae allan at archlinux.org
Sun May 12 22:24:01 EDT 2013


On 13/05/13 00:56, Florian Pritz wrote:
> This also slighty changes the word order in the description for
> --newest.
> 
> Signed-off-by: Florian Pritz <bluewind at xinu.at>
> ---
>  scripts/makepkg-template.pl.in | 74 +++++++++++++++++++++++++++---------------
>  1 file changed, 48 insertions(+), 26 deletions(-)


This looks fairly straight-forward.  You need to add this file to
scripts/po/POTFILES.in.  It would also be good if you could run "make
update-po" and check these strings get added to the pot files.

> diff --git a/scripts/makepkg-template.pl.in b/scripts/makepkg-template.pl.in
> index 1ba007b..10035a6 100755
> --- a/scripts/makepkg-template.pl.in
> +++ b/scripts/makepkg-template.pl.in
> @@ -5,7 +5,8 @@ use v5.10.1;
>  use Cwd qw(abs_path);
>  use File::Spec;
>  use Getopt::Long;
> -use Pod::Usage;
> +use Module::Load;
> +use Module::Load::Conditional qw(can_load);
>  
>  my %opts = (
>  	input => '@BUILDSCRIPT@',
> @@ -15,9 +16,27 @@ my %opts = (
>  my $template_name_charset = qr/[[:alnum:]+_. at -]/;
>  my $template_marker = qr/# template/;
>  
> +# runtime loading to avoid dependency on cpan since this is the only non-core module
> +my $have_gettext = can_load(modules => {'Locale::gettext' => undef});
> +if ($have_gettext) {
> +	load 'Locale::gettext', qw(gettext);
> +	Locale::gettext::bindtextdomain("pacman-scripts", '@localedir@');
> +	Locale::gettext::textdomain("pacman-scripts");
> +}
> +
> +sub _ {
> +	my ($string) = @_;
> +
> +	if ($have_gettext) {
> +		return gettext($string);
> +	} else {
> +		return $string;
> +	}
> +}
> +
>  sub burp {
>  	my ($file_name, @lines) = @_;
> -	open (my $fh, ">", $file_name) || die "can't create $file_name $!" ;
> +	open (my $fh, ">", $file_name) || die sprintf(_("can't create '%s': %s"), $file_name, $!);
>  	print $fh @lines;
>  	close $fh;
>  }
> @@ -34,20 +53,22 @@ sub parse_template_line {
>  
>  	foreach my $element (@elements) {
>  		my ($key, $val) = ($element =~ /^([a-z0-9]+)=(.*)$/);
> -		die "invalid key/value pair $filename:$linenumber: $line"
> -		    unless $key and $val;
> +		unless ($key and $val) {
> +			die _("invalid key/value pair\n%s:%s: %s"),
> +				"$filename:$linenumber: $line";
> +		}
>  		$values{$key} = $val;
>  	}
>  
>  	# end doesn't take arguments
>  	if ($values{command} ne "end") {
>  		if (!$values{name}) {
> -			die "invalid template line: can't find template name\n",
> +			die _("invalid template line: can't find template name\n"),
>  				"$filename:$linenumber: $line";
>  		}
>  
>  		unless ($values{name} =~ /^$template_name_charset+$/) {
> -			die "invalid chars used in name '$values{name}'. allowed: [:alnum:]+_. at -\n",
> +			die sprintf(_("invalid chars used in name '%s'. allowed: [:alnum:]+_. at -\n"), $values{name}),
>  				"$filename:$linenumber: $line";
>  		}
>  	}
> @@ -72,7 +93,7 @@ sub load_template {
>  	my ($version) = (abs_path($path) =~ /-([0-9.]+)[.]template$/);
>  
>  	if (!$version) {
> -		die "Couldn't detect version for template '$values->{name}'";
> +		die sprintf(_("Couldn't detect version for template '%s'"), $values->{name});
>  	}
>  
>  	my $parsed = process_file($path);
> @@ -91,7 +112,7 @@ sub process_file {
>  	my $nesting_level = 0;
>  	my $linenumber = 0;
>  
> -	open (my $fh, "<", $filename) or die "failed to open '$filename': $!";
> +	open (my $fh, "<", $filename) or die sprintf(_("failed to open '%s': %s"), $filename, $!);
>  	my @lines = <$fh>;
>  	close $fh;
>  
> @@ -113,7 +134,7 @@ sub process_file {
>  				}
>  
>  				default {
> -					die "Unknown template marker '$values->{command}'\n",
> +					die sprintf(_("Unknown template marker '%s'\n"), $values->{command}),
>  						"$filename:$linenumber: $line";
>  				}
>  			}
> @@ -134,15 +155,30 @@ sub process_file {
>  	return $ret;
>  }
>  
> +sub usage {
> +	my ($exitstatus) = @_;
> +	print  "makepkg-template [options]\n";
> +	print  "\n";
> +	print  _("Options:\n");
> +	printf(_("  --input, -p <file>    Build script to read (default: %s)\n"), '@BUILDSCRIPT@');
> +	print  _("  --output, -o <file>   file to output to (default: input file)\n");
> +	print  _("  --newest, -n          update templates to newest version\n");
> +	print  _("                        (default: use version specified in the template markers)\n");
> +	print  _("  --template-dir <dir>  directory to search for templates\n");
> +	printf(_("                        (default: %s)\n"), '@TEMPLATE_DIR@');
> +	print  "\n";
> +	exit($exitstatus);
> +}
> +
>  Getopt::Long::Configure ("bundling");
>  GetOptions(
> -	"help" => sub {pod2usage(-exitval => 0, -verbose => 1); },
> -	"h" => sub {pod2usage(-exitval => 0, -verbose => 0); },
> +	"help" => sub {usage(0); },
> +	"h" => sub {usage(0); },
>  	"input|p=s" => \$opts{input},
>  	"output|o=s" => \$opts{output},
>  	"newest|n" => \$opts{newest},
>  	"template-dir=s" => \$opts{template_dir},
> -) or pod2usage(1);
> +) or usage(1);
>  
>  $opts{output} = $opts{input} unless $opts{output};
>  
> @@ -151,18 +187,4 @@ $opts{output} = "/dev/stdout" if $opts{output} eq "-";
>  
>  burp($opts{output}, process_file($opts{input}));
>  
> -__END__
> -=head1 SYNOPSIS
> -
> -makepkg-template [options]
> -
> - Options:
> -   --input, -p <file>     Build script to read (default: @BUILDSCRIPT@)
> -   --output, -o <file>    file to output to (default: input file)
> -   --newest, -n           update templates to newest version
> -                          (default: use specified version in the template markers)
> -   --template-dir <dir>   directory to search for templates
> -                          (default: @TEMPLATE_DIR@)
> -
> -=cut
>  # vim: set noet:
> 



More information about the pacman-dev mailing list