updatelang: New tool to update language files.
Change-Id: I3c18bb34770b4b4b321199149a2ea693dfbdb7f4
This commit is contained in:
parent
c81e1e1bf1
commit
2305966d84
3 changed files with 500 additions and 4 deletions
|
@ -21,7 +21,7 @@ CLEANOBJS += $(BUILDDIR)/lang/max_language_size.h $(BUILDDIR)/lang/lang*
|
||||||
#DUMMY := $(shell mkdir -p $(BUILDDIR)/apps/lang)
|
#DUMMY := $(shell mkdir -p $(BUILDDIR)/apps/lang)
|
||||||
|
|
||||||
# Calculate the maximum language size. Currently based on the file size
|
# Calculate the maximum language size. Currently based on the file size
|
||||||
# of the largest lng file. Subtract 10 due to HEADER_SIZE and
|
# of the largest lng file. Subtract 10 due to HEADER_SIZE and
|
||||||
# SUBHEADER_SIZE.
|
# SUBHEADER_SIZE.
|
||||||
# TODO: In the future generate this file within genlang or another script
|
# TODO: In the future generate this file within genlang or another script
|
||||||
# in order to only calculate the maximum size based on the core strings.
|
# in order to only calculate the maximum size based on the core strings.
|
||||||
|
@ -47,10 +47,10 @@ $(BUILDDIR)/lang_enum.h: $(BUILDDIR)/lang/lang.h
|
||||||
|
|
||||||
# NOTE: for some weird reasons in GNU make, multi targets rules WITH patterns actually express
|
# NOTE: for some weird reasons in GNU make, multi targets rules WITH patterns actually express
|
||||||
# the fact that the two files are created as the result of one invocation of the rule
|
# the fact that the two files are created as the result of one invocation of the rule
|
||||||
$(BUILDDIR)/%.lng $(BUILDDIR)/%.vstrings: $(ROOTDIR)/%.lang $(BUILDDIR)/apps/genlang-features
|
$(BUILDDIR)/%.lng $(BUILDDIR)/%.vstrings: $(ROOTDIR)/%.lang $(BUILDDIR)/apps/genlang-features $(TOOLSDIR)/genlang $(TOOLSDIR)/updatelang
|
||||||
$(call PRINTS,GENLANG $(subst $(ROOTDIR)/,,$<))
|
$(call PRINTS,GENLANG $(subst $(ROOTDIR)/,,$<))
|
||||||
$(SILENT)mkdir -p $(dir $@)
|
$(SILENT)mkdir -p $(dir $@)
|
||||||
$(SILENT)$(TOOLSDIR)/genlang -u -e=$(APPSDIR)/lang/$(ENGLISH).lang $< > $@.tmp
|
$(SILENT)$(TOOLSDIR)/updatelang $(APPSDIR)/lang/$(ENGLISH).lang $< $@.tmp
|
||||||
$(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/$(ENGLISH).lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` -i=$(TARGET_ID) -b=$*.lng -c=$*.vstrings $@.tmp
|
$(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/$(ENGLISH).lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` -i=$(TARGET_ID) -b=$*.lng -c=$*.vstrings $@.tmp
|
||||||
$(SILENT)rm -f $@.tmp
|
$(SILENT)rm -f $@.tmp
|
||||||
|
|
||||||
|
|
496
tools/updatelang
Executable file
496
tools/updatelang
Executable file
|
@ -0,0 +1,496 @@
|
||||||
|
#!/usr/bin/perl -s -w
|
||||||
|
# __________ __ ___.
|
||||||
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
# \/ \/ \/ \/ \/
|
||||||
|
#
|
||||||
|
# Copyright (C) 2020 Solomon Peachy
|
||||||
|
#
|
||||||
|
|
||||||
|
use Clone 'clone';
|
||||||
|
use utf8;
|
||||||
|
use File::Basename;
|
||||||
|
|
||||||
|
sub trim {
|
||||||
|
my ($string) = @_;
|
||||||
|
$string =~ s/^\s+//;
|
||||||
|
$string =~ s/\s+$//;
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parselangfile {
|
||||||
|
my ($filename) = @_;
|
||||||
|
my %phrases;
|
||||||
|
my @order;
|
||||||
|
my %empty = ( #'phrase' => {},
|
||||||
|
#'source' => {},
|
||||||
|
#'dest' => {},
|
||||||
|
#'voice' => {},
|
||||||
|
'notes' => "",
|
||||||
|
'new' => 0
|
||||||
|
);
|
||||||
|
my %thisphrase = %empty;
|
||||||
|
|
||||||
|
open(FH, "<$filename") || die ("Can't open $filename");
|
||||||
|
my @lines = <FH>;
|
||||||
|
close(FH);
|
||||||
|
|
||||||
|
my $pos = 'lang';
|
||||||
|
my $id = '';
|
||||||
|
my @comments;
|
||||||
|
|
||||||
|
foreach my $line (@lines) {
|
||||||
|
$line = trim($line);
|
||||||
|
if($line =~ /^ *#/) {
|
||||||
|
push(@comments, "$line\n") if ($pos eq 'lang');
|
||||||
|
# comments are ignored!
|
||||||
|
next;
|
||||||
|
} elsif ($pos eq 'phrase' && $line =~ /^([^:]+): ?(.*)$/) {
|
||||||
|
$thisphrase{$pos}->{$1} = $2;
|
||||||
|
if ($1 eq 'id') {
|
||||||
|
push(@order, $2);
|
||||||
|
$id = $2;
|
||||||
|
}
|
||||||
|
} elsif ($pos ne 'phrase' && $line =~ /^([^:]+): ?\"?([^\"]*)\"?$/) {
|
||||||
|
my @targets = split(',', $1);
|
||||||
|
foreach (@targets) {
|
||||||
|
my $l = trim($_);
|
||||||
|
$thisphrase{$pos}->{$l} = $2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($line eq '</voice>' ||
|
||||||
|
$line eq '</dest>' ||
|
||||||
|
$line eq '</source>' ||
|
||||||
|
$line eq '<phrase>') {
|
||||||
|
$pos = 'phrase';
|
||||||
|
} elsif ($line eq '</phrase>') {
|
||||||
|
$phrases{$id} = clone(\%thisphrase);
|
||||||
|
%thisphrase = %empty;
|
||||||
|
$pos = 'lang';
|
||||||
|
$id = '';
|
||||||
|
} elsif ($line eq '<source>') {
|
||||||
|
$pos = 'source';
|
||||||
|
} elsif ($line eq '<dest>') {
|
||||||
|
$pos = 'dest';
|
||||||
|
} elsif ($line eq '<voice>') {
|
||||||
|
$pos = 'voice';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$phrases{'HEADER'} = \@comments;
|
||||||
|
$phrases{'ORDER'} = \@order;
|
||||||
|
return %phrases;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub combinetgts {
|
||||||
|
my (%tgtmap) = (@_);
|
||||||
|
my %strmap;
|
||||||
|
my %combined;
|
||||||
|
|
||||||
|
# Reverse-map things
|
||||||
|
foreach my $tgt (sort(keys(%tgtmap))) {
|
||||||
|
next if ($tgt eq '*'); # Do not combine anything with fallback
|
||||||
|
if (defined($strmap{$tgtmap{$tgt}})) {
|
||||||
|
$strmap{$tgtmap{$tgt}} .= ",$tgt";
|
||||||
|
} else {
|
||||||
|
$strmap{$tgtmap{$tgt}} = "$tgt";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy over default/fallback as it was skipped
|
||||||
|
$combined{'*'} = $tgtmap{'*'};
|
||||||
|
|
||||||
|
foreach my $str (keys(%strmap)) {
|
||||||
|
$combined{$strmap{$str}} = $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
return %combined;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @ignorelist = split("\n",
|
||||||
|
"LANG_SERIAL_BITRATE_19200
|
||||||
|
LANG_SERIAL_BITRATE_9600
|
||||||
|
LANG_SERIAL_BITRATE_38400
|
||||||
|
LANG_SERIAL_BITRATE_57600
|
||||||
|
LANG_COMPRESSOR_RATIO_10
|
||||||
|
LANG_COMPRESSOR_RATIO_2
|
||||||
|
LANG_COMPRESSOR_RATIO_6
|
||||||
|
LANG_COMPRESSOR_RATIO_4
|
||||||
|
LANG_ROCKBOX_TITLE
|
||||||
|
LANG_EQUALIZER_BAND_Q
|
||||||
|
LANG_FM_DEFAULT_PRESET_NAME
|
||||||
|
LANG_DISK_NAME_MMC
|
||||||
|
LANG_COLOR_RGB_LABELS
|
||||||
|
LANG_BYTE
|
||||||
|
LANG_KIBIBYTE
|
||||||
|
LANG_GIBIBYTE
|
||||||
|
LANG_USB_HID
|
||||||
|
VOICE_ZERO
|
||||||
|
VOICE_ONE
|
||||||
|
VOICE_TWO
|
||||||
|
VOICE_THREE
|
||||||
|
VOICE_FOUR
|
||||||
|
VOICE_FIVE
|
||||||
|
VOICE_SIX
|
||||||
|
VOICE_SEVEN
|
||||||
|
VOICE_EIGHT
|
||||||
|
VOICE_NINE
|
||||||
|
VOICE_TEN
|
||||||
|
VOICE_ELEVEN
|
||||||
|
VOICE_TWELVE
|
||||||
|
VOICE_THIRTEEN
|
||||||
|
VOICE_FOURTEEN
|
||||||
|
VOICE_FIFTEEN
|
||||||
|
VOICE_SIXTEEN
|
||||||
|
VOICE_SEVENTEEN
|
||||||
|
VOICE_EIGHTEEN
|
||||||
|
VOICE_NINETEEN
|
||||||
|
VOICE_TWENTY
|
||||||
|
VOICE_THIRTY
|
||||||
|
VOICE_FORTY
|
||||||
|
VOICE_FIFTY
|
||||||
|
VOICE_SIXTY
|
||||||
|
VOICE_SEVENTY
|
||||||
|
VOICE_EIGHTY
|
||||||
|
VOICE_NINETY
|
||||||
|
VOICE_CHAR_A
|
||||||
|
VOICE_CHAR_B
|
||||||
|
VOICE_CHAR_C
|
||||||
|
VOICE_CHAR_D
|
||||||
|
VOICE_CHAR_E
|
||||||
|
VOICE_CHAR_F
|
||||||
|
VOICE_CHAR_G
|
||||||
|
VOICE_CHAR_H
|
||||||
|
VOICE_CHAR_I
|
||||||
|
VOICE_CHAR_J
|
||||||
|
VOICE_CHAR_K
|
||||||
|
VOICE_CHAR_L
|
||||||
|
VOICE_CHAR_M
|
||||||
|
VOICE_CHAR_N
|
||||||
|
VOICE_CHAR_O
|
||||||
|
VOICE_CHAR_P
|
||||||
|
VOICE_CHAR_Q
|
||||||
|
VOICE_CHAR_R
|
||||||
|
VOICE_CHAR_S
|
||||||
|
VOICE_CHAR_T
|
||||||
|
VOICE_CHAR_U
|
||||||
|
VOICE_CHAR_V
|
||||||
|
VOICE_CHAR_W
|
||||||
|
VOICE_CHAR_X
|
||||||
|
VOICE_CHAR_Y
|
||||||
|
VOICE_CHAR_Z
|
||||||
|
VOICE_PAUSE");
|
||||||
|
|
||||||
|
sub not_ignorelist {
|
||||||
|
my ($key) = @_;
|
||||||
|
foreach (@ignorelist) {
|
||||||
|
if ($_ eq $key) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
##################
|
||||||
|
|
||||||
|
if($#ARGV != 2) {
|
||||||
|
print "Usage: updatelang <english.lang> <otherlang> [<outfile>|-]\n";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse master file
|
||||||
|
my %english = parselangfile($ARGV[0]);
|
||||||
|
my @englishorder = @{$english{'ORDER'}};
|
||||||
|
|
||||||
|
# Parse secondary file
|
||||||
|
my %lang = parselangfile($ARGV[1]);
|
||||||
|
my @langorder = @{$lang{'ORDER'}};
|
||||||
|
my @langheader = @{$lang{'HEADER'}};
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
delete $english{'ORDER'};
|
||||||
|
delete $english{'HEADER'};
|
||||||
|
delete $lang{'ORDER'};
|
||||||
|
delete $lang{'HEADER'};
|
||||||
|
|
||||||
|
# ork out the missing phrases
|
||||||
|
my %missing;
|
||||||
|
my @missingorder;
|
||||||
|
|
||||||
|
foreach (@englishorder) {
|
||||||
|
$missing{$_} = 1;
|
||||||
|
}
|
||||||
|
foreach (@langorder) {
|
||||||
|
if (!defined($english{$_})) {
|
||||||
|
delete($lang{$_});
|
||||||
|
# print "#!! '$_' no longer needed\n";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
delete $missing{$_};
|
||||||
|
}
|
||||||
|
foreach (@englishorder) {
|
||||||
|
push(@missingorder, $_) if defined($missing{$_});
|
||||||
|
}
|
||||||
|
# And add them to the phrase list.
|
||||||
|
foreach (@missingorder) {
|
||||||
|
# print "#!! '$_' missing\n";
|
||||||
|
push(@langorder, $_);
|
||||||
|
$lang{$_} = $english{$_};
|
||||||
|
$lang{$_}{'notes'} .= "### This phrase is missing entirely, copying from english!\n";
|
||||||
|
$lang{$_}{'new'} = 1;
|
||||||
|
}
|
||||||
|
undef @missingorder;
|
||||||
|
undef %missing;
|
||||||
|
|
||||||
|
# Sanity-check a few things
|
||||||
|
foreach my $id (@langorder) {
|
||||||
|
if (!defined($english{$id})) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my %ep = %{$english{$id}{'phrase'}};
|
||||||
|
my %lp = %{$lang{$id}{'phrase'}};
|
||||||
|
|
||||||
|
if ($lp{'desc'} ne $ep{'desc'}) {
|
||||||
|
if ($ep{'desc'} eq 'deprecated') {
|
||||||
|
# Nuke all deprecated targets; just copy from English
|
||||||
|
# print "#!! '$id' deprecated, deleting\n";
|
||||||
|
$lang{$id} = $english{$id};
|
||||||
|
} else {
|
||||||
|
$lang{$id}{'notes'} .= "### The 'desc' field for '$id' differs from the english!\n### the previously used desc is commented below:\n### desc: $lp{desc}\n";
|
||||||
|
$lang{$id}{'phrase'}{'desc'} = $english{$id}{'phrase'}{'desc'};
|
||||||
|
# print "#!! '$id' changed description\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($lp{'user'}) || $lp{'user'} ne $ep{'user'}) {
|
||||||
|
if (!defined($lp{'user'})) {
|
||||||
|
$lp{'user'} = $ep{'user'};
|
||||||
|
}
|
||||||
|
$lang{$id}{'notes'} .= "### The 'user' field for '$id' differs from the english!\n### the previously used desc is commented below:\n### desc: $lp{user}\n";
|
||||||
|
$lang{$id}{'phrase'}{'user'} = $english{$id}{'phrase'}{'user'};
|
||||||
|
# print "#!! '$id' changed user\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check sources
|
||||||
|
foreach my $id (@langorder) {
|
||||||
|
if (!defined($english{$id})) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my %ep = %{$english{$id}{'source'}};
|
||||||
|
my %lp;
|
||||||
|
|
||||||
|
if (defined($lang{$id}{'source'})) {
|
||||||
|
%lp = %{$lang{$id}{'source'}};
|
||||||
|
} else {
|
||||||
|
%lp = ();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $tgt (keys(%lp)) {
|
||||||
|
if (!defined($ep{$tgt})) {
|
||||||
|
# Delete any targets that have been nuked in master
|
||||||
|
delete($lang{$id}{'source'}{$tgt});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach my $tgt (keys(%ep)) {
|
||||||
|
if (!defined($lp{$tgt})) {
|
||||||
|
# If it doesn't exist in the language, copy it from English
|
||||||
|
$lang{$id}{'notes'} .= "### The <source> section for '$id:$tgt' is missing! Copying from english!\n";
|
||||||
|
# print "#!! '$id:$tgt' source missing\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
} elsif ($lp{$tgt} ne $ep{$tgt}) {
|
||||||
|
# If the source string differs, complain, and copy from English
|
||||||
|
$lang{$id}{'notes'} .= "### The <source> section for '$id:$tgt' differs from the english!\n";
|
||||||
|
$lang{$id}{'notes'} .= "### the previously used one is commented below:\n";
|
||||||
|
$lang{$id}{'notes'} .= "### $english{$id}{source}{$tgt}\n";
|
||||||
|
# print "#!! '$id:$tgt' source changed ('$lp{$tgt}' vs '$ep{$tgt}')\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check dests
|
||||||
|
foreach my $id (@langorder) {
|
||||||
|
if (!defined($english{$id})) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my %ep = %{$english{$id}{'dest'}};
|
||||||
|
my %lp;
|
||||||
|
|
||||||
|
if (defined($lang{$id}{'dest'})) {
|
||||||
|
%lp = %{$lang{$id}{'dest'}};
|
||||||
|
} else {
|
||||||
|
%lp = ();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $tgt (keys(%lp)) {
|
||||||
|
if (!defined($ep{$tgt})) {
|
||||||
|
# Delete any targets that have been nuked in master
|
||||||
|
delete($lang{$id}{'dest'}{$tgt});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach my $tgt (keys(%ep)) {
|
||||||
|
if (!defined($lp{$tgt})) {
|
||||||
|
# If it doesn't exist in the language, copy it from English
|
||||||
|
$lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is missing! Copying from english\n";
|
||||||
|
# print "#!! '$id:$tgt' dest missing\n";
|
||||||
|
$lang{$id}{'dest'}{$tgt} = $english{$id}{'dest'}{$tgt};
|
||||||
|
} elsif ($lp{$tgt} ne $ep{$tgt}) {
|
||||||
|
# If the source string differs, complain, and copy from English
|
||||||
|
if ($lp{$tgt} eq '' && $ep{$tgt} ne '') {
|
||||||
|
$lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is blank! Copying from english!\n";
|
||||||
|
# print "#!! '$id:$tgt' dest is blank ('$lp{$tgt}' vs '$ep{$tgt}')\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
} elsif ($lp{$tgt} ne '' && $ep{$tgt} eq '') {
|
||||||
|
# It should be kept blank!
|
||||||
|
$lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is not blank!\n";
|
||||||
|
$lang{$id}{'notes'} .= "### the previously used one is commented below:\n";
|
||||||
|
$lang{$id}{'notes'} .= "### $english{$id}{dest}{$tgt}\n";
|
||||||
|
# print "#!! '$id:$tgt' dest not blank ('$lp{$tgt}' vs '$ep{$tgt}')\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
}
|
||||||
|
} elsif ($lp{$tgt} ne 'none' && $lp{$tgt} ne '' && not_ignorelist($id) && !$lang{$id}{'new'}) {
|
||||||
|
$lang{$id}{'notes'} .= "### The <dest> section for '$id:$tgt' is identical to english!\n";
|
||||||
|
# print "#!! '$id:$tgt' dest identical ('$lp{$tgt}')\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check voices
|
||||||
|
foreach my $id (@langorder) {
|
||||||
|
if (!defined($english{$id})) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my %ep = %{$english{$id}{'voice'}};
|
||||||
|
my %lp;
|
||||||
|
|
||||||
|
if (defined($lang{$id}{'voice'})) {
|
||||||
|
%lp = %{$lang{$id}{'voice'}};
|
||||||
|
} else {
|
||||||
|
%lp = ();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $tgt (keys(%lp)) {
|
||||||
|
if (!defined($ep{$tgt})) {
|
||||||
|
# Delete any targets that have been nuked in master
|
||||||
|
delete($lang{$id}{'voice'}{$tgt});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach my $tgt (keys(%ep)) {
|
||||||
|
if (!defined($lp{$tgt})) {
|
||||||
|
# If it doesn't exist in the language, copy it from English
|
||||||
|
$lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is missing! Copying from english\n";
|
||||||
|
# print "#!! '$id:$tgt' voice missing\n";
|
||||||
|
$lang{$id}{'voice'}{$tgt} = $english{$id}{'voice'}{$tgt};
|
||||||
|
} elsif ($lp{$tgt} ne $ep{$tgt}) {
|
||||||
|
if ($lp{$tgt} eq '' && $ep{$tgt} ne '') {
|
||||||
|
# If the lang voice string is blank, complain, and copy from English
|
||||||
|
$lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is blank! Copying from english!\n";
|
||||||
|
# print "#!! '$id:$tgt' voice is blank ('$lp{$tgt}' vs '$ep{$tgt}')\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
} elsif ($lp{$tgt} ne '' && $ep{$tgt} eq '') {
|
||||||
|
# If it's not blank, clear it and complain!
|
||||||
|
$lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is not blank!\n";
|
||||||
|
$lang{$id}{'notes'} .= "### the previously used one is commented below:\n";
|
||||||
|
$lang{$id}{'notes'} .= "### $english{$id}{voice}{$tgt}\n";
|
||||||
|
# print "#!! '$id:$tgt' voice not blank ('$lp{$tgt}' vs '$ep{$tgt}')\n";
|
||||||
|
$lang{$id}{'source'}{$tgt} = $english{$id}{'source'}{$tgt};
|
||||||
|
}
|
||||||
|
} elsif ($lp{$tgt} ne 'none' && $lp{$tgt} ne '' && not_ignorelist($id) && !$lang{$id}{'new'}) {
|
||||||
|
$lang{$id}{'notes'} .= "### The <voice> section for '$id:$tgt' is identical to english!\n";
|
||||||
|
# print "#!! '$id:$tgt' voice identical ('$lp{$tgt}')\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
########## Write new language file
|
||||||
|
my $printnotes = 1;
|
||||||
|
|
||||||
|
my @tmp = split(/\./, basename($ARGV[0]));
|
||||||
|
my $f1 = $tmp[0];
|
||||||
|
@tmp = split(/\./, basename($ARGV[1]));
|
||||||
|
my $f2 = $tmp[0];
|
||||||
|
|
||||||
|
if (index($f2, $f1) > -1) {
|
||||||
|
$printnotes = 0;
|
||||||
|
}
|
||||||
|
undef $f1;
|
||||||
|
undef $f2;
|
||||||
|
undef @tmp;
|
||||||
|
|
||||||
|
my $fh;
|
||||||
|
if ($ARGV[2] ne '-') {
|
||||||
|
open(FH, ">$ARGV[2]") || die ("Can't open $ARGV[2]");
|
||||||
|
$fh = *FH;
|
||||||
|
} else {
|
||||||
|
$fh = *STDOUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (@langheader) {
|
||||||
|
print $fh $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @finalorder = @langorder; # TODO make configurable vs @englishorder
|
||||||
|
foreach my $id (@finalorder) {
|
||||||
|
if (!defined($english{$id})) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my %lp;
|
||||||
|
|
||||||
|
# phrase
|
||||||
|
%lp = %{$lang{$id}{'phrase'}};
|
||||||
|
if (length($lang{$id}{'notes'}) && $printnotes) {
|
||||||
|
print $fh "$lang{$id}{notes}";
|
||||||
|
}
|
||||||
|
print $fh "<phrase>\n";
|
||||||
|
print $fh " id: $lp{id}\n";
|
||||||
|
if ($lp{'desc'} ne '') {
|
||||||
|
print $fh " desc: $lp{desc}\n";
|
||||||
|
} else {
|
||||||
|
print $fh " desc:\n";
|
||||||
|
}
|
||||||
|
print $fh " user: $lp{user}\n";
|
||||||
|
|
||||||
|
# source
|
||||||
|
%lp = combinetgts(%{$lang{$id}{'source'}});
|
||||||
|
print $fh " <source>\n";
|
||||||
|
foreach my $tgt (sort(keys(%lp))) {
|
||||||
|
if ($lp{$tgt} eq 'none') {
|
||||||
|
print $fh " $tgt: $lp{$tgt}\n";
|
||||||
|
} else {
|
||||||
|
print $fh " $tgt: \"$lp{$tgt}\"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print $fh " </source>\n";
|
||||||
|
|
||||||
|
# dest
|
||||||
|
%lp = combinetgts(%{$lang{$id}{'dest'}});
|
||||||
|
print $fh " <dest>\n";
|
||||||
|
foreach my $tgt (sort(keys(%lp))) {
|
||||||
|
if ($lp{$tgt} eq 'none') {
|
||||||
|
print $fh " $tgt: $lp{$tgt}\n";
|
||||||
|
} else {
|
||||||
|
print $fh " $tgt: \"$lp{$tgt}\"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print $fh " </dest>\n";
|
||||||
|
|
||||||
|
# voice
|
||||||
|
%lp = combinetgts(%{$lang{$id}{'voice'}});
|
||||||
|
print $fh " <voice>\n";
|
||||||
|
foreach my $tgt (sort(keys(%lp))) {
|
||||||
|
if ($lp{$tgt} eq 'none') {
|
||||||
|
print $fh " $tgt: $lp{$tgt}\n";
|
||||||
|
} else {
|
||||||
|
print $fh " $tgt: \"$lp{$tgt}\"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print $fh " </voice>\n";
|
||||||
|
|
||||||
|
# FiN
|
||||||
|
print $fh "</phrase>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ARGV[2] ne '-') {
|
||||||
|
close(FH);
|
||||||
|
}
|
|
@ -348,7 +348,7 @@ sub generateclips {
|
||||||
if ($existingids) {
|
if ($existingids) {
|
||||||
$idfile = $existingids;
|
$idfile = $existingids;
|
||||||
} else {
|
} else {
|
||||||
$cmd = "genlang -u -e=$english $langfile > $updfile";
|
$cmd = "updatelang $english $langfile $updfile";
|
||||||
print("> $cmd\n") if $verbose;
|
print("> $cmd\n") if $verbose;
|
||||||
system($cmd);
|
system($cmd);
|
||||||
$cmd = "genlang -o -t=$target -e=$english $updfile 2>/dev/null > $idfile";
|
$cmd = "genlang -o -t=$target -e=$english $updfile 2>/dev/null > $idfile";
|
||||||
|
|
Loading…
Reference in a new issue