Locale-VersionedMessages

 view release on metacpan or  search on metacpan

internal/lm_admin  view on Meta::CPAN


   my($set_messages,$def_locale,@oth_locale) =
     Locale::VersionedMessages::lm::_set_read($set,$dir);

   # Update the set description
   #
   # If the message is brand new, we must be updating the default
   # locale.

   my $update_set = _message_desc(1,$set,$dir,$set_messages,$msgid,$def_locale,
                                  @oth_locale);
   Locale::VersionedMessages::lm::_set_write($set,$dir,$set_messages,$def_locale,
                                    @oth_locale)
     if ($update_set);

   if ($update_set eq 'new') {
      if ($locale ne 'default'  &&
          $locale ne 'all'      &&
          $locale ne $def_locale) {
         die "ERROR: for a new message ID, the locale must be 'all',\n" .
             "       'default', or the default locale.\n";
      }
   }

   # What locale(s) are we updating?

   my(@locale);
   if      ($locale eq 'default') {
      @locale = ($def_locale);
   } elsif ($locale eq 'all') {
      @locale = ($def_locale,@oth_locale);
   } else {
      @locale = ($locale);
   }

   my %locale = map { $_,1 } ($def_locale,@oth_locale);

   foreach my $l (@locale) {
      if (! exists $locale{$l}) {
         die "ERROR: locale not defined for this set: $l\n";
      }
   }

   # Add/update the message in the lexicons.

   my $def_messages = Locale::VersionedMessages::lm::_lexicon_read($set,$dir,$def_locale);
   foreach my $locale (@locale) {
      my $loc_messages = ($locale eq $def_locale ? $def_messages :
                          Locale::VersionedMessages::lm::_lexicon_read($set,$dir,$locale));
      my $op = _message_lexicon($locale,$def_locale,$set_messages,$def_messages,
                                $loc_messages,$msgid,$noupdate);

      if      ($op eq 'add_def'  ||  $op eq 'upd_def') {
         Locale::VersionedMessages::lm::_lexicon_write($set,$dir,$def_locale,$def_messages);
      } elsif ($op eq 'add_loc'  ||  $op eq 'upd_loc') {
         Locale::VersionedMessages::lm::_lexicon_write($set,$dir,$locale,$loc_messages);
      }
   }
}

sub update {
   my($set,$dir,$locale,$noupdate) = @_;

   # Get the default locale info, and the locale you're working
   # with (which must not be the default locale).

   my($set_messages,$def_locale,@oth_locale) =
     Locale::VersionedMessages::lm::_set_read($set,$dir);
   if ($locale eq $def_locale) {
      print "INFO: the --update option only applies to locales other\n" .
            "      than the default locale.\n";
      exit;
   }

   my %locale = map { $_,1 } @oth_locale;
   if (! exists $locale{$locale}) {
      die "ERROR: locale not defined for this set: $locale\n";
   }

   my $def_messages = Locale::VersionedMessages::lm::_lexicon_read($set,$dir,$def_locale);
   my $loc_messages = Locale::VersionedMessages::lm::_lexicon_read($set,$dir,$locale);
   my $updated      = 0;

   MSGID:
   foreach my $msgid (sort keys %$def_messages) {

      # Does this message need to be updated?

      my $def_vers   = $$def_messages{$msgid}{'vers'};
      my $loc_vers   = (exists $$loc_messages{$msgid} ?
                        $$loc_messages{$msgid}{'vers'} : 0);

      next MSGID if ($loc_vers == $def_vers);

      # Update the message.

      _message_desc(0,$set,$dir,$set_messages,$msgid,$def_locale,@oth_locale);
      my $op = _message_lexicon($locale,$def_locale,$set_messages,$def_messages,
                                $loc_messages,$msgid,$noupdate);
      $updated = 1  if ($op);
   }

   if ($updated) {
      Locale::VersionedMessages::lm::_lexicon_write($set,$dir,$locale,$loc_messages);
   }
}

###############################################################################

# Create/update/display the message description in the set.
#
# If $update is 1, the description is being added/updated.  Otherwise,
# it's just being displayed.
#
sub _message_desc {
   my($update,$set,$dir,$messages,$msgid,$def_locale,@oth_locale) = @_;

   # If we're not adding/update, it must exist.

   if (! $update  &&  ! exists $$messages{$msgid}) {
      die "ERROR: message ID does not exist: $msgid\n";



( run in 0.693 second using v1.01-cache-2.11-cpan-39bf76dae61 )