=encoding utf8

=head1 NAME

Log::Report::Extract - Collect translatable strings

=head1 INHERITANCE

 Log::Report::Extract is extended by
   Log::Report::Extract::PerlPPI
   Log::Report::Extract::Template

=head1 SYNOPSIS

 # See the extensions

=head1 DESCRIPTION

This module helps maintaining the POT files, updating the list of
message-ids which are kept in them.  After initiation, the L<process()|Log::Report::Extract/"Processors">
method needs to be called with all files which changed since last
processing and the existing PO files will get updated accordingly.  If no
translations exist yet, one C<textdomain/xx.po> file will be created.

=head1 METHODS

=head2 Constructors

=over 4

=item Log::Report::Extract-E<gt>B<new>(%options)

 -Option --Default
  charset  'utf-8'
  lexicon  <required>

=over 2

=item charset => STRING

The character-set used in the PO files.

=item lexicon => DIRECTORY

The place where the lexicon is kept.  When no lexicon is defined yet,
this will be the directory where an C<domain/xx.po> file will be created.

=back

=back

=head2 Accessors

=over 4

=item $obj-E<gt>B<addPot>($domain, $pot, %options)

=item $obj-E<gt>B<charset>()

Returns the character-set used inside the POT files.

=item $obj-E<gt>B<domains>()

Returns a sorted list of all known domain names.

=item $obj-E<gt>B<index>()

Returns the L<Log::Report::Lexicon::Index|Log::Report::Lexicon::Index> object, which is listing
the files in the lexicon directory tree.

=item $obj-E<gt>B<pots>($domain)

Returns the list of L<Log::Report::Lexicon::POT|Log::Report::Lexicon::POT> objects which contain
the tables for $domain.

=back

=head2 Processors

=over 4

=item $obj-E<gt>B<cleanup>(%options)

Remove all references.

 -Option--Default
  keep    []

=over 2

=item keep => HASH|ARRAY

Keep the information about these filename, either specified as ARRAY of
names, or a HASH where the keys are the named.

=back

=item $obj-E<gt>B<process>($filename, %options)

Update the domains mentioned in the $filename.  All text-domains defined
in the file will get updated automatically, but should not written before
all files are processed.

Returned is the number of messages found in this particular file.

=item $obj-E<gt>B<showStats>( [$domains] )

Show a status about the DOMAIN (by default all domains).  At least mode
verbose is required to see this.

The statistics are sent to (Log::Report) dispatchers which accept
notice and info.  This could be syslog.  When you have no explicit
dispatchers in your program, the level of detail get controlled by
the 'mode':

   use Log::Report mode => 'DEBUG';  # or 'VERBOSE'

=item $obj-E<gt>B<store>( $domain, $filename, $linenr, $context, $msg, [$msg_plural] )

Register the existence of a ($msg, $msg_plural) in all POTs of
the $domain.

=item $obj-E<gt>B<write>( [$domain] )

Update the information of the files related to $domain, by default all
processed DOMAINS.

All information known about the written $domain is removed from the cache.

=back

=head1 SEE ALSO

This module is part of Log-Report-Lexicon distribution version 1.12,
built on April 18, 2025. Website: F<http://perl.overmeer.net/CPAN/>

=head1 LICENSE

Copyrights 2007-2025 by [Mark Overmeer <markov@cpan.org>]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
See F<http://dev.perl.org/licenses/>

