215 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #! /usr/bin/perl -w
 | |
| # Command-line interface to Locale::Maketext::Gettext (and Locale::Maketext)
 | |
| 
 | |
| # Copyright (c) 2003-2021 imacat. All rights reserved. This program is free
 | |
| # software; you can redistribute it and/or modify it under the same terms
 | |
| # as Perl itself.
 | |
| # First written: 2003/5/3
 | |
| 
 | |
| use 5.008;
 | |
| use strict;
 | |
| use warnings;
 | |
| use Getopt::Long qw(GetOptions);
 | |
| use Locale::Maketext::Gettext::Functions;
 | |
| our $VERSION = 0.06;
 | |
| # Prototype declaration
 | |
| sub main();
 | |
| sub parse_args();
 | |
| 
 | |
| our ($THIS_FILE, $SHORT_HELP, $VER_STR, $SEARCH, $HELP);
 | |
| $THIS_FILE = $0;
 | |
| $THIS_FILE =~ s/^.*\///;
 | |
| $SHORT_HELP = "Try `$THIS_FILE --help' for more information.";
 | |
| $VER_STR = "$THIS_FILE v$VERSION by imacat <imacat\@mail.imacat.idv.tw>";
 | |
| $SEARCH = join " ", @Locale::Maketext::Gettext::Functions::SYSTEM_LOCALEDIRS;
 | |
| $HELP = << "EOT";
 | |
| Usage: maketext [OPTION] [--domain=TEXTDOMAIN] MSGKEY [PARAM...]
 | |
| or:    maketext [OPTION] -s MSGKEY [PARAM...]
 | |
| 
 | |
| Maketext and display native language translation of a textual message.
 | |
| 
 | |
|   -d, --domain=TEXTDOMAIN   retrieve translated messages from TEXTDOMAIN
 | |
|   -h, --help                display this help and exit
 | |
|   -V, --version             display version information and exit
 | |
|   MSGKEY [PARAM...]         retrieve translated message corresponding
 | |
|                             to MSGKEY from TEXTDOMAIN
 | |
| 
 | |
| If the TEXTDOMAIN parameter is not given, the domain is determined from the
 | |
| environment variable TEXTDOMAIN.  If the message catalog is not found in the
 | |
| regular directory, another location can be specified with the environment
 | |
| variable TEXTDOMAINDIR.
 | |
| When used with the -s option the program adds a new line to the end of the
 | |
| output so that it behaves like the `echo' or the `gettext' command.
 | |
| Standard search directories: $SEARCH
 | |
| 
 | |
| Report bugs to <imacat\@mail.imacat.idv.tw>.
 | |
| EOT
 | |
| 
 | |
| our ($DOMAIN, $LOCALEDIR, $ECHO, $KEY, @PARAM);
 | |
| $ECHO = 0;
 | |
| 
 | |
| # Main program
 | |
| main();
 | |
| exit 0;
 | |
| 
 | |
| # Main program
 | |
| sub main() {
 | |
|     local ($_, %_);
 | |
|     
 | |
|     # Parse the arguments
 | |
|     parse_args();
 | |
|     
 | |
|     bindtextdomain($DOMAIN, $LOCALEDIR)
 | |
|         if defined $DOMAIN && defined $LOCALEDIR;
 | |
|     textdomain($DOMAIN) if defined $DOMAIN;
 | |
|     print maketext($KEY, @PARAM);
 | |
|     print "\n" if $ECHO;
 | |
|     
 | |
|     return;
 | |
| }
 | |
| 
 | |
| # Parse the arguments
 | |
| sub parse_args() {
 | |
|     local ($_, %_);
 | |
|     
 | |
|     # Get the arguments
 | |
|     $_ = eval {
 | |
|         local $SIG{__WARN__} = sub { die $_[0]; };
 | |
|         Getopt::Long::Configure("no_auto_abbrev");
 | |
|         GetOptions( "domain|d=s"=>\$DOMAIN,
 | |
|                     "s"=>sub { $ECHO = 1; },
 | |
|                     "help|h"=>sub { print $HELP; exit 0; },
 | |
|                     "version|V"=>sub { print "$VER_STR\n"; exit 0; });
 | |
|         return 1;
 | |
|     };
 | |
|     die "$THIS_FILE: $@" if !defined $_;
 | |
|     
 | |
|     # The MSGKEY
 | |
|     die "$THIS_FILE: missing arguments\n" if @ARGV == 0;
 | |
|     $KEY = shift @ARGV;
 | |
|     @PARAM = @ARGV;
 | |
|     
 | |
|     # Set the locale directory
 | |
|     $LOCALEDIR = $ENV{"TEXTDOMAINDIR"} if exists $ENV{"TEXTDOMAINDIR"};
 | |
|     # Set the text domain
 | |
|     $DOMAIN = $ENV{"TEXTDOMAIN"}
 | |
|         if !defined $DOMAIN && exists $ENV{"TEXTDOMAIN"};
 | |
|     
 | |
|     return;
 | |
| }
 | |
| 
 | |
| __END__
 | |
| 
 | |
| =head1 NAME
 | |
| 
 | |
| maketext - translate and make messages
 | |
| 
 | |
| =head1 SYNOPSIS
 | |
| 
 | |
|   maketext [OPTION] [--domain=TEXTDOMAIN] MSGKEY [PARAM...]
 | |
|   maketext [OPTION] -s MSGKEY [PARAM...]
 | |
| 
 | |
| =head1 DESCRIPTION
 | |
| 
 | |
| The C<maketext> script translates a natural language message into
 | |
| the user's language, by looking up the translation in a message MO
 | |
| file, and process the plural transformation with Maketext.
 | |
| 
 | |
| The C<maketext> script is a command-line interface to
 | |
| L<Locale::Maketext::Gettext(3)|Locale::Maketext::Gettext/3> (and
 | |
| L<Locale::Maketext(3)|Locale::Maketext/3>).  It can be used in shell
 | |
| scripts, etc, to translate, maketext and return the result.  By this
 | |
| way, it enables Maketext to be integrated into other programming
 | |
| languages/systems, like bash/csh, python, PHP, C, etc.  It works
 | |
| like the command-line program gettext.
 | |
| 
 | |
| For example:
 | |
| 
 | |
|   % maketext -s "[*,_1,virus was,viruses were] found in [*,_2,file,files]." 0 1
 | |
|   0 viruses were found in 1 file.
 | |
|   % maketext -s "[*,_1,virus was,viruses were] found in [*,_2,file,files]." 1 3
 | |
|   1 virus was found in 3 files.
 | |
|   %
 | |
| 
 | |
| =head1 OPTIONS
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item -d,--domain=TEXTDOMAIN
 | |
| 
 | |
| Retrieve translated messages from TEXTDOMAIN.
 | |
| 
 | |
| =item -s
 | |
| 
 | |
| Adds a new line to the end of the output so that it behaves like the
 | |
| `echo' or the `gettext' command.
 | |
| 
 | |
| =item -h,--help
 | |
| 
 | |
| Display the help messages.
 | |
| 
 | |
| =item -V,--version
 | |
| 
 | |
| Display version information and exit.
 | |
| 
 | |
| =item MSGKEY
 | |
| 
 | |
| The original text used to look up translated text.
 | |
| 
 | |
| =item PARAM...
 | |
| 
 | |
| Parameters to Maketext for the plural and other text functions.
 | |
| 
 | |
| =back
 | |
| 
 | |
| =head1 ENVIRONMENT
 | |
| 
 | |
| =over
 | |
| 
 | |
| =item TEXTDOMAIN
 | |
| 
 | |
| TEXTDOMAIN is used to determine the text domain when the -d
 | |
| parameter is not given.
 | |
| 
 | |
| =item TEXTDOMAINDIR
 | |
| 
 | |
| TEXTDOMAINDIR is used to search the message catalog/MO file if it
 | |
| does not reside in the system locale directories.
 | |
| 
 | |
| =back
 | |
| 
 | |
| =head1 NOTES
 | |
| 
 | |
| Maketext language function override, like C<quant> or C<numerate>, is
 | |
| not available here.  Suggestions are welcome.
 | |
| 
 | |
| The current system locale directory search order is:
 | |
| /usr/share/locale, /usr/lib/locale, /usr/local/share/locale,
 | |
| /usr/local/lib/locale.  Suggestions are welcome.
 | |
| 
 | |
| =head1 BUGS
 | |
| 
 | |
| Report bugs to imacat <imacat@mail.imacat.idv.tw>
 | |
| 
 | |
| =head1 SEE ALSO
 | |
| 
 | |
| L<Locale::Maketext(3)|Locale::Maketext/3>,
 | |
| L<Locale::Maketext::TPJ13(3)|Locale::Maketext::TPJ13/3>,
 | |
| L<Locale::Maketext::Gettext(3)|Locale::Maketext::Gettext/3>,
 | |
| L<Locale::Maketext::Gettext::Functions(3)|Locale::Maketext::Gettext::Functions/3>,
 | |
| L<bindtextdomain(3)|bindtextdomain/3>, L<textdomain(3)|textdomain/3>.
 | |
| Also, please refer to the official GNU gettext manual at
 | |
| L<https://www.gnu.org/software/gettext/manual/>.
 | |
| 
 | |
| =head1 AUTHOR
 | |
| 
 | |
| imacat <imacat@mail.imacat.idv.tw>
 | |
| 
 | |
| =head1 COPYRIGHT
 | |
| 
 | |
| Copyright (c) 2003-2021 imacat. All rights reserved. This program is free
 | |
| software; you can redistribute it and/or modify it under the same terms
 | |
| as Perl itself.
 | |
| 
 | |
| =cut
 |