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 )