K2LL33D SHELL

 Apache/2.4.7 (Ubuntu)
 Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 safemode : OFF
 MySQL: ON | Perl: ON | cURL: OFF | WGet: ON
  >  / usr / lib / perl5 / Locale /
server ip : 104.21.89.46

your ip : 172.70.100.14

H O M E


Filename/usr/lib/perl5/Locale/gettext.pm
Size6.7 kb
Permissionrw-r--r--
Ownerroot : root
Create time27-Apr-2025 09:50
Last modified18-Oct-2013 20:42
Last accessed11-Jun-2025 22:19
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
package Locale::gettext;

=head1 NAME

Locale::gettext - message handling functions

=head1 SYNOPSIS

use Locale::gettext;
use POSIX; # Needed for setlocale()

setlocale(LC_MESSAGES, "");

# OO interface
my $d = Locale::gettext->domain("my_program");

print $d->get("Welcome to my program"), "\n";
# (printed in the local language)

# Direct access to C functions
textdomain("my_program");

print gettext("Welcome to my program"), "\n";
# (printed in the local language)

=head1 DESCRIPTION

The gettext module permits access from perl to the gettext() family of
functions for retrieving message strings from databases constructed
to internationalize software.

=cut

use Carp;
use POSIX qw(:locale_h);

require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);

BEGIN {
eval {
require Encode;
$encode_available = 1;
};
import Encode if ($encode_available);
}

$VERSION = "1.05" ;

%EXPORT_TAGS = (

locale_h => [qw(LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_ALL)],

libintl_h => [qw(gettext textdomain bindtextdomain dcgettext dgettext ngettext dngettext dcngettext bind_textdomain_codeset)],

);

Exporter::export_tags();

@EXPORT_OK = qw(
);

bootstrap Locale::gettext $VERSION;

sub AUTOLOAD {
local $! = 0;
my $constname = $AUTOLOAD;
$constname =~ s/.*:://;
my $val = constant($constname, (@_ ? $_[0] : 0));
if ($! == 0) {
*$AUTOLOAD = sub { $val };
}
else {
croak "Missing constant $constname";
}
goto &$AUTOLOAD;
}

=over 2

=item $d = Locale::gettext->domain(DOMAIN)

=item $d = Locale::gettext->domain_raw(DOMAIN)

Creates a new object for retrieving strings in the domain B<DOMAIN>
and returns it. C<domain> requests that strings be returned as
Perl strings (possibly with wide characters) if possible while
C<domain_raw> requests that octet strings directly from functions
like C<dgettext()>.

=cut

sub domain_raw {
my ($class, $domain) = @_;
my $self = { domain => $domain, raw => 1 };
bless $self, $class;
}

sub domain {
my ($class, $domain) = @_;
unless ($encode_available) {
croak "Encode module not available, cannot use Locale::gettext->domain";
}
my $self = { domain => $domain, raw => 0 };
bless $self, $class;
eval { bind_textdomain_codeset($self->{domain}, "UTF-8"); };
if ($@ =~ /not implemented/) {
# emulate it
$self->{emulate} = 1;
} elsif ($@ ne '') {
die; # some other problem
}
$self;
}

=item $d->get(MSGID)

Calls C<dgettext()> to return the translated string for the given
B<MSGID>.

=cut

sub get {
my ($self, $msgid) = @_;
$self->_convert(dgettext($self->{domain}, $msgid));
}

=item $d->cget(MSGID, CATEGORY)

Calls C<dcgettext()> to return the translated string for the given
B<MSGID> in the given B<CATEGORY>.

=cut

sub cget {
my ($self, $msgid, $category) = @_;
$self->_convert(dcgettext($self->{domain}, $msgid, $category));
}

=item $d->nget(MSGID, MSGID_PLURAL, N)

Calls C<dngettext()> to return the translated string for the given
B<MSGID> or B<MSGID_PLURAL> depending on B<N>.

=cut

sub nget {
my ($self, $msgid, $msgid_plural, $n) = @_;
$self->_convert(dngettext($self->{domain}, $msgid, $msgid_plural, $n));
}

=item $d->ncget(MSGID, MSGID_PLURAL, N, CATEGORY)

Calls C<dngettext()> to return the translated string for the given
B<MSGID> or B<MSGID_PLURAL> depending on B<N> in the given
B<CATEGORY>.

=cut

sub ncget {
my ($self, $msgid, $msgid_plural, $n, $category) = @_;
$self->_convert(dcngettext($self->{domain}, $msgid, $msgid_plural, $n, $category));
}

=item $d->dir([NEWDIR])

If B<NEWDIR> is given, calls C<bindtextdomain> to set the
name of the directory where messages for the domain
represented by C<$d> are found. Returns the (possibly changed)
current directory name.

=cut

sub dir {
my ($self, $newdir) = @_;
if (defined($newdir)) {
bindtextdomain($self->{domain}, $newdir);
} else {
bindtextdomain($self->{domain});
}
}

=item $d->codeset([NEWCODE])

For instances created with C<Locale::gettext-E<gt>domain_raw>, manuiplates
the character set of the returned strings.
If B<NEWCODE> is given, calls C<bind_textdomain_codeset> to set the
character encoding in which messages for the domain
represented by C<$d> are returned. Returns the (possibly changed)
current encoding name.

=cut

sub codeset {
my ($self, $codeset) = @_;
if ($self->{raw} < 1) {
warn "Locale::gettext->codeset: meaningful only for instances created with domain_raw";
return;
}
if (defined($codeset)) {
bind_textdomain_codeset($self->{domain}, $codeset);
} else {
bind_textdomain_codeset($self->{domain});
}
}

sub _convert {
my ($self, $str) = @_;
return $str if ($self->{raw});
# thanks to the use of UTF-8 in bind_textdomain_codeset, the
# result should always be valid UTF-8 when raw mode is not used.
if ($self->{emulate}) {
delete $self->{emulate};
$self->{raw} = 1;
my $null = $self->get("");
if ($null =~ /charset=(\S+)/) {
$self->{decode_from} = $1;
$self->{raw} = 0;
} #else matches the behaviour of glibc - no null entry
# means no conversion is done
}
if ($self->{decode_from}) {
return decode($self->{decode_from}, $str);
} else {
return decode_utf8($str);
}
}

sub DESTROY {
my ($self) = @_;
}

=back

gettext(), dgettext(), and dcgettext() attempt to retrieve a string
matching their C<msgid> parameter within the context of the current
locale. dcgettext() takes the message's category and the text domain
as parameters while dgettext() defaults to the LC_MESSAGES category
and gettext() defaults to LC_MESSAGES and uses the current text domain.
If the string is not found in the database, then C<msgid> is returned.

ngettext(), dngettext(), and dcngettext() function similarily but
implement differentiation of messages between singular and plural.
See the documentation for the corresponding C functions for details.

textdomain() sets the current text domain and returns the previously
active domain.

I<bindtextdomain(domain, dirname)> instructs the retrieval functions to look
for the databases belonging to domain C<domain> in the directory
C<dirname>

I<bind_textdomain_codeset(domain, codeset)> instructs the retrieval
functions to translate the returned messages to the character encoding
given by B<codeset> if the encoding of the message catalog is known.

=head1 NOTES

Not all platforms provide all of the functions. Functions that are
not available in the underlying C library will not be available in
Perl either.

Perl programs should use the object interface. In addition to being
able to return native Perl wide character strings,
C<bind_textdomain_codeset> will be emulated if the C library does
not provide it.

=head1 VERSION

1.05.

=head1 SEE ALSO

gettext(3i), gettext(1), msgfmt(1)

=head1 AUTHOR

Phillip Vandry <[email protected]>

=cut

1;