enable CardFortress in test database, #71513
[freeside.git] / FS / FS / Msgcat.pm
index e111f4e..e1bde8b 100644 (file)
@@ -1,7 +1,7 @@
 package FS::Msgcat;
 
 use strict;
-use vars qw( @ISA @EXPORT_OK $conf $def_locale $debug );
+use vars qw( @ISA @EXPORT_OK $conf $def_locale $debug @translate_auto_insert );
 use Exporter;
 use FS::UID;
 #use FS::Record qw( qsearchs ); # wtf?  won't import...
@@ -17,7 +17,8 @@ FS::UID->install_callback( sub {
   die $@ if $@;
   $conf = new FS::Conf;
   $def_locale = $conf->config('locale') || 'en_US';
-  $debug = $conf->exists('show-msgcat-codes')
+  $debug = $conf->exists('show-msgcat-codes');
+  @translate_auto_insert = $conf->config('translate-auto-insert');
 });
 
 =head1 NAME
@@ -58,8 +59,10 @@ our %cache;
 
 sub _gettext {
   my $msgcode = shift;
+  return '' unless defined($msgcode) && length($msgcode) > 0;
+
   my $locale =  (@_ && shift)
-             || $FS::CurrentUser::CurrentUser->option('locale')
+             || $FS::CurrentUser::CurrentUser->locale
              || $def_locale;
 
   return $cache{$locale}->{$msgcode} if exists $cache{$locale}->{$msgcode};
@@ -74,6 +77,18 @@ sub _gettext {
     warn "WARNING: message for msgcode $msgcode in locale $locale not found"
       unless $locale eq 'en_US';
     $cache{$locale}->{$msgcode} = $msgcode;
+
+    if ( $locale ne 'en_US' && grep { $_ eq $locale } @translate_auto_insert ) {
+
+        # :(
+        my $newmsgcat = new FS::Record('msgcat', { locale     => $locale,
+                                         msgcode    => $msgcode,
+                                         msg        => $msgcode,
+                                       });
+        warn "WARNING: auto-inserting message for msgcode $msgcode in locale $locale";
+        $newmsgcat->insert;
+    }
+    return $msgcode;
   }
 
 }