Tkh's Translation Helper program (downloadable)


You have Google SkyDrive download link?? I was translated into Chinese, this software can be achieved? ID can’t seem to translate articles…



how i can get the translation ingame? put the json in the modsfolder?


Hi,Great to see you again.Look at the picture on the right, the replacement text you are familiar with the language (open en.json files in stonehearth.smod)


ah ok i must replace the en.json in the stoneheath.smod ^^ i understand :smiley: but first - save the original files xD

edit: HOI works perfect! it just doenst accept the german umlaut äöü (shows wrong or makes a space behind)


That’s a problem with the font used in the game. I have the similar problem with Swedish åäö. Radiant is aware of font issues, and hopefully we will be able to easily change font to others. Or perhaps already can? I don’t know :wink:

But just to be sure, does it look ok in the .json (txt) file? My program should use the same system encoding as is used on the system you’re using it on. But I haven’t really tested it on anything else than my own… If it looks ok in the text file, I think that I have at least done my part… :blush:


its easy - after finish i make a second file the german replacement for umlaut

ä=ae ö=oe ü=ue ^^


Alternatively you can edit the text directly and use the German html codes:

ä would translate to & auml; (include semicolon but exclude space)
ö would translate to & ouml;
ü would translate to & uuml;

Enter each value without the space after the & sign as a replacement for the letter. I’ve just tried it and it works for my Display Adaptür… really must change it back now, and possibly learn German.


Google SkyDrive? Isn’t SkyDrive Microsoft? Doesn’t it work with the dropbox link?

Your screenshot looks strange, but on the other hand, I have no experience with Chinese translations, so this might be a problem with the program. Anyone knows anything about this? This is how I do it:

using (StreamWriter wr = new StreamWriter(newFilename, false, System.Text.Encoding.Default))

So “newFilename” is just the name of the new file. “false” is a parameter for append (so false means only overwrite a file if exists). And the last part is what encoding to use, I hope that this means that it should be generic in terms of system encoding. And after this I just use

to write to the file.

If you manually write Chinese in en.json, will it look ok then? If so, this is indeed a problem with my export encoding format. Have no idea how to solve it yet. Anyone knows? (calling for @RepeatPan or @sdee or anyone who knows anything about text encoding problems ;))


oh。。。。。。We didn’t use any software that is manually searching for documents and translation, using UTF-8 code. Only the code to display the Chinese.


so im done ^^ but there are lots of things that i cant translate like classnames and name of objects and some ingame discriptions - is there anyway for this?

add row: worker - worker - Arbeiter doenst work xD


Well, yes, that’s another thing. And at the moment it’s almost out of my reach. At least it’s not supported by my program, I know that for sure :wink:

Take a look at the attached mason_description.json, there are plenty of files like this one. So there’s lots of text in there to translate. But there’s also plenty of stuff that we shouldn’t touch. Today, my program can’t understand that file, and even if it could read it, exporting it to the same format is absolutely not supported.

mason_description.txt (3.9 KB)

I hope, but don’t know for sure, that all this info at some point will be split up in different files. So all text is in some locales-folder, and the rest (like portrait, default_stance, abilities, etc.) is kept in a different file. If that will be the case, we will just have lots of different files to translate. But if not split up, then this will be a dead end for my program.


ok so at this point i need to wait and give my little help to the other german folks :smiley:


I’m sorry, but I don’t fully understand. However, I will try tomorrow with some different encoding. Like UTF-8 or so. As said before, I have little knowledge about text encoding formats, and this input is valuable for me.

It would of course be optimal to have an encoding format that can support all languages, but if not I guess I’ll have to have a “settings-tab” in the program where the user can choose between a few different ones.


Something like that :wink:

But on the other hand, it is of course good to be as prepared as possible. At the moment, there’s over 400 tags in the “main” file. This is far from everything in the game, but as I see it: it’s better to keep updating now and then - because at the point when (hopefully) translation support is fully implemented, the workload should be minimal compared to starting from scratch. At least I hope so :stuck_out_tongue:


just for info in the new update where 2 new lines added :wink:

and because of this i came three points of your programm :wink:

  1. can you add and copy and paste function for the rows
  2. if you load an old file and a new file its set the “new rows” at the end and remove them from the line where they was
  3. if you add new rows and they aren´t in the other file they set it at the end and remove all spacerows between the informations (for example at the end spacerow worker spacerow rabbit -> save new load -> spacerow away ^^)

all in all the last two are not the real problem - but its doesnt look nice :wink: like the new two rows will set at the end ^^


What do you mean? Two tags were added in the latest update, but what’s the thing with three points? :blush:

Let me talk about the order and the reason why I don’t want the new (or untranslated) in the end. The order in the two left columns are exactly as it is in the original file. And when I read your previous translation file, the program match up all tags that are equal and put the translation in the third column. If there are old tags that are removed, they will end up at the bottom and can be deleted.

If new tags are added with a new release, they can be placed at any place Team Radiant chose to :wink: And this means that new items can be in the middle of the file. And I have no function to reorder them to sum up the yellow, orange and white in groups. The main reason is that I use this order when I export to a new file. And I want to keep all blank lines and have the exact same order as the original file had.

I mean, everything is possible, I could re-write lots of things to keep original and displayed data separate… but… I’m not sure I want to put in all that effort… since this program might be completely obsolete in the future if case some official translation tools or systems are created :blush:

However, I would totally like to be able to hide/show white rows, the blanks, the yellows, etc. But at the moment, I don’t know exactly how to do it. I have kind of painted myself into a corner since I sometimes use the displayed information, and sometimes the original data.

That’s why I added the Prev-Next buttons to the right, because you can quite quickly step through all yellow/orange items. So far, there are not that many yellow ones, so you should quite quickly end up at the new, orange ones :wink:


ok ^^ that i have already understand :wink:

At first: sry for my bad englisch sentences :wink:

and it was my failure xD i have load in mississue the old file first and then the new file - so that he has set all at the bottom :wink:


Let the user specify the encoding in your application’s settings. In any case, I would recommend using a proper JSON library instead of doing the parsing yourself ( is pretty good).

I would guess that the system’s encoding is not a good way to do it. First of all, we don’t know what Stonehearth expects (probably UTF8? Or is it just latin1/iso?). You’re exporting it in some format that might not even be compatible with it. So instead of using the system default, use something you know Stonehearth supports (and that most languages support). I suppose Encoding.UTF8 could work.


Probably a good approach. But as I have written the program when it comes to handling data, I don’t know if it would help me a lot. At least not without rewriting a ton of code :wink: A lot of my functions are written in a way where it expects a certain format or layout in the dataview.

Planning for that for tomorrow’s test release. But I’ll consider adding an encoding setting even if it works. Don’t know which ones to chose from, but if I just can get a few in, I guess adding a few more would be easily done. Don’t know what Stonehearth expects.