I know this might not be on your list of targets, but Tagalog localization might be possible? In case there might be that small niche of players who speak that primarily. Just placing it here as a suggestion.Wikipedia says that Tagalog currently uses Latin writing system, so it won't be very difficult to make localization. Of course translation of text strings is up to you and anyone interested, I can only provide the utilty program.
Binary l10n is always a pain, especially with languages whose word sizes differ when translated.If memory serves me, about 25 percent text strings translated in Russian are much longer then corresponding original strings. That was rather tricky, but I've solved the problem.
BTW, binary patches (and partial disassembly) might require Toady One permission. Just sayin'.I've just sent him
A while ago I did send the source code of my GUI to someone, and he said the russian masterwork mod is about 50% done... I saw screenshots, it works. :)As far as I know russian masterwork mod uses my localization patch. Someone I know under Rian Ashes nickname said he is going to translate the masterwork mod :)
Hey, found your thread on the forums, I'm interested on making a Lithuanian (at least partial) localization. Any chance I could get my hands on your program? Did you add Latin characters yet?It's better to say, "did you remove cyrillic characters?" :) It's not so hard to do. The greater problem for me is how to name the new utility? For now it is called dfrus, it's obvious that the universal utility needs another name.
|Activity|Activity|
|Training Session|Training Session|
|Activity Event|Activity Event|
|Go to Combat Training|Go to Combat Training|
|Organize Combat Training|Organize Combat Training|
|Lead Combat Training|Lead Combat Training|
|Wait for Combat Training|Wait for Combat Training|
...
|Activity event|Ytivitca tneve| some comment here
Be careful with lines that ends with ==. The length of translation in that lines must be the same as the length of the original string to prevent the game from crash.I just tested this, and it enables a lot of things of interest to people with total conversions. You can rename everything with this, all vanilla things. All vanilla reactions, even procedually generated demons, titans and FBs. You can make steampunk-themed FBs and alien-titans with this if you so desire. Or make clowns actual clowns, at least from the name.I even didn't suppose such an application for the tool :D From this point of view it opens new horizons for modding :)
Same with reactions. I know the Necromunda total conversion uses "brew drink" to make clean drinking water, so it could be renamed to "clean water". Or rename it to "press juice", if you play humans that dont need booze.
Same with furniture. Instead of doors you could make "vault doors", for the fallout mod. And replace "a vile force of darkness" with "a marauding group of supermutants" ;)
You can also hide endless amounts of easter eggs with this in the game. "Winter is upon you" turns to "Ned Stark was right: Winter is coming"
All in all, a very powerful tool.
|An ambush! Drive them out!|An ambush! Drive them out!|
|Thief! Protect the hoard from skulking filth!|Thief! Protect the hoard from skulking filth!|
|An ambush! Skulking vermin!|An ambush! Skulking vermin!|
|An ambush! Curse all friends of nature!|An ambush! Curse all friends of nature!|
|An ambush! Curse them!|An ambush! Curse them!|
I know some DFfans in China had already done a simplified chinese localization version.I haven't hear about Chinese localization before.
Perhaps you could ask them for some help?Spoiler (click to show/hide)
There are no "Slaves to Armok:" nor "Chapter II: Dwarf Fortress" strings unobfuscated in the Dwarf Fortress.exe.Thats exactly what I thought... not that I tried finding those, no... never... ^^
Wait, what about string length? Does that mean that for example if I want to translate "Carpenter's workshop" (20 chars), that in Spanish would be "Taller de carpintería" or "Taller del carpintero" (both 21 char), then I could only write "Taller de carpinterí" or "Taller del carpinter"?In the most cases string length doesn't matter (within reason, of course). There are some problematic strings, which length must be the same as in the original, most of them are marked with == at the end of line, some are yet to be discovered.
Other way less convoluted to ask, if a string is 20 chars long, at the moment of translation I need to replace it for exactly for a word(s) 20 chars long? Can't it be more (21), or less (19)?
I seem to be unable to translate the (Start Playing->) Dwarf Fortress option. The included "Dwarf Fortress" when changed to something like "Vault mode" does not produce the desired result.The included "Dwarf Fortress" affects only on the window's caption. The text you are searching is encrypted as Meph already said.
http://www.bay12forums.com/smf/index.php?topic=108721.msg4175521#msg4175521Oh...
Say, what happens to this when DF is updated? I assume the utility has to be changed, at the very least the string-dump...The utility will work as is without any modifications, assuming that DF will be compiled with the same compiler as previously. Of course the string-dump has to be updated.
Just asking, because I cant really update my mod without this. ^^
Oh and @insolor:If you mean "Error: Failed to import changetext.py module", this is probably because of syntax errors in the module, eg. missing comma between key:value entries.
I can't seem to add new lines to the "phrases" part. I can replace the contents of the ready ones with other stuff and everything works just fine, but having one more line than default inside phrases{...} makes it spit up an error at startup and not change anything.
Do you need to declare the amount of altered strings somewhere or am I offending Python in some way?
Does it lead to crashes, like the localisation patcher, if you change the length of certain strings?It doesn't and it's the first advantage. Strings that are too long are just truncated. The truncation occurs because the width of "plate" on which text is drawn calculates as width of some "wide" letter multiplied by the original text length. (Btw, we get black tails after end of text in the game for non-monotype fonts by the same reason: plates turn way longer than text they contain)
If you mean "Error: Failed to import changetext.py module", this is probably because of syntax errors in the module, eg. missing comma between key:value entries.
btw, is this your way of saying that seperate should be separate? :P
(Btw, we get black tails after end of text in the game for non-monotype fonts by the same reason: plates turn way longer than text they contain)
Does this mean it can fix some of the TTF display errors?Nope, it cannot. Toady One can. Or some person who can fix the problem inside the game without having source code.
For Example:
"Make magenta bricks from blocks (4)" is so long ingame, that it overwrites the 'R' and 'S', the repeat and suspended letters. But the TTF version is short enough not to block them. Usually, DF would still overwrite the 'R' and 'S', because the Non-TTF version is long enough to overwrite them. But with this new utility of yours it wouldnt be the case anymore?
Hope that was somehow clearer in writing then in my head. :P
extract a string dump from the running 40.03 .exeHow?
You didn't exactly foster a golden age of Dwarf Fortress localization, I'm afraid. You just facilitated wonderful changes like "modifiable proc-gen creatures" and "no more walls of text in description screens":How did you get the line breaks in the item description?Spoiler (click to show/hide)
https://bitbucket.org/dfint/df-i18n/downloadsThank you. :)
Uploaded string dump for DF 0.40.04
Updated older ones (some cleanup have been made)
How did you get the line breaks in the item description?
decoded help filesThank you for mention. We had some untranslated parts of text (specifically announcements). I've just searched the forum and found some useful posts about this.
#!/usr/bin/perl
# Script to encode and decode the Dwarf Fortress compressed
# announcement / help / dipscript files.
#
# Released into the public domain by Ilmari Karonen (Vyznev).
# Do whatever you want with it.
#
# Usage: Run once in your main DF folder with the --reverse switch to
# decode all compressed files from data/ to data_src/. After editing
# the decoded text files, run without the --reverse switch to update
# the compressed files. See below for more options.
use strict;
use warnings;
use Compress::Zlib qw'compress uncompress $gzerrno';
use Getopt::Long qw'GetOptions';
my $basedir = ".";
my $datadir = "data";
my $textdir = "data_src";
my $usage = <<"END";
Usage: $0 [options] <subdir(s)>
Options:
--reverse, -r
Decode compressed files into text files, rather than the opposite.
--force, -f
Overwrite target files even if they are newer than the source files.
--quiet, -q
Print nothing unless something goes wrong.
--verbose, -v
Show exactly what is being en/decoded.
--basedir=<dir>, -d <dir>
Look for the data/text directories under <dir> instead of "$basedir".
--datadir=<dir>
Subdirectory containing compressed data files (default: "$datadir").
--textdir=<dir>
Subdirectory containing uncompressed text files (default: "$textdir").
The remaining arguments should be file or directory names found under the
data/text subdirectories.
END
GetOptions( 'r|reverse' => \my $reverse,
'f|force' => \my $force,
'q|quiet' => \my $quiet,
'v|verbose' => \my $verbose,
'd|basedir=s' => \$basedir,
'datadir=s' => \$datadir,
'textdir=s' => \$textdir,
) or die $usage;
undef $quiet if $verbose;
# strip trailing slashes, strip base dir names from subdirs
# XXX: this is kind of a kluge, but allows use of command line completion and/or shell wildcards for subdirs
s!/*$!! for $basedir, $datadir, $textdir;
s!^\Q$basedir\E/!!, s!^(\Q$datadir\E|\Q$textdir\E)/!! for @ARGV;
$_ = "$basedir/$_" for $datadir, $textdir;
my $srcdir = ($reverse ? $datadir : $textdir);
my $dstdir = ($reverse ? $textdir : $datadir);
die "Source directory $srcdir not found.\n" unless -d $srcdir;
mkdir $dstdir or die "Error creating target directory $dstdir: $!\n" unless -d $dstdir;
my %skipdirs = ("." => 1, ".." => 1); # don't recurse into these directories!
# traverse the directories:
my @stack = (@ARGV ? reverse @ARGV : ".");
while (@stack) {
my $name = pop @stack;
# catch errors with eval, resume from next entry:
eval {
my $srcpath = "$srcdir/$name";
my $dstpath = "$dstdir/$name";
s!(^|/)(\./)+!$1!g for $srcpath, $dstpath; # strip useless /./ from paths
if (!-e $srcpath) {
warn "$srcpath does not exist.\n";
}
elsif (-d _) {
# make sure the target directory exists:
unless (-d $dstpath) {
mkdir $dstpath or die "Error creating $dstpath: $!\n";
}
# push contents of source directory on stack:
opendir DIR, $srcpath or die "Error opening directory $srcpath: $!\n";
push @stack, reverse map "$name/$_", grep !$skipdirs{$_}, readdir DIR;
closedir DIR, $srcpath or die "Error opening directory $srcpath: $!\n";
}
else {
# assume it's a file:
if ($reverse) {
die "$srcpath already has .txt suffix, skipping.\n" if $srcpath =~ /\.txt$/;
$dstpath .= ".txt";
} else {
die "$srcpath doesn't have a .txt suffix, skipping.\n" unless $srcpath =~ /\.txt$/;
$dstpath =~ s/\.txt$//;
}
my $srctime = (stat _)[9];
my $dsttime = (stat $dstpath)[9] || 0;
if ($dsttime >= $srctime and not $force) {
# XXX: if the times are identical, silently assume the files to be up to date
warn "$dstpath is newer than $srcpath (use --force to overwrite)\n" unless $dsttime == $srctime;
return;
}
if ($reverse) {
decode_datafile($srcpath, $dstpath);
} else {
encode_datafile($srcpath, $dstpath);
}
# set the target file's timestamp equal to the source file's:
utime $srctime, $srctime, $dstpath;
}
};
# announce any errors caught by eval, then resume from next file:
warn $@ if $@;
}
exit;
# decode compressed DF data file to a plain text file:
sub decode_datafile {
my ($zipfile, $txtfile) = @_;
my $filename = (split "/", $zipfile)[-1];
# decode compressed file to text file
open my $zip, '<', $zipfile or die "Failed to open $zipfile: $!\n";
binmode $zip;
local $/; # slurp mode
my ($len, $deflate) = unpack "Va*", <$zip>;
close $zip or die "Error reading $zipfile: $!\n";
defined $len or die "Something went wrong reading $zipfile!\n";
# verify length tag (also works as a file format check):
die "$zipfile has mismatched length tag ($len != ".length($deflate).").\n"
if $len != length $deflate;
# kluge: deobfuscate index file
my $index_mode = ($zipfile =~ m!/index$!);
warn "Note: automatically deobfuscating index file $zipfile\n" if $index_mode and not $quiet;
# decompress input data (secondary format check):
my $data = uncompress $deflate;
die "Uncompressing $zipfile failed: $gzerrno\n" unless defined $data;
# open output file:
open my $txt, '>:crlf', $txtfile or die "Failed to open $txtfile: $!\n";
# extract line count from data stream:
(my $n, $data) = unpack "Va*", $data;
warn "Decoding $n lines from $zipfile to $txtfile\n" unless $quiet;
# extract and print lines from data stream:
foreach my $line (1 .. $n) {
(my $len, my $len2, $data) = unpack "Vva*", $data;
die "Error: length mismatch for line $line: $len != $len2\n" if $len != $len2;
(my $str, $data) = unpack "a[$len]a*", $data;
warn "Warning: expected $len bytes for line $line, got only ".length($str)."\n"
if $len != length $str;
# kluge: deobfuscate index file
$str =~ s/(.)/chr(255 - ($-[1] % 5) - ord $1)/seg if $index_mode;
warn "Warning: non-ASCII characters found on line $line of $zipfile.\n" if $str =~ /[^\t -~]/;
warn "Warning: first line \"$txt\" does not match file name $zipfile.\n"
if $line == 1 and $str ne $filename;
print $txt $str, "\n";
if ($verbose) {
s/\\/\\\\/g, s/\r/\\r/g, s/\n/\\n/g, s/\t/\\t/g for $str;
s/([^ -~])/sprintf "\\x%02X", ord $1/eg for $str;
warn " line $line: \"$str\" ($len bytes)\n";
}
}
# close output file:
close $txt or die "Error writing to $txtfile: $!\n";
}
# encode plain text file to compressed DF data file:
sub encode_datafile {
my ($txtfile, $zipfile) = @_;
my $filename = (split "/", $zipfile)[-1];
# open input text file:
open my $txt, '<:crlf', $txtfile or die "Failed to open $txtfile: $!\n";
my @lines = <$txt>;
close $txt or die "Error reading $txtfile: $!\n";
# strip newlines and trailing blank lines:
s/\r?\n$// for @lines;
pop @lines while @lines and $lines[-1] !~ /\S/;
# consistency checks:
warn "Encoding ".@lines." lines from $txtfile to $zipfile\n" unless $quiet;
warn "Warning: first line \"$lines[0]\" does not match file name $zipfile.\n"
if @lines and $lines[0] ne $filename;
if ($verbose) {
foreach my $line (1 .. @lines) {
my $str = $lines[$line-1];
my $len = length $str;
s/\\/\\\\/g, s/\r/\\r/g, s/\n/\\n/g, s/\t/\\t/g for $str;
s/([^ -~])/sprintf "\\x%02X", ord $1/eg for $str;
warn " line $line: \"$str\" ($len bytes)\n";
}
}
# kluge: obfuscate index file
if ($zipfile =~ m!/index$!) {
warn "Note: automatically obfuscating index file $zipfile\n" unless $quiet;
s/(.)/chr(255 - ($-[1] % 5) - ord $1)/seg for @lines;
}
# prepend length tags:
$_ = pack "Vva*", length, length, $_ for @lines;
# concatenate lines, prepend count tag and compress data:
my $data = pack "V/(a*)*", @lines;
my $deflate = compress $data;
# write output file:
open my $zip, '>', $zipfile or die "Failed to open $zipfile: $!\n";
binmode $zip;
print $zip pack("V", length $deflate), $deflate;
close $zip or die "Error writing to $zipfile: $!\n";
}
I can't know what information you found or are still missing, but here's the translator.pl that Putnam very kindly handed off to me, just in case. This thread is all about farting around in the forbidden zone, after all.Thank you a lot :)
And you remember the weird tags that control colors and line formatting in the decoded help files, right?No I dont, but I know the formatted embark message, but never noticed any tags.
[B] => linebreak
[P] => linebreak with empty line in between
And if I replace 000226A5| twisted into humanoid form| with 000226A5| twisted into humanoid form[P]| I would get a nicer unit description? Man, I have to try this with dwarves asap.
Thanks, you are awesome.Nothing to. When the tools are sharpened, it takes only a few minutes to extract and slightly filter the string dump.
It will be very useful for my Fallout mod (again).
Since I keep forgetting how to sweep away the hex addresses from the front and duplicate the string proper, I'll jot them down here while I still remember. You only need two regular expressions in Notepad++:My bad, I forgot to include instruction :)
Select first seven characters, make them go away:
Find: ^.{1,7}
Replace: nothing
Take note of the bit with the bars around it, then make it double:
Find: (\|.*\|)
Replace: \1\1
Then just use the standard search to replace the ||:s with single |:s. All done.
This line doesn't contain any bars, consider this as a comment
| only one bar - ignore this!
12345whatever|somestring| There is two bars (like in a stringdump), it's just a template
1256|abc|| Here is an action: replace abc with an empty string
6346|cde|xyz| replace cde with xyz
Still, uniform formatting is great for WinMerge shit. That thing hiccups on the dumbest things.
Yeah, its lovely. I tried that formatting trick with 'B' for linebreaks, and suddenly all the coins, artefacts and items are very readable. :)
[B]
in front of that, you get a linebreak. Just like adding a tag here on the board. I made a post about it here, including all lines I altered: http://www.bay12forums.com/smf/index.php?topic=141686.0[]
itself are read out by DF, it thinks you are ending the descriptions tag. It only works in the string dump, or in the weird-text-files, which are the diplomat texts and the embark text. And the ingame manual.|soot|soot|
|embers|embers|
|cinders|cinders|
|composed of ash|composed of ash|
|shade|shade|
|sludge|sludge|
|composed of mud|composed of mud|
|brown|brown|
|slick|slick|
|quagmire|quagmire|
|composed of vomit|composed of vomit|
|green|green|
|disgusting appearance|disgusting appearance|
|brine|brine|
|composed of salt|composed of salt|
|white|white|
|composed of grime and filth|composed of grime and filth|
|waste|waste|
|composed of snow|composed of snow|
|blizzard|blizzard|
|sleet|sleet|
|composed of water|composed of water|
|flood|flood|
|tear|tear|
| of tears| of tears|
|composed of steam|composed of steam|
|boiling|boiling|
|flame|flame|
|composed of flame|composed of flame|
|red|red|
|inferno|inferno|
|flare|flare|
|flash|flash|
|flaming|flaming|
|scorching|scorching|
|composed of amber|composed of amber|
|composed of coral|composed of coral|
|composed of green glass|composed of green glass|
|composed of clear glass|composed of clear glass|
|composed of crystal glass|composed of crystal glass|
|composed of coke|composed of coke|
|composed of charcoal|composed of charcoal|
|black|black|
|composed of solid salt|composed of solid salt|
|composed of ice|composed of ice|
|composed of |composed of |
| great| great|
| gigantic| gigantic|
| towering| towering|
|n enormous|n enormous|
| huge| huge|
| large| large|
| small| small|
| very small| very small|
|hairy |hairy |
|feathered |feathered |
|scaly |scaly |
|armored |armored |
|fleshy |fleshy |
|eyeless |eyeless |
|one-eyed |one-eyed |
|three-eyed |three-eyed |
|beakless |beakless |
|noseless |noseless |
|skinless |skinless |
|six-legged |six-legged |
|eight-legged |eight-legged |
| twisted into humanoid form| twisted into humanoid form|
| in humanoid form| in humanoid form|
| with external ribs| with external ribs|
| with lidless eyes| with lidless eyes|
| It has | It has |
|thin wings of stretched skin|thin wings of stretched skin|
|wings|wings|
|feathered wings|feathered wings|
|lacy wings|lacy wings|
| It has two | It has two |
| It has three | It has three |
| It has a | It has a |
|long, hanging|long, hanging|
|long, straight|long, straight|
|long, curly|long, curly|
|short|short|
|stubby|stubby|
|narrow|narrow|
| tails| tails|
| tail| tail|
| It has a proboscis| It has a proboscis|
| It has a long, swinging trunk| It has a long, swinging trunk|
| It has a short trunk| It has a short trunk|
| It has a fat, bulging trunk| It has a fat, bulging trunk|
| It has a twisting, jointed trunk| It has a twisting, jointed trunk|
| It has a curling trunk| It has a curling trunk|
| It has a knobby trunk| It has a knobby trunk|
| It has a round shell| It has a round shell|
| It has a spiral shell| It has a spiral shell|
| It has a square shell| It has a square shell|
| It has a knobby shell| It has a knobby shell|
| It has an enormous shell| It has an enormous shell|
| It has a broad shell| It has a broad shell|
| It has a pair of long antennae| It has a pair of long antennae|
| It has a pair of fan-like antennae| It has a pair of fan-like antennae|
| It has a pair of spindly antennae| It has a pair of spindly antennae|
| It has a pair of squat antennae| It has a pair of squat antennae|
| It has a pair of branching antennae| It has a pair of branching antennae|
| It has a pair of knobby antennae| It has a pair of knobby antennae|
| It has four | It has four |
|long, spiral|long, spiral|
|long, curving|long, curving|
|broad|broad|
| horns| horns|
| horn| horn|
| It has large mandibles| It has large mandibles|
|it mutters to itself as it moves aimlessly|it mutters to itself as it moves aimlessly|
|muttering|muttering|
|grumbling|grumbling|
|whispering|whispering|
|brooding|brooding|
|it groans from time to time|it groans from time to time|
|groaning|groaning|
|moaning|moaning|
|it howls into high winds|it howls into high winds|
|screaming|screaming|
|howling|howling|
|baying|baying|
|bellowing|bellowing|
|shrieking|shrieking|
|wailing|wailing|
|it shambles sluggishly|it shambles sluggishly|
|it stamps the ground and snorts|it stamps the ground and snorts|
|it has a bloated body|it has a bloated body|
|bloated|bloated|
|it lumbers along steadily from place to place|it lumbers along steadily from place to place|
|lumbering|lumbering|
|hulking|hulking|
|its joints are backward|its joints are backward|
|backward|backward|
|it moves with uneven jerking motions|it moves with uneven jerking motions|
|its limbs jut out at asymmetric angles|its limbs jut out at asymmetric angles|
|crooked|crooked|
|twisted|twisted|
|it lopes quickly along the ground|it lopes quickly along the ground|
|it strides in silence with purpose|it strides in silence with purpose|
|starved|starved|
|emaciated|emaciated|
|it hurls vicious insults constantly|it hurls vicious insults constantly|
|it bears a look of unbelievable peace|it bears a look of unbelievable peace|
|peaceful nature|peaceful nature|
|it emanates an aura of giving and kindness|it emanates an aura of giving and kindness|
|kind nature|kind nature|
|joy marks its every movement|joy marks its every movement|
|joyful nature|joyful nature|
|it moves its will in accordance with the truth of things|it moves its will in accordance with the truth of things|
|it is ravening|it is ravening|
|it is slavering|it is slavering|
|it belches and croaks|it belches and croaks|
|it undulates rhythmically|it undulates rhythmically|
|rhythmic undulations|rhythmic undulations|
|it squirms and fidgets|it squirms and fidgets|
|bloated appearance|bloated appearance|
|it has a gaunt appearance|it has a gaunt appearance|
|it appears to be emaciated|it appears to be emaciated|
|it chants ceaselessly|it chants ceaselessly|
|it murmurs horrible curses|it murmurs horrible curses|
|it spouts gibberish periodically|it spouts gibberish periodically|
|it knows and intones the names of all it encounters|it knows and intones the names of all it encounters|
|it repeatedly makes threats of torture and death|it repeatedly makes threats of torture and death|
|it has a regal bearing|it has a regal bearing|
|it has an austere look about it|it has an austere look about it|
|it moves deliberately|it moves deliberately|
|it moves about carelessly|it moves about carelessly|
No, you cant. The string dump is in the exe, it patches the exe. It doesnt change the process after it started, so you can do anything about the raw texts it reads out. Insolor posted an alternate way to translate content that is displayed, but it wouldnt add linebreaks into the text.
The strings are all in the template.lng, which is included in the download. Its a lot of text... but nothing except that can be altered.
Dwarf Fortress Brasil
|Continue Playing|Continuar Jogando|
|Start Playing|Começar a Jogar|
|Create New World!|Criar Novo Mundo!|
|Design New World with Advanced Parameters|Projetar Novo Mundo com Parâmetros Avançados|
|Object Testing Arena|Arena para Testar Objetos|
|About DF|Sobre DF|
|Quit|Sair-|
â = ├óThe font likely needs to be swapped, but this particular set of characters also suggests you have saved your file as UTF-8, but the game and/or the utility doesn't handle that encoding correctly (I don't know which one.). It seems you need to save the file in the appropriate single-byte code page (which your editor will likely call something like Windows-1252, Latin1, or possibly ANSI).
ç = ├º
You are right, the utility (and DF itself) does not support UTF-8. The native codepage for DF is cp437 (https://en.wikipedia.org/wiki/Code_page_437).â = ├óThe font likely needs to be swapped, but this particular set of characters also shows you have saved your file as UTF-8, but the game and/or the utility doesn't handle that encoding. You need to save the file in the appropriate single-byte code page (which your editor will likely call something like Windows-1252, Latin1, or possibly ANSI).
ç = ├º
You are right, the utility (and DF itself) does not support UTF-8. The native codepage for DF is cp437 (https://en.wikipedia.org/wiki/Code_page_437).â = ├óThe font likely needs to be swapped, but this particular set of characters also shows you have saved your file as UTF-8, but the game and/or the utility doesn't handle that encoding. You need to save the file in the appropriate single-byte code page (which your editor will likely call something like Windows-1252, Latin1, or possibly ANSI).
ç = ├º
^.{1,8}\|
replaced with
\|
Hah, it's almost as if you noticed me poking around your repositories, looking if you had the string extraction tool lying around somewhere. Thank you.I've translated it to Python (earlier it was in Euphoria) and considered it could be usefull for somebody. Glad to see that I was right :)
Hey, now that a new version is on the table again, I have a problem. After guessing how it works, I do this:Use python3 (eg. python 3.4) instead of python2.
(http://i.imgur.com/znu7ay5.png)
...but that's all it does. Do you know what's up?
Insolor, could you please be so kind and post a string-dump that ready to work with 40.20? I downloaded the one for 40.19, ran a command to copy all lines and tried it, but it did not quite work correctly.
You're the expert, so you'll probably know for sure: I've been recently banging my head against the fact that certain strings are read in several different places at once. Could there be some potential way to forward replacement strings only to certain memory addresses?
|string|translation1| # default translation
|string|translation2|reference address|DF timestamp|
python dfrus.py --help
Cool beans, appears to be working fine. Any new features? Functions? Patches to horrible bugs we never noticed?Glad to see, that someone already tried it :)
Some news.There is a few typos in the menu and the game screen, from the screenshots. Though I guess you are not the best person to report it to.To add Portugese I've added support of cp860 (https://en.wikipedia.org/wiki/Code_page_860) to the patch. Actually some special characters are correctly displayed only in TTF mode, but it's possible to edit graphic fonts to support cp860. There are only a few differences (http://i.imgur.com/XtBAGDm.png?1) between cp437 (which is basic codepage for DF) and cp860.
- I'm still working on bugs in the patch. Although causes of the most of bugs are already discovered, it need some work to eliminate them.
- We have 10 languages to which DF is translated, but not all the translators continue the work.
Spoiler (click to show/hide)- Last night I was requested to make exe for Portugese (Brasil). It was really sudden for me, because about a week ago it was only 3% completed (just ahead of Ukrainian), but now all the hardcoded strings are translated. That's really impressive. The translator's nickname is danijfbm.
Spoiler (click to show/hide)
I'm also going to add cp850 support.
Sure. But you can fix them on transifex: https://www.transifex.com/dwarf-fortress-translation/dwarf-fortress/Some news.There is a few typos in the menu and the game screen, from the screenshots. Though I guess you are not the best person to report it to.To add Portugese I've added support of cp860 (https://en.wikipedia.org/wiki/Code_page_860) to the patch. Actually some special characters are correctly displayed only in TTF mode, but it's possible to edit graphic fonts to support cp860. There are only a few differences (http://i.imgur.com/XtBAGDm.png?1) between cp437 (which is basic codepage for DF) and cp860.
- I'm still working on bugs in the patch. Although causes of the most of bugs are already discovered, it need some work to eliminate them.
- We have 10 languages to which DF is translated, but not all the translators continue the work.
Spoiler (click to show/hide)- Last night I was requested to make exe for Portugese (Brasil). It was really sudden for me, because about a week ago it was only 3% completed (just ahead of Ukrainian), but now all the hardcoded strings are translated. That's really impressive. The translator's nickname is danijfbm.
Spoiler (click to show/hide)
I'm also going to add cp850 support.
Some news.There is a few typos in the menu and the game screen, from the screenshots. Though I guess you are not the best person to report it to.To add Portugese I've added support of cp860 (https://en.wikipedia.org/wiki/Code_page_860) to the patch. Actually some special characters are correctly displayed only in TTF mode, but it's possible to edit graphic fonts to support cp860. There are only a few differences (http://i.imgur.com/XtBAGDm.png?1) between cp437 (which is basic codepage for DF) and cp860.
- I'm still working on bugs in the patch. Although causes of the most of bugs are already discovered, it need some work to eliminate them.
- We have 10 languages to which DF is translated, but not all the translators continue the work.
Spoiler (click to show/hide)- Last night I was requested to make exe for Portugese (Brasil). It was really sudden for me, because about a week ago it was only 3% completed (just ahead of Ukrainian), but now all the hardcoded strings are translated. That's really impressive. The translator's nickname is danijfbm.
Spoiler (click to show/hide)
I'm also going to add cp850 support.
I need some time to make some of my tools ready for everyone use (a couple days ago I had to write a name of codepage directly in the source code, which is not acceptable at all). After that I will write partial instruction.Some news.There is a few typos in the menu and the game screen, from the screenshots. Though I guess you are not the best person to report it to.To add Portugese I've added support of cp860 (https://en.wikipedia.org/wiki/Code_page_860) to the patch. Actually some special characters are correctly displayed only in TTF mode, but it's possible to edit graphic fonts to support cp860. There are only a few differences (http://i.imgur.com/XtBAGDm.png?1) between cp437 (which is basic codepage for DF) and cp860.
- I'm still working on bugs in the patch. Although causes of the most of bugs are already discovered, it need some work to eliminate them.
- We have 10 languages to which DF is translated, but not all the translators continue the work.
Spoiler (click to show/hide)- Last night I was requested to make exe for Portugese (Brasil). It was really sudden for me, because about a week ago it was only 3% completed (just ahead of Ukrainian), but now all the hardcoded strings are translated. That's really impressive. The translator's nickname is danijfbm.
Spoiler (click to show/hide)
I'm also going to add cp850 support.
Olá Teneb,
Eu estou traduzindo o game para português BR sozinho, se você verificar as frases ainda não foram revisadas!
Preciso saber como gerar o .exe do game com o arquivo PO, para realizar as devidas correções da tradução, se alguém no grupo poder criar um pequeno tutorial sobre como juntar o PO no EXE, em alguns dias eu entrego a tradução 100% revisada.
Obrigado
Welp. Any ideas yet?Some sort of CSV, I think.
Hello, someone who can send instructions for using the partial translations? I want to translate for the Hispanic community. Thank.. :)Hello!
Thank you.. I will be waiting.. :D:D
@insolor.. the file po2csv.py it is included in the python installation? because i a have this message "python: can't open file po2csv.py: (Errno 2) No such file or directory" .. the po2csv.py file must be placed in the same directory that the .po file meaby?po2csv.py is in the downloaded df-gettext-toolkit zip archive.
I dont have this file.. Here my screenshoot.. http://imgur.com/Srm5iGW
ok.. I supposed that must be the file, but groping on their own in stranges scrip dont work for me haha
p/d: I have the translation of the instructions, what do you think.. start a new thread for publication? or do it right here?
So, have you managed to get translated exe file?
As for translated instruction, I think it's better to place it on bitbucket, where the original instruction is. If you will register on bitbucket, I can give you permissions to edit this wiki. It has markdown syntax.
Another option: I can send you this page as a text file, you'll edit it, and then I'll add it to the wiki.
Spoiler: btw (click to show/hide)
I have a question .. there in the Russian accent marks? ("tilde" in spanish) as if it were made to appear?Have you modified the init.txt as said in the instruction? This must solve the problem.
we could make the translation of the .exe but not shown symbols for accented letters..
we must re-translate everything without putting accent marks to letters?
* for example, in Spanish, redemption is written "redención" .. accented on the "o"
Spoiler (click to show/hide)
Hello..
thank you very much for the contribution .. I tried to use the tool, but nothing happens when I click the "Translate Files" button .. I placed the .po files (both.. those downloaded to "translate" as those downloaded for "use") .. I have placed them in the Localization/Translation folder (that was created by the tool itself) .. I dont know if I should be doing something wrong. Regards
Spoiler (click to show/hide)
I already have some utilities in df-gettext-toolkit (https://bitbucket.org/dfint/df-gettext-toolkit/src) repository, but they has only console interface. In particular, translate_raws_batch.py tries to translate all the text files, and works for Starter Pack, for example. But it needs update for languages then Russian, and some instructions need to be written too.
I tryed understand and use this toolkit, but using console and Python doesn't work very well with me. So I start this java tool.
But with a list of instructions probably I can.
QuoteI tryed understand and use this toolkit, but using console and Python doesn't work very well with me. So I start this java tool.
But with a list of instructions probably I can.
não acho q tipo de instrucoes voce quer, mas aqui voce vai encontrar as instrucoes q deixo @insolor pra seus scrips..
Quanto a sua ferramenta .. agora ja funcionou sem problema .. obrigado
Eu fiz as traducoes em espanhol para os scrips de @insolor, se me permite, vou fazer o mesmo com sua ferramenta ..
p/d: desculpe a minha Portugues
I still lean on it pretty hard, although I don't expect that level of fiddling from anyone downloading my trash. The most I had was my personal custom "dictionary" as an optional module for the brave. Are there going to be tools that can stomach the 64bit executables?64bit support is planned but it is not at the first place in my list. At first I'm going to do some GUI-thing to simplify applying of translation to the game. Then I need to fix charmap patching for 32bit DF 0.32.04 and newer and check if all other things function well. After that I will try to add support of 64bit executables.
Is there any way to use this (or something like this) with Linux DF binaries?There are some utilities by other developer (https://github.com/kateby), but I don't know how stable they are and they definitely haven't tested on languages other then Russian.
I've merged experimental branch of dfrus-py into develop one. Using of the develop branch of dfrus-py is recommended. Also, dfrus.py must be supplied with dictionary.csv in utf-8 encoding (just don't specify codepage in the po2csv.py command line, it will produce a file in utf-8 by default). I've changed instructions (https://bitbucket.org/dfint/dfint-docs/wiki/Home) accordingly (both English and Spanish versions), download links ("zip") on that pages are updated too.
Dfrus-py currently supports DF 0.43.03 (more or less stable). Support of DF 0.43.04 and higher is coming (only 32bit). At least it doesn't complain about codepage table anymore, and you can get working executable (with some artifacts in strings, but this will be fixed).
Yes, there weren't any difficulties. But it would be nice if someone check them.I've merged experimental branch of dfrus-py into develop one. Using of the develop branch of dfrus-py is recommended. Also, dfrus.py must be supplied with dictionary.csv in utf-8 encoding (just don't specify codepage in the po2csv.py command line, it will produce a file in utf-8 by default). I've changed instructions (https://bitbucket.org/dfint/dfint-docs/wiki/Home) accordingly (both English and Spanish versions), download links ("zip") on that pages are updated too.
Dfrus-py currently supports DF 0.43.03 (more or less stable). Support of DF 0.43.04 and higher is coming (only 32bit). At least it doesn't complain about codepage table anymore, and you can get working executable (with some artifacts in strings, but this will be fixed).
@insolor.. So you have already changed the Spanish instructions too?
Yes, there weren't any difficulties. But it would be nice if someone check them.I've merged experimental branch of dfrus-py into develop one. Using of the develop branch of dfrus-py is recommended. Also, dfrus.py must be supplied with dictionary.csv in utf-8 encoding (just don't specify codepage in the po2csv.py command line, it will produce a file in utf-8 by default). I've changed instructions (https://bitbucket.org/dfint/dfint-docs/wiki/Home) accordingly (both English and Spanish versions), download links ("zip") on that pages are updated too.
Dfrus-py currently supports DF 0.43.03 (more or less stable). Support of DF 0.43.04 and higher is coming (only 32bit). At least it doesn't complain about codepage table anymore, and you can get working executable (with some artifacts in strings, but this will be fixed).
@insolor.. So you have already changed the Spanish instructions too?
There are some utilities by other developer (https://github.com/kateby), but I don't know how stable they are and they definitely haven't tested on languages other then Russian.
I've send her a link to your message, but probably she is busy now with some real life things.
py -3 po2csv.py de.po de.csv cp1252
I used cp1252 because the german umlauts (ä,ü,ö etc.) py -3 dfrus.py -p "Dwarf Fortress.exe" -d de.csv --codepage cp1252
with open(args.dictionary, encoding='iso-8859-1') as trans:
py -3 po2csv.py de.po de.csv utf-8
orpy -3 po2csv.py de.po de.csv
(utf-8 is used by default)Thanks a lot.Try not to specify codepage both for po2csv.py and dfrus.py:
The legacy-version was the problem. ;)
Now, i can create the patched exe and can use csv in any codepage.
The problem now is the missing codepage for german.
Umlauts are not the right one. See here:"About DF" must be "Über DF" Or "Press" = "Drücke"Spoiler (click to show/hide)
dfrus doesn't work with cp437 (Codepage437 not implemented.Skipping.). i can't try, but i think isn't the right one for german.
the csv with cp1252 looks good. i think thats the right one for the codepages dict.
I would be nice when you could add it.
py -3 po2csv.py de.po de.csv
py -3 dfrus.py -p "Dwarf Fortress.exe" -d de.csv
If it won't work anyway, I'll test and fix it.@insolor .. How to make-a-translation from a MAC? the tuto its only for window..You mean, make translation for mac version of DF? Currently there's no way to do this.
You mean, make translation for mac version of DF? Currently there's no way to do this.
Don't Mac executables have a "resource fork" that include all of the strings? It might be possible to simply edit that (obviously on a copy of your DF).You mean, make translation for mac version of DF? Currently there's no way to do this.
Ok. Thanks for answer. Regards.
Actually I don't know. The main problem here is that mac is absolutely foreign platform for me: I have not mac, I have no knowledges on executable file format (and on other technical details).Don't Mac executables have a "resource fork" that include all of the strings? It might be possible to simply edit that (obviously on a copy of your DF).You mean, make translation for mac version of DF? Currently there's no way to do this.
Ok. Thanks for answer. Regards.
D:\JUEGOS\DF\TRADUCIR HARDCODED>python dfrus.py -p "D:\JUEGOS\DF\PeridexisErrant's Starter Pack 0.43.03-r09\Dwarf Fortress 0.43.03\Dwarf Fortress.exe" -d dictionary.csv --codepage cp850
Loading translation file...
Traceback (most recent call last):
File "dfrus.py", line 562, in <module>
_main()
File "dfrus.py", line 522, in _main
trans_table = dict(trans_table)
File "D:\JUEGOS\DF\TRADUCIR HARDCODED\patchdf.py", line 91, in load_trans_file
for parts in reader:
File "C:\Program Files\Python35\lib\codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa2 in position 50: invalid start byte
Watch ,"Vigilar"
NOTE: I had to change the first code, since I asked for the "codepage" as variable:
python po2csv.py po-filename.po dictionary.csv cp850
python po2csv.py po-filename.po dictionary.csv cp850Now dfrus needs utf-8, so codepage in the command must be utf-8. It also can be omitted (utf-8 will be used by default), but you need to update your copy of df-gettext-toolkit.
I translated the plain-text with the @TioFauna app but have been having problems running the game, it gets stuck when loading the saved game. I discovered that it is this file, any idea what the problem might be?You mean if the file is not translated the game runs normally?
https://drive.google.com/open?id=0B8b47oDt3w8kZUR3R2tDTjhtSXM
Yes, if you use the original file, it runs without problem. Its strange, since of all the plain text files, only with this I have problems, so I do not think the problem is in the app. Thanks for you time @insolor. Regards :DAre you using translated exe file? Try running original exe, and check if it runs normally. Probably there is some bug in translated exe.
Yes, if you use the original file, it runs without problem. Its strange, since of all the plain text files, only with this I have problems, so I do not think the problem is in the app. Thanks for you time @insolor. Regards :DAre you using translated exe file? Try running original exe, and check if it runs normally. Probably there is some bug in translated exe.
Yes, if you use the original file, it runs without problem. Its strange, since of all the plain text files, only with this I have problems, so I do not think the problem is in the app. Thanks for you time @insolor. Regards :DAre you using translated exe file? Try running original exe, and check if it runs normally. Probably there is some bug in translated exe.
Its the same thing with the original .exe .. Remember that this is related to the translation of text files (made by @TioFuna), not with the translation of the executable (made by @insolor)
But I need to correct me, this is the "bug" file
https://drive.google.com/open?id=0B8b47oDt3w8kTGpaRm9QMHdmTzg
I think it is due to some sign or symbol in the file that can not be recognized
Yes, if you use the original file, it runs without problem. Its strange, since of all the plain text files, only with this I have problems, so I do not think the problem is in the app. Thanks for you time @insolor. Regards :DAre you using translated exe file? Try running original exe, and check if it runs normally. Probably there is some bug in translated exe.
Its the same thing with the original .exe .. Remember that this is related to the translation of text files (made by @TioFuna), not with the translation of the executable (made by @insolor)
But I need to correct me, this is the "bug" file
https://drive.google.com/open?id=0B8b47oDt3w8kTGpaRm9QMHdmTzg
I think it is due to some sign or symbol in the file that can not be recognized
Yes, if you use the original file, it runs without problem. Its strange, since of all the plain text files, only with this I have problems, so I do not think the problem is in the app. Thanks for you time @insolor. Regards :DAre you using translated exe file? Try running original exe, and check if it runs normally. Probably there is some bug in translated exe.
Its the same thing with the original .exe .. Remember that this is related to the translation of text files (made by @TioFuna), not with the translation of the executable (made by @insolor)
But I need to correct me, this is the "bug" file
https://drive.google.com/open?id=0B8b47oDt3w8kTGpaRm9QMHdmTzg
I think it is due to some sign or symbol in the file that can not be recognized
Probably the problem appears because there CVCT_TARGET tag required instead of SYN_NAME in some places. See, original file to the right, translated file to the left:
After I replaced SYN_NAME with CVCT_TARGET in such places, the game seems to be working fine.
I still cant fully understand how that "files" work .. how did you find the discrepancy? with what soft?
[CREATURE:GILA_MONSTER_MAN] - create new creature class
[COPY_TAGS_FROM:GILA_MONSTER] - copy (inherit) all properties from the GILA_MONSTER creature class
[CV_CONVERT_TAG] - convert (repalce) some properties
[CVCT_MASTER:STATE_NAME] - in which tag
[CVCT_TARGET:gila monster] - which text to replace
[CVCT_REPLACEMENT:gila monster man] - which text must be inserted as a replacement
... - the same for other "CV_CONVERT_TAG" blocks
[STATE_NAME:ALL_SOLID:frozen gila monster venom]
...
[STATE_NAME:LIQUID:gila monster venom]
...
[STATE_NAME:GAS:boiling gila monster venom]
python for_translation_dwarf-fortress_raw-objects_ru.po c:\path\to\DF\raw\objects\ cp1251
Thank you very much for the info, I didnt know the TotalComander tool as well as your scrip (I dont dig enough hehe). Could that be what @TioFauna used?
Also, some idea of if with that same script one could translate the plain-texts of DF\data\(uncompressed)?
And since we are, although I dont know Russian grammar, I suppose it doesnt look very much like English, did you do something about it? Or for the moment only make a "literal" translation?
Would it be possible to make an "interface" that allows the translation to be more intuitive? And why not, to unify the whole process?
As for the "proxy-dll", any guide that you can give me? so that I can make one of Spanish. Thanks
def _ChangeText(s):
# Examples
# Replace 'Dwarf' with 'Human':
s = s.replace('Dwarf', 'Human')
# Reverse words:
s = ' '.join(reversed(s.split()))
return s
Many thanks @insolor .. I was looking for, and I found that in df-translate.pyw are the "texts" of the app .. I could upload/send u a Spanish version, so that you compile it? (If I remember correctly, can be done as variants of the same project) or if you explain to me how I do it myself.I will try to use gettext (https://docs.python.org/3.6/library/gettext.html) in the application, so it will possible to export text strings as a po file and eg. upload to transifex. For now I think it's too early because the application will change a lot. And also it would be great if someone review and fix English texts of the app before translation to other languages.
I will try to use gettext (https://docs.python.org/3.6/library/gettext.html) in the application, so it will possible to export text strings as a po file and eg. upload to transifex. For now I think it's too early because the application will change a lot. And also it would be great if someone review and fix English texts of the app before translation to other languages.
Spoiler (click to show/hide)
Does this work with 64 bit? The repository has no readme or anything...No, 64 bit version is not supported yet
There is Korean translation of DF using modified SDL_ttf.dll. (page: http://nethack.byus.net/gnu4/bbs/board.php?bo_table=df_ko (http://nethack.byus.net/gnu4/bbs/board.php?bo_table=df_ko) )Spoiler (click to show/hide)
The issuesoutput looks simmilar to translation using ChangeTextPy alone.
- multi-line report/announcement is translated improperly, due to word order and grammer differences between English and Korean.
- "Help", DFHack helper functions and "Thoughts and Prefences" aren't translated. They use graphic font.
- masterwork mark(☼) is broken(?). dunno why.
- descriptions in symbol screen
I have questions about Russian version DF, insolor. How is the TTF output project on "Thoughts and Preferences" screen coming along? How did you manage long combat reports, like named noble dorf hits long-named guy with artifact weapon? Thank you.
Spoiler (click to show/hide)
Portuguese translation are almost completely unrevised, we have a brazillian community here trying to translate some things but would like some attention for us to use it properly if possible
Any idea what it might be?Spoiler (click to show/hide)
Traceback (most recent call last):
File "po2csv.py", line 7, in <module>
from .po import load_po, escape_string
SystemError: Parent module '' not loaded, cannot perform relative import
Copying 'D:/****/df_44_02_win/Dwarf Fortress.exe'
To 'D:/****/df_44_02_win\Dwarf Fortress Patched.exe'...
Success.
Finding cross-references...
[PROCESS FINISHED]
Hi.. another problem when running po2csv :-\QuoteTraceback (most recent call last):
File "po2csv.py", line 7, in <module>
from .po import load_po, escape_string
SystemError: Parent module '' not loaded, cannot perform relative import
try with the df-translate app and show me this:QuoteCopying 'D:/****/df_44_02_win/Dwarf Fortress.exe'
To 'D:/****/df_44_02_win\Dwarf Fortress Patched.exe'...
Success.
Finding cross-references...
[PROCESS FINISHED]
But nothing in the game appears translated
CLARIFIED:
- I have Py 3.4.4
- try with cp850 and cp819 (default in the app)
Hi.. another problem when running po2csv :-\Quote
Traceback (most recent call last):
File "po2csv.py", line 7, in <module>
from .po import load_po, escape_string
SystemError: Parent module '' not loaded, cannot perform relative import
Here the first testing version of df-translate tool:
https://bitbucket.org/dfint/df-translation-client/downloads/df-translate.7z
Only two tabs are implemented for now (I posted screenshots of them earlier in this thread).GUI hangs during downloading of files on the first tab, I will try to make downloading to be performed in the separate process later.Fixed.
The second tab is functional, so you can use this tool as a replacement of command-line dfrus-py.
The application remembers state of controls between session. Configuration file is stored in user's home directory (c:\users\username\.df-translate.json), you can remove it manually to restore default settings.
I'm planning to implement the third tab in the future to apply translation to external files of DF. I don't know how long it will take.
Source code is located here: https://bitbucket.org/dfint/df-translation-client/src
Df translation client isn't 64 bit compatible. :'(
I tried but nothing change in the new .exe
Hi.. I have this message:I'll look todaySpoiler (click to show/hide)
Hi.. I have this message:Simple answer: there is Unicode character \u222b (https://unicode-table.com/en/222B/) (∫) in Spanish translation which is not representable in cp819 (or any 1-byte encoding which why you get empty encoding combo box).Spoiler (click to show/hide)
Perfect.. how do u find the wrong string?At first, I've searched "Unicode 222b" in Google, then I've searched the character I found in translation text for the Spanish language. That's all.
Im looking into Brazillian translations and already did a tutorial on how to use the dftranslate for the translations, but i didnt understood how we can put the uncompressed one, is it not ready yet or there is another app for it?As for uncompressed files, this functionality is temporarily switched off in the df-translation-client because I planned to make it unpack files in memory instead of writing temporary files on disk. I'm going to work on it in the future (I don't know how soon it will be though).
Spoiler (click to show/hide)
No, i'm ockmonek there.
But I have wrote Maxxxel.
Transifex listed 24 german translators as german translators for Dwarf Fortress. 8)
Maybe i contact them too.... :)
there is noneTo be clear: transifex is a place where the translation is performed, but actually there is no DF with the translation applied on this site. And I don't even know if someone tried to do this for the German language. Though you can participate in the translation: translation to German is at about 49% ready.
i am login and there is no translation of dwarf fortress in german
Just an idea -- for the == lines, which you said should be made so that the replacement is the same length as the original, is it perhaps possible to insert null characters into the replacement to allow the replacement to be shorter than the original?There are no more == marks. As far as I remember, as of 2016, there were very few places, where length mattered.
there is none
i am login and there is no translation of dwarf fortress in german
Transifex link:
https://www.transifex.com/dwarf-fortress-translation/dashboard/all_projects/de/
Hi all. I am unsure if I should contribute to the translation efforts at transifex.CP437 as i seen, has german fonts. So your language shouldn't be problem.
While I could do some work on the german translation I have no idea (even after reading this old and long thread) if it would ever work reasonably.
Does anyone have experience with applying the translation except for the russion version which apparently does work?
I'm afraid there might be difficulties with grammar leading to ridiuclous results.
And what will Umlauts be a problem, because we have plenty of words with "special" characters in German (äöü and our favorite: ß). I guess, if it manages with cyrillic it should work, right?
To all, i have startet to translater more words in german today on Transifex. I would go on, but can someone tell me if it work in the new version which we get next week?We never know before a new release (any release, not only the steam release), if the old tools will still work on it. So, no predictions.
Hey Insolor, I hope you are well, I finally managed to translate the hardcoded_steam.po with help from Luca_PolyZen but unfortunately both of us are having issues applying the translation.
He found out about it now that we were trying to test if everything worked fine with the latest conversion programs.
We set up python and gettext, then we converted the translation file, but it appears like the steam_hook doesn't apply it even though they are present; are there any known issues similar to this? We checked the final translation file and the words are indeed translated, just not applied.
The game results half English/half translated as if it was missing words and whole sentences, this was more evident by trying to follow the tutorial.
(https://i.imgur.com/4bg3hUh.png)
As an example here we have the sentence #2025 that is "To change the camera's elevation, press ","Per cambiare la quota della visuale premi ", the hook only "hooks" the word "the" turning it correctly into "la", the rest remains unchanged.
I hope to hear from you soon, and wish to thank you for all the work you're doing for us with this piece of software, issues aside. Strike the Earth!