summaryrefslogtreecommitdiff
path: root/FS/FS/Msgcat.pm
diff options
context:
space:
mode:
authorivan <ivan>2011-05-11 16:20:13 +0000
committerivan <ivan>2011-05-11 16:20:13 +0000
commit83053569b3d965924e2e1d4f5b199609ec7c29af (patch)
treecf7b145fe37e171045040cf9619e6aab98689cae /FS/FS/Msgcat.pm
parent38eb380a88ea7a130e83b77ff9c51ef6967b707b (diff)
i18n, RT#12515
Diffstat (limited to 'FS/FS/Msgcat.pm')
-rw-r--r--FS/FS/Msgcat.pm26
1 files changed, 19 insertions, 7 deletions
diff --git a/FS/FS/Msgcat.pm b/FS/FS/Msgcat.pm
index 70933b2..e111f4e 100644
--- a/FS/FS/Msgcat.pm
+++ b/FS/FS/Msgcat.pm
@@ -1,7 +1,7 @@
package FS::Msgcat;
use strict;
-use vars qw( @ISA @EXPORT_OK $conf $locale $debug );
+use vars qw( @ISA @EXPORT_OK $conf $def_locale $debug );
use Exporter;
use FS::UID;
#use FS::Record qw( qsearchs ); # wtf? won't import...
@@ -16,7 +16,7 @@ FS::UID->install_callback( sub {
eval "use FS::Conf;";
die $@ if $@;
$conf = new FS::Conf;
- $locale = $conf->config('locale') || 'en_US';
+ $def_locale = $conf->config('locale') || 'en_US';
$debug = $conf->exists('show-msgcat-codes')
});
@@ -52,17 +52,28 @@ sub gettext {
$debug ? geterror(@_) : _gettext(@_);
}
+#though i guess we don't really have to cache here since we do it in
+# FS::L10N::DBI
+our %cache;
+
sub _gettext {
my $msgcode = shift;
+ my $locale = (@_ && shift)
+ || $FS::CurrentUser::CurrentUser->option('locale')
+ || $def_locale;
+
+ return $cache{$locale}->{$msgcode} if exists $cache{$locale}->{$msgcode};
+
my $msgcat = FS::Record::qsearchs('msgcat', {
'msgcode' => $msgcode,
- 'locale' => $locale
+ 'locale' => $locale,
} );
if ( $msgcat ) {
- $msgcat->msg;
+ $cache{$locale}->{$msgcode} = $msgcat->msg;
} else {
- warn "WARNING: message for msgcode $msgcode in locale $locale not found";
- $msgcode;
+ warn "WARNING: message for msgcode $msgcode in locale $locale not found"
+ unless $locale eq 'en_US';
+ $cache{$locale}->{$msgcode} = $msgcode;
}
}
@@ -78,6 +89,7 @@ sub geterror {
my $msgcode = shift;
my $msg = _gettext($msgcode);
if ( $msg eq $msgcode ) {
+ my $locale = $FS::CurrentUser::CurrentUser->option('locale') || $def_locale;
"Error code $msgcode (message for locale $locale not found)";
} else {
"$msg (error code $msgcode)";
@@ -92,7 +104,7 @@ i18n/l10n, eek
=head1 SEE ALSO
-L<FS::msgcat>, L<FS::Record>, schema.html from the base documentation.
+L<FS::Locales>, L<FS::msgcat>
=cut