NAME

Locale::TextDomain::OO::Lexicon::File::PO - Gettext po file as lexicon

$Id: PO.pm 651 2017-05-31 18:10:43Z steffenw $

$HeadURL: svn+ssh://steffenw@svn.code.sf.net/p/perl-gettext-oo/code/module/trunk/lib/Locale/TextDomain/OO/Lexicon/File/PO.pm $

VERSION

1.031

DESCRIPTION

This module reads a gettext po file into the lexicon.

SYNOPSIS

use Locale::TextDomain::OO::Lexicon::File::PO;
use Log::Any qw($log);

$logger = Locale::TextDomain::OO::Lexicon::File::PO
    ->new(
        # all parameters are optional
        decode_code => sub {
            my ($charset, $text) = @_;
            defined $text
                or return $text;
            return decode( $charset, $text );
        },
        # optional
        logger => sub {
            my ($message, $arg_ref) = @_;
            my $type = $arg_ref->{type}; # debug
            $log->$type($message);
            return;
        },
    )
    ->lexicon_ref({
        # required
        search_dirs => [ qw( ./my_dir ./my_other_dir ) ],
        # optional
        gettext_to_maketext => $boolean,
        # optional
        decode => $boolean,
        # required
        data => [
            # e.g. de.po, en.po read from:
            # search_dir/de.po
            # search_dir/en.po
            '*::' => '*.po',

            # e.g. de.po en.po read from:
            # search_dir/subdir/de/LC_MESSAGES/domain.po
            # search_dir/subdir/en/LC_MESSAGES/domain.po
            '*:LC_MESSAGES:domain' => 'subdir/*/LC_MESSAGES/domain.po',

            # Merge a region lexicon:
            # Take the header and messages of the "de::" lexicon,
            # overwrite the header and messages of the "de-at::" lexicon
            # and store that as "de-at::" lexicon with all messages now.
            merge_lexicon => 'de::', 'de-at::' => 'de-at::',

            # Copy a lexicon into another domain and/or category:
            copy_lexicon => 'i-default::' => 'i-default:LC_MESSAGES:domain',

            # Move a lexicon into another domain and/or category:
            move_lexicon => 'i-default::' => 'i-default:LC_MESSAGES:domain',

            # Delete a lexicon:
            delete_lexicon => 'i-default::',
        ],
    })
    ->logger;

SUBROUTINES/METHODS

method new

see SYNOPSIS

method lexicon_ref

See SYNOPSIS.

method read_messages

Called from Locale::TextDomain::OO::Lexicon::Role::File to run the po file specific code.

$messages_ref = $self->read_messages($filename);

method logger

Set the logger and get back them

$lexicon_file_po->logger(
    sub {
        my ($message, $arg_ref) = @_;
        my $type = $arg_ref->{type};
        $log->$type($message);
        return;
    },
);
$logger = $lexicon_hash->logger;

$arg_ref contains

object => $lexicon_file_po, # the object itself
type   => 'debug',
event  => 'lexicon,load', # The logger will be copied to
                          # Locale::TextDomain::OO::Singleton::Lexicon
                          # so more events are possible.

EXAMPLE

Inside of this distribution is a directory named example. Run this *.pl files.

DIAGNOSTICS

none

CONFIGURATION AND ENVIRONMENT

none

DEPENDENCIES

Locale::PO

Moo

MooX::StrictConstructor

Locale::TextDomain::OO::Lexicon::Role::File

INCOMPATIBILITIES

not known

BUGS AND LIMITATIONS

none

SEE ALSO

Locale::TextDoamin::OO

AUTHOR

Steffen Winkler

LICENSE AND COPYRIGHT

Copyright (c) 2014 - 2017, Steffen Winkler <steffenw at cpan.org>. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.