package FS::msgcat;
use strict;
-use vars qw( @ISA @EXPORT_OK $conf $locale );
+use vars qw( @ISA );
use Exporter;
use FS::UID;
-use FS::Record qw( qsearchs );
-use FS::Conf;
+use FS::Record; # qw( qsearchs );
@ISA = qw(FS::Record);
-@EXPORT_OK = qw( gettext geterror );
-
-$FS::UID::callback{'msgcat'} = sub {
- $conf = new FS::Conf;
- $locale = $conf->config('locale') || 'en_US';
-};
=head1 NAME
=head1 SYNOPSIS
- use FS::msgcat qw(gettext);
-
- #simple interface for retreiving messages...
- $message = gettext('msgcode');
- #or errors (includes the error code)
- $message = geterror('msgcode');
+ use FS::msgcat;
- #maintenance stuff
$record = new FS::msgcat \%hash;
$record = new FS::msgcat { 'column' => 'value' };
=back
+If you just want to B<use> message catalogs, see L<FS::Msgcat>.
+
=head1 METHODS
=over 4
=item new HASHREF
-Creates a new example. To add the example to the database, see L<"insert">.
+Creates a new message catalog entry. To add the message catalog entry to the
+database, see L<"insert">.
Note that this stores the hash reference, not a distinct copy of the hash it
points to. You can ask the object for a copy with the I<hash> method.
=item check
-Checks all fields to make sure this is a valid example. If there is
-an error, returns the error, otherwise returns false. Called by the insert
+Checks all fields to make sure this is a valid message catalog entry. If there
+is an error, returns the error, otherwise returns false. Called by the insert
and replace methods.
=cut
$self->locale =~ /^([\w\@]+)$/ or return "illegal locale: ". $self->locale;
$self->locale($1);
- ''; #no error
+ $self->SUPER::check
}
-=back
-=head1 SUBROUTINES
+sub _upgrade_data { #class method
+ my( $class, %opts) = @_;
-=over 4
+ eval "use FS::Setup;";
+ die $@ if $@;
-=item gettext MSGCODE
+ #"repopulate_msgcat", false laziness w/FS::Setup::populate_msgcat
-Returns the full message for the supplied message code.
+ my %messages = FS::Setup::msgcat_messages();
-=cut
+ foreach my $msgcode ( keys %messages ) {
+ foreach my $locale ( keys %{$messages{$msgcode}} ) {
+ my %msgcat = (
+ 'msgcode' => $msgcode,
+ 'locale' => $locale,
+ #'msg' => $messages{$msgcode}{$locale},
+ );
+ #my $msgcat = qsearchs('msgcat', \%msgcat);
+ my $msgcat = FS::Record::qsearchs('msgcat', \%msgcat); #wtf?
+ next if $msgcat;
-sub gettext {
- my $msgcode = shift;
- my $msgcat = qsearchs('msgcat', {
- 'msgcode' => $msgcode,
- 'locale' => $locale
- } );
- if ( $msgcat ) {
- $msgcat->msg;
- } else {
- warn "WARNING: message for msgcode $msgcode in locale $locale not found";
- $msgcode;
+ $msgcat = new FS::msgcat( {
+ %msgcat,
+ 'msg' => $messages{$msgcode}{$locale},
+ } );
+ my $error = $msgcat->insert;
+ die $error if $error;
+ }
}
}
-=item geterror MSGCODE
-
-Returns the full message for the supplied message code, including the message
-code.
-
-=cut
-
-sub geterror {
- my $msgcode = shift;
- my $msg = gettext($msgcode);
- if ( $msg eq $msgcode ) {
- "Error code $msgcode (message for locale $locale not found)";
- } else {
- "$msg (error code $msgcode)";
- }
-}
-
=back
=head1 BUGS
-i18n/l10n is a mess.
+i18n/l10n, eek
=head1 SEE ALSO
-L<FS::Record>, schema.html from the base documentation.
+L<FS::Msgcat>, L<FS::Record>, schema.html from the base documentation.
=cut