Fix navigation2.conf to correctly re-create translated menus
This commit is contained in:
parent
2fd6f8b630
commit
55b85496d4
@ -33,6 +33,8 @@ use esmith::I18N;
|
|||||||
|
|
||||||
use Data::Dumper; # activate if DEBUG
|
use Data::Dumper; # activate if DEBUG
|
||||||
|
|
||||||
|
binmode(STDOUT, ":encoding(UTF-8)");
|
||||||
|
|
||||||
my $navigation_ignore =
|
my $navigation_ignore =
|
||||||
"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
|
"(\.\.?|Swttheme\.pm|Login\.pm|Request\.pm|Modules\.pm(-.*)?)";
|
||||||
|
|
||||||
@ -46,8 +48,7 @@ my @files = grep (!/^${navigation_ignore}$/, readdir (FUNCTIONS));
|
|||||||
closedir FUNCTIONS;
|
closedir FUNCTIONS;
|
||||||
|
|
||||||
my @langs = $i18n->availableLanguages();
|
my @langs = $i18n->availableLanguages();
|
||||||
#my @langs = ('en', 'fr');
|
#my @langs = ('tr'); #Temp override
|
||||||
#print Dumper(\@langs);
|
|
||||||
|
|
||||||
|
|
||||||
foreach my $lang (@langs)
|
foreach my $lang (@langs)
|
||||||
@ -60,15 +61,15 @@ foreach my $lang (@langs)
|
|||||||
my @gen_lex = <LEX>;
|
my @gen_lex = <LEX>;
|
||||||
close LEX;
|
close LEX;
|
||||||
|
|
||||||
|
#my @files = ('Portforwarding.pm'); #Temp override
|
||||||
foreach my $file (@files)
|
foreach my $file (@files)
|
||||||
{
|
{
|
||||||
next if (-d SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
|
next if (-d SMNGR_LIB.'/'.WEBFUNCTIONS . "/$file");
|
||||||
# next unless ( $file =~ m/D.*\.pm$/ );
|
# next unless ( $file =~ m/D.*\.pm$/ );
|
||||||
next unless ( $file =~ m/[A-Z].*\.pm$/ );
|
next unless ( $file =~ m/[A-Z].*\.pm$/ );
|
||||||
|
|
||||||
my $file2 = lc($file);
|
my $file2 = lc($file);
|
||||||
$file2 =~ s/\.pm$//;
|
$file2 =~ s/\.pm$//;
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# extract heading, description and weight information
|
# extract heading, description and weight information
|
||||||
# from Mojo controller
|
# from Mojo controller
|
||||||
@ -103,7 +104,7 @@ foreach my $lang (@langs)
|
|||||||
}
|
}
|
||||||
close SCRIPT;
|
close SCRIPT;
|
||||||
|
|
||||||
print "updating script $file for lang $lang\n" if DEBUG;
|
print "updating script $file for lang $lang\n"if DEBUG;
|
||||||
my $navdb = $navdbs{$lang};
|
my $navdb = $navdbs{$lang};
|
||||||
my $navinfo = NAVDIR.'/'.NAVIGATIONDIR . "/navigation.$lang";
|
my $navinfo = NAVDIR.'/'.NAVIGATIONDIR . "/navigation.$lang";
|
||||||
$navdb ||= esmith::NavigationDB->open($navinfo);
|
$navdb ||= esmith::NavigationDB->open($navinfo);
|
||||||
@ -121,6 +122,33 @@ foreach my $lang (@langs)
|
|||||||
@panel_lex = <LEX>;
|
@panel_lex = <LEX>;
|
||||||
close LEX;
|
close LEX;
|
||||||
}
|
}
|
||||||
|
#Extract the prefix for this module
|
||||||
|
my @keys = values @panel_lex; # Get all values from the hash
|
||||||
|
|
||||||
|
my $i = 0; # Initialize the index
|
||||||
|
my $found = 0; # Flag to check if the prefix was found
|
||||||
|
my $prefix = "xx_"; # Probably never match!!
|
||||||
|
|
||||||
|
while ($i < @keys) { # Loop until we run out of entries
|
||||||
|
my $extracted_value = $keys[$i] || ""; # The current entry
|
||||||
|
|
||||||
|
# Extract prefix from the second value (up to and including the first underscore)
|
||||||
|
my ($prefix) = $extracted_value =~ /^'(.*?_)/; # Match everything up to and including the first underscore
|
||||||
|
|
||||||
|
if (defined $prefix) {
|
||||||
|
#print("Prefix: " . $prefix . "\n");
|
||||||
|
$found = 1; # Set found flag to true
|
||||||
|
last; # Exit the loop if prefix is found
|
||||||
|
} else {
|
||||||
|
#print("Extracted Val: " . $extracted_value . "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++; # Increment the index to check the next entry
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$found) {
|
||||||
|
print(STDERR "No valid prefix found in any entries: ".$file2." (".$lang.")\n") if DEBUG;
|
||||||
|
}
|
||||||
|
|
||||||
my %Lexicon = ();
|
my %Lexicon = ();
|
||||||
push(@panel_lex, @gen_lex);
|
push(@panel_lex, @gen_lex);
|
||||||
@ -130,12 +158,12 @@ foreach my $lang (@langs)
|
|||||||
for (@panel_lex) {
|
for (@panel_lex) {
|
||||||
next unless $_; # first one empty
|
next unless $_; # first one empty
|
||||||
my ($k, $v) = split / => /, $_;
|
my ($k, $v) = split / => /, $_;
|
||||||
# errors on split to $v (use DEBUG to see)
|
# errors on split to $v (use DEBUG to see)
|
||||||
if ( $k and $v ) {
|
if ( $k and $v ) {
|
||||||
$k =~ s/\'//g;
|
$k =~ s/\'//g;
|
||||||
$v =~ s/\'//g;
|
$v =~ s/\'//g;
|
||||||
$v =~ s/,$//g;
|
$v =~ s/,$//g;
|
||||||
$Lexicon{ $k } = $v;
|
$Lexicon{ lc($k) } = $v;
|
||||||
} else {
|
} else {
|
||||||
$k = "?" unless ($k);
|
$k = "?" unless ($k);
|
||||||
print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
|
print STDERR "Error for $lang $file2 on $k \n" if DEBUG;
|
||||||
@ -145,14 +173,17 @@ foreach my $lang (@langs)
|
|||||||
if ( $top_error > 0) {
|
if ( $top_error > 0) {
|
||||||
if ( DEBUG ) {
|
if ( DEBUG ) {
|
||||||
print STDERR "$top_error errors for $lang $file2\n";
|
print STDERR "$top_error errors for $lang $file2\n";
|
||||||
# print Dumper(\@panel_lex);
|
# print Dumper(\@panel_lex);
|
||||||
# print Dumper(\%Lexicon);
|
# print Dumper(\%Lexicon);
|
||||||
# exit 1;
|
# exit 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$heading = "" unless defined $heading;
|
||||||
my $loc_heading = localise( \%Lexicon, $heading );
|
$description = "" unless defined $description;
|
||||||
my $loc_description = localise( \%Lexicon, $description );
|
# Get the base language code from $lang
|
||||||
|
my $base_lang = (split('-', $lang))[0];
|
||||||
|
my $loc_heading = process_localization( \%Lexicon, $heading, $lang, $prefix );
|
||||||
|
my $loc_description = process_localization( \%Lexicon, $description, $lang, $prefix );
|
||||||
$loc_heading =~ s/^\s*(\w.*?)\s*$/$1/;
|
$loc_heading =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||||
$loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
|
$loc_description =~ s/^\s*(\w.*?)\s*$/$1/;
|
||||||
|
|
||||||
@ -171,6 +202,35 @@ foreach my $lang (@langs)
|
|||||||
|
|
||||||
sub localise {
|
sub localise {
|
||||||
my ($lexicon, $string) = @_;
|
my ($lexicon, $string) = @_;
|
||||||
|
# print("Looking up:".$string."\n");
|
||||||
$string = "" unless defined $string;
|
$string = "" unless defined $string;
|
||||||
return $lexicon->{$string} || $string;
|
my $lc_string = lc($string);
|
||||||
|
my $res = $lexicon->{$lc_string} || $string;
|
||||||
|
# print("Returning:".$res."\n");
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Subroutine to process localization
|
||||||
|
sub process_localization {
|
||||||
|
my ($lexicon_ref, $heading, $lang, $prefix) = @_;
|
||||||
|
|
||||||
|
# Localized heading based on original heading
|
||||||
|
my $loc_heading = localise($lexicon_ref, $heading);
|
||||||
|
|
||||||
|
# Get the base language code from $lang
|
||||||
|
my $base_lang = (split('-', $lang))[0];
|
||||||
|
|
||||||
|
# Check the condition
|
||||||
|
if ($loc_heading eq $heading && $base_lang ne 'en') {
|
||||||
|
# Construct the new key by combining the prefix and the original heading
|
||||||
|
my $key = $prefix . $heading;
|
||||||
|
# Localize using the constructed key
|
||||||
|
$loc_heading = localise($lexicon_ref, $key);
|
||||||
|
# See if it got a hit
|
||||||
|
if ($loc_heading eq $key){
|
||||||
|
$loc_heading = $heading;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $loc_heading; # Optionally return the localized heading
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user