forked from 0ad/0ad
58 lines
1.5 KiB
Perl
58 lines
1.5 KiB
Perl
use strict;
|
|
use warnings;
|
|
|
|
my $language = "english";
|
|
|
|
our %config;
|
|
do "config.pl";
|
|
|
|
use DataFiles;
|
|
use Strings;
|
|
use Translations;
|
|
|
|
use Spreadsheet::ParseExcel;
|
|
|
|
fromspreadsheet($config{strings_filename}, $config{data_path}."/$language/translations.txt", $config{data_path}."/$language/work.xls");
|
|
|
|
sub fromspreadsheet {
|
|
my ($strings_filename, $translations_filename, $spreadsheet_filename) = @_;
|
|
|
|
# Read data from spreadsheet:
|
|
|
|
my $strings = DataFiles::read_file($strings_filename);
|
|
my $translations = DataFiles::read_file($translations_filename, ignoremissing=>1);
|
|
|
|
my $workbook = Spreadsheet::ParseExcel::Workbook->Parse($spreadsheet_filename);
|
|
|
|
my %strings; # Data associated with each string. (type:id => { description => '...' }, ...)
|
|
my %translations; # Data associated with each translation. (type:id => translation, ...)
|
|
|
|
for my $worksheet (@{$workbook->{Worksheet}}) {
|
|
my $type = $worksheet->{Name};
|
|
|
|
my @rows;
|
|
for my $row ($worksheet->{MinRow} .. $worksheet->{MaxRow}) {
|
|
next if $row == 0;
|
|
push @rows, [];
|
|
for my $col ($worksheet->{MinCol} .. $worksheet->{MaxCol}) {
|
|
push @{$rows[-1]}, $worksheet->{Cells}[$row][$col]->{Val};
|
|
}
|
|
}
|
|
|
|
for (@rows) {
|
|
my $id = $type.':'.$_->[0];
|
|
|
|
if ($strings{$id}) {
|
|
warn "Duplicated string $id!";
|
|
}
|
|
$strings{$id} = { description => $_->[2] };
|
|
$translations{$id} = $_->[1];
|
|
}
|
|
}
|
|
|
|
Strings::merge($strings_filename, %strings);
|
|
|
|
Translations::merge($translations_filename, %translations);
|
|
|
|
}
|