216 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #! /usr/bin/perl -w
 | ||
| # Command-line interface to Locale::Maketext::Gettext (and Locale::Maketext)
 | ||
| 
 | ||
| # Copyright (c) 2003-2007 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-05-03
 | ||
| 
 | ||
| use 5.008;
 | ||
| use strict;
 | ||
| use warnings;
 | ||
| use Getopt::Long qw(GetOptions);
 | ||
| use Locale::Maketext::Gettext::Functions;
 | ||
| use vars qw($VERSION);
 | ||
| $VERSION = 0.05;
 | ||
| # Prototype declaration
 | ||
| sub main();
 | ||
| sub parse_args();
 | ||
| 
 | ||
| use vars qw($THIS_FILE $SHORTHELP $VERSTR $SEARCH $HELP);
 | ||
| $THIS_FILE = $0;
 | ||
| $THIS_FILE =~ s/^.*\///;
 | ||
| $SHORTHELP = "Try `$THIS_FILE --help' for more information.";
 | ||
| $VERSTR = "$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 MSGID [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
 | ||
| 
 | ||
| use vars qw($DOMAIN $LOCALEDIR $ECHO $KEY @PARAM);
 | ||
| $ECHO = 0;
 | ||
| 
 | ||
| # Main program
 | ||
| main();
 | ||
| exit 0;
 | ||
| 
 | ||
| # main: 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_args: Parse the arguments
 | ||
| sub parse_args() {
 | ||
|     local ($_, %_);
 | ||
|     
 | ||
|     # Get the arguments <20><><EFBFBD>o<EFBFBD>Ѽ<EFBFBD>
 | ||
|     $_ = 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 "$VERSTR\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 MSGID [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 catelog/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<http://www.gnu.org/software/gettext/manual/>.
 | ||
| 
 | ||
| =head1 AUTHOR
 | ||
| 
 | ||
| imacat <imacat@mail.imacat.idv.tw>
 | ||
| 
 | ||
| =head1 COPYRIGHT
 | ||
| 
 | ||
| Copyright (c) 2003-2007 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
 |