OpenTTD-patches/utils/conv-lang.pl
2023-07-30 23:09:24 +01:00

137 lines
2.6 KiB
Perl
Executable File

#!/usr/bin/env perl
# This file is part of OpenTTD.
# OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
# OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
use strict;
use warnings;
use utf8;
use File::Slurp;
my @langs = qw(
afrikaans.txt
arabic_egypt.txt
basque.txt
belarusian.txt
brazilian_portuguese.txt
bulgarian.txt
catalan.txt
chuvash.txt
croatian.txt
czech.txt
danish.txt
dutch.txt
english_AU.txt
english_US.txt
esperanto.txt
estonian.txt
faroese.txt
finnish.txt
french.txt
frisian.txt
gaelic.txt
galician.txt
german.txt
greek.txt
hebrew.txt
hindi.txt
hungarian.txt
icelandic.txt
ido.txt
indonesian.txt
irish.txt
italian.txt
japanese.txt
korean.txt
latin.txt
latvian.txt
lithuanian.txt
luxembourgish.txt
macedonian.txt
malay.txt
maltese.txt
marathi.txt
norwegian_bokmal.txt
norwegian_nynorsk.txt
persian.txt
polish.txt
portuguese.txt
romanian.txt
russian.txt
serbian.txt
simplified_chinese.txt
slovak.txt
slovenian.txt
spanish.txt
spanish_MX.txt
swedish.txt
tamil.txt
thai.txt
traditional_chinese.txt
turkish.txt
urdu.txt
ukrainian.txt
vietnamese.txt
welsh.txt
);
my @lang_lines;
my $override = 0;
my $no_translate = 0;
my @lines = read_file("extra/english.txt") or die("Can't read english.txt");
for (@lines) {
$override = 0 if /##override off/;
$override = 1 if /##override on/;
$no_translate = 0 if /##no-translate off/;
$no_translate = 1 if /##no-translate on/;
next if $override;
next if $no_translate;
next if /^##/;
push @lang_lines, $_;
}
for my $lang (@langs) {
my @in_lines = read_file($lang);
push @in_lines, read_file("extra/$lang");
my %strs;
for (@in_lines) {
chomp;
next if /^#/;
if (/^(\w+)\s*:/) {
$strs{$1} = $_;
}
}
my @lines;
my $suppress_whitespace = 1;
for (@lang_lines) {
if (/^(\w+)\s*:/) {
my $str = $strs{$1};
if ($str) {
$str =~ s/\{((?:\d:)?)STRING\d\}/{${1}STRING}/g;
$str =~ s/\{((?:\d:)?)RAW_STRING\}/{${1}STRING}/g;
push @lines, $str . "\n";
$suppress_whitespace = 0;
}
} else {
next if ($_ eq "\n") && $suppress_whitespace;
push @lines, $_;
$suppress_whitespace = ($_ eq "\n");
}
}
pop @lines if ($lines[-1] eq "\n");
write_file("extra/$lang", @lines);
}