# How to support joint translation efforts?

**URL:** <https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887>\
**Category:** Translation and Localization\
**Created:** [June 24, 2013, 8:35pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887 "2013-06-24T20:35:18Z")\
**Posts on this page:** 20\
**Page:** 6

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 8:58am UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/103 "2014-01-20T08:58:34Z")

</div>

Those are not format tags in the common sense; they’re HTML. If I’m not mistaken most strings that appear in the GUI could contain HTML (and would render it as such).

It’s not feasible to separate the data and the formatting. In the example you’ve posted, how would you go on about it? Have one entry for each line (that could appear out of context and could provoke translation errors)?

It gives translators the power (whether this is good or bad is up for discussion I guess) to style the text for their needs while keeping the implementation of i18n strings as simple as possible. I think a few HTML tags here and there are doable.

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/193):
>
> I only need UTF-8 encoding of Stonehearth. Then ill translate into russian

I’m afraid Stonehearth does not support UTF8 encoded locales yet.

---

<div class="post-metadata">

**Author:** ![tkh](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/tkh/32/62619_2.png) [@tkh](https://discourse.stonehearth.net/u/tkh)\
**Post date:** [January 20, 2014, 9:23am UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/104 "2014-01-20T09:23:39Z")

</div>

> [@RepeatPan](#):
>
> I think a few HTML tags here and there are doable.

Absolutely, a few tags are ok. But too many and it will be… more work… to translate. At least if using this kind of method 😊

To be honest, I don’t know how to handle my example in a _good_ way, but I imagined the format tags being between the tags themselves. I don’t know how they are used… imaginary example below with () instead of \<\>…

new\_game\_setup\_base\_camp\_help\_0  
(ol)(li)  
new\_game\_setup\_base\_camp\_help\_list1  
(li)new\_game\_setup\_base\_camp\_help\_list2  
(li)new\_game\_setup\_base\_camp\_help\_list3  
(/li)(/ol)

But what do I know 😊

---

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 9:39am UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/105 "2014-01-20T09:39:31Z")

</div>

> [@tkh](#):
>
> But too many and it will be… more work… to translate. At least if using this kind of method

In the end, it boils down to “inconvenient for developers” or “slightly inconvenient for translators”. Since translations are likely done once and then never touched again whereas developing, re-arranging and all that happens quite often, I think it’s justified to burden the translators here.

Your version has several disadvantages:

- The code (“mods\stonehearth\ui\game\create\_camp\create\_camp.html”) becomes more complicated, less obvious (as in, less standardised) and therefore less maintainable.
- If an item has to be removed, either the numbers change (which causes translation issues) or numbers are removed (which causes confusion about a lacking element).
- The list becomes more complex (one entry is represented as many) and less obvious for translators; they have little idea what the difference between “help\_0” and “help\_list1” is.
- The file size is actually larger (`"new_game_setup_base_camp_help_list1" : ""` \<-\> `<li></li>`)
- As mentioned before, the system is less flexible. The current system could allow, for example, things like `Buy <input id="amount"> of <span id="item"></span>`, which means that these parts can be arranged as necessary. Since languages can differ a lot (believe me, I’ve written a dictionary translation software and had to deal with all these issues at some point… and am still dealing with them) in their structure, this is necessary if you want to avoid having “broken” sentences.

---

<div class="post-metadata">

**Author:** ![tkh](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/tkh/32/62619_2.png) [@tkh](https://discourse.stonehearth.net/u/tkh)\
**Post date:** [January 20, 2014, 10:44am UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/106 "2014-01-20T10:44:15Z")

</div>

> [@RepeatPan](#):
>
> Since translations are likely done once and then never touched again whereas developing, re-arranging and all that happens quite often, I think it’s justified to burden the translators here.

Translations are done once per language 😉

Perhaps I don’t agree fully on all your points, but I’m not sure I’d like to jump into the discussion since I’m neither a developer or programmer. I’m ok with notifying Radiant of a potential (minor) issue for translators, and I am fully confident that they will chose a good method for having a balance between them and all translators.

---

<div class="post-metadata">

**Author:** ![SteveAdamo](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/steveadamo/32/13955_2.png) [@SteveAdamo](https://discourse.stonehearth.net/u/SteveAdamo)\
**Post date:** [January 20, 2014, 1:56pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/107 "2014-01-20T13:56:06Z")

</div>

> [@tkh](#):
>
> a small program that could help me and perhaps anyone who’s interested in trying it out

wow, nicely done @tkh! i can see this being _immensely_ helpful to other potential translators… 👍

> [@tkh](#):
>
> Quite a few tags to keep in place for all languages.

so you are literally translating from the English column to the Translated column (no dynamic word replacement, etc.), correct? i can see how working around the HTML tags would add another layer of difficulty… but keep in mind, the original English text was written with those particular tags to provide the formatted output…

unless you go through and strip all HTML tags from the English column, i think there is little else to do, other than “translate around” them… 😄

---

<div class="post-metadata">

**Author:** ![tkh](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/tkh/32/62619_2.png) [@tkh](https://discourse.stonehearth.net/u/tkh)\
**Post date:** [January 20, 2014, 2:14pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/108 "2014-01-20T14:14:03Z")

</div>

> [@SteveAdamo](#):
>
> so you are literally translating from the English column to the Translated column (no dynamic word replacement, etc.), correct?

I’m not sure I fully understand the question. But translation is 100% manual, like in the most basic Excel sheet.

I hear you regarding the HTML, I don’t think it’s a problem as long as they are not too common (still not a problem, but perhaps annoying). I rather have a misspelled word or missing punctuation than crashing the game due to an incorrect HTML tag 😉

---

<div class="post-metadata">

**Author:** ![SteveAdamo](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/steveadamo/32/13955_2.png) [@SteveAdamo](https://discourse.stonehearth.net/u/SteveAdamo)\
**Post date:** [January 20, 2014, 2:21pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/109 "2014-01-20T14:21:41Z")

</div>

> [@tkh](#):
>
> I’m not sure I fully understand the question.

sorry, i meant i wasnt sure if you were doing anything like automatically replacing common words (using a lookup tool to replace common words, like “the”, “yes”, etc.)… which wouldnt make much sense, now that i think about it (trying to blend manually translated text and dynamically translated content)…

dont mind me… carry on! 😄

---

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 5:59pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/110 "2014-01-20T17:59:05Z")

</div>

I really really really don’t see the issue with HTML. From personal experience (and I had to do this with LaTeX, mind you, which was _much_ less forgiveable than HTML and yet people without any LaTeX knowledge, myself included, managed to translate the dictionary in about ten different languages by copying the LaTeX commands), if you want to support translators there are two things that you could do: First you could have a HTML check included (i.e. “the amount of \< and \> has to be equal”), which might also check if tags are balanced (i.e. “\<li\> requires that \</li\> is present”). The second thing would be to have transparent multiline support that is automatically added (using a set of rules, for example `<p>, </p>, <ol>, </li>` will cause a new line after). Perhaps throw in indention if you want to.

If that is done,

```
First, find a suitable spot for your new home. Pick a spot with easy access to:
<p>
	<ol>
		<li><b>Food!</b> Wild berries often grow in the forest.
		<li><b>Lumber!</b> You'll need wood to do just about anything.
	</ol>
		
	When you're ready, click the banner then place it where you would like to settle.

```

doesn’t look too scary. Except I just noticed that they aren’t closing their tags, aaaa.

---

<div class="post-metadata">

**Author:** ![SteveAdamo](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/steveadamo/32/13955_2.png) [@SteveAdamo](https://discourse.stonehearth.net/u/SteveAdamo)\
**Post date:** [January 20, 2014, 6:46pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/111 "2014-01-20T18:46:48Z")

</div>

> [@RepeatPan](#):
>
> Except I just noticed that they aren’t closing their tags

technically, the closing `</p>` is only required in XHTML…

but absolutely… it is always good practice to provide the closing tags (when they are available)…

---

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 6:50pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/112 "2014-01-20T18:50:50Z")

</div>

Technically, closing about every tag is not required in HTML (at least, not HTML4) - but then again, HTML is a mess too. Since there is a lot of JS going around that modifies the DOM however, it might be a good idea to keep Chromium’s chances on interpreting something wrong as low as possible…

---

<div class="post-metadata">

**Author:** ![sdee](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/sdee/32/65441_2.png) [@sdee](https://discourse.stonehearth.net/u/sdee)\
**Post date:** [January 20, 2014, 6:54pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/113 "2014-01-20T18:54:28Z")

</div>

@Tom, you’ve been caught!!! Don’t make me call the String Oligarchy on you! 😉

@tkh, good eye. No, there should not be html formatting in our en.json file.

Edit: @RepeatPan, Hm, ok, I do see the benefit of allowing the translator to change the number of list items. Still, it’s probably not a great separation of model and view.

---

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 7:09pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/114 "2014-01-20T19:09:52Z")

</div>

> [@sdee](#):
>
> Edit: @RepeatPan, Hm, ok, I do see the benefit of allowing the translator to change the number of list items. Still, it’s probably not a great separation of model and view.

It’s not a great separation but it’s the easiest one. The only way I could imagine right now would be to use some sort of templating system that translators could be overridden by translators (i.e. `"create_camp_page" : "{{create_camp_header}} <ol><li>{{create_camp_item_1}}</li>..."`) to adjust entries for their needs.

While this would separate M and V nicely, it’s also restricting - developers need to create a template if they want to do more complex stuff.

For the dictionary project I’ve mentioned I simply assumed that people willing to translate it are not members of a worst case scenario. Even though they might not be able to understand what this LaTeX tag does, they are able to re-construct the formatting in their translation. If the whole thing is under peer review (by multiple translators/players using the translation), errors are detected quickly and should not be hard to fix.

The worst issue that I’ve had in those… four years and about ten translations (but all in all 15-20 translators I believe) was really missing brackets.

---

<div class="post-metadata">

**Author:** ![tkh](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/tkh/32/62619_2.png) [@tkh](https://discourse.stonehearth.net/u/tkh)\
**Post date:** [January 20, 2014, 7:46pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/115 "2014-01-20T19:46:25Z")

</div>

> [@RepeatPan](#):
>
> …there are two things that you could do:  
> …

Absolutely, that could even be within reach for my programming skill level.

However. It feels like the heavy discussion regarding HTML tags could have ended, and I’m not a translate guru (nor speak more than two languages)… But I’m still not convinced to that some languages need 4 rows to explain something where other languages only need 3 😉

Thanks for the reply @sdee, even though it’s not impossible with some tags I think it’s a good approach to leave them outside. And as soon as you have an idea of language ID for files (if it’s a separate file or within the translated file… or any third option), feel free to tell us 😊

I have two things left to fix in my program before I can “release” it to be tested by you guys. First I need to handle when translation files have tags that are not in the original file… or are longer than the original. Also need to fix so my datagridview resizes correctly in all directions (currently only works horizontally…). And since I only have time to code during breakfast and perhaps a little during weekend, the first alpha is still one or seven days away. Though I won’t add any more functionality other than _perhaps_ add an “add row” and “delete row” button.

---

<div class="post-metadata">

**Author:** ![RepeatPan](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/repeatpan/32/46418_2.png) [@RepeatPan](https://discourse.stonehearth.net/u/RepeatPan)\
**Post date:** [January 20, 2014, 8:01pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/116 "2014-01-20T20:01:02Z")

</div>

The list example is a bad one. Much better examples would be when you need to highlight parts of a sentence or a text, for example `Click on your <b>Camp Standard</b> to blah blah`. This can easily be achieved with tags, but is _really_ painful with a more abstract implementation (having variables inside your variables/templates in your templates).

I’ve had people with zero LaTeX knowledge translate `So {\bf tsun}, for example, can be either [\texttoptiebar{ts}un] or [\texttoptiebar{ts}\textupsilon n], but {\bf lu} is always [lu], never [l\textupsilon]. Also, an alternate method of transcribing the diphthongs [\textepsilon j], [aj], [\textepsilon w], and [aw], not used here (for Frommer prefers the former), is [\textepsilon\textsubcircum{\textsci}], [a\textsubcircum{\textsci}], [\textepsilon\textsubcircum{\textupsilon}], and [a\textsubcircum{\textupsilon}].` successfully, so I don’t think a few simple HTML tags are going to be an issue.

I think this would be a good opportunity to start working on my new version of said translation tool actually… This time using [ASP.NET](http://ASP.NET).

---

<div class="post-metadata">

**Author:** ![sdee](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/sdee/32/65441_2.png) [@sdee](https://discourse.stonehearth.net/u/sdee)\
**Post date:** [January 20, 2014, 8:18pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/117 "2014-01-20T20:18:54Z")

</div>

> [@tkh](#):
>
> And as soon as you have an idea of language ID for files

I haven’t messed with this in a while, but the idea is basically that there would be a de.json, sp.json, fr.json, etc, one for each language.

The language can be then set via a menu option somewhere in the game. See: [http://i18next.com/pages/doc\_init.html](http://i18next.com/pages/doc_init.html)

---

<div class="post-metadata">

**Author:** ![sdee](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/sdee/32/65441_2.png) [@sdee](https://discourse.stonehearth.net/u/sdee)\
**Post date:** [January 20, 2014, 6:49pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/118 "2014-01-20T18:49:31Z")

</div>

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/158):
>
> I’m not Team Radiant but this would make sense? It would seem that a translation would be useless without it fitting the culture? Of course this also raises questions about translations for different types of people within the culture … but perhaps that’s getting too nuanced?

I think this is really fascinating too, and I’m glad you’re thinking about it, @amegaara! Basically, Psycopathic Misathrope swears a lot, but the game is supposed to be E for everyone, so he can’t use actual swearing. In fact, he probably shouldn’t even really say “screw this” except that he really does think of it like, to turn a screw, screw. Maybe I’ll replace it with “Rotate this.” or something similar. He can’t say the F-word either, but the word sounds like Fork, which also sounds like Spork, so he’s expressing the universal frustration all people feel when trying to use a lame plastic utensil to stab or cut things.

Hope that helps your translation efforts. Basically, I would advise replacing his lines with a humorous exclamation of aggravation.

I can’t talk more about Sid at the moment, but perhaps more will become clear in context. 🙂

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/176):
>
> Letters with accents show small as if to be the same size as the other letters. I’ll make research and report it on the other forum if it isn’t there, but if it counts as a bug it’s not going to be prioritized, probably.

Yeah, this is probably because the font we use doesn’t support those characters natively, and the browser is falling back on some other font. If you find a font that really works for your translation efforts and that looks good, let us know… You should be able to replace the font in the css/less files, if you can see them.

It’s really really cool for Team Radiant to see the game in so many languages. 🙂 🙂 🙂 Thank you all so much. We are all charged up for the week now!

---

<div class="post-metadata">

**Author:** ![Smokestacks](https://avatars.discourse-cdn.com/v4/letter/s/97f17d/32.png) [@Smokestacks](https://discourse.stonehearth.net/u/Smokestacks)\
**Post date:** [January 20, 2014, 6:57pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/119 "2014-01-20T18:57:28Z")

</div>

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/190):
>
> he’s expressing the universal frustration all people feel when trying to use a lame plastic utensil to stab or cut things.

I must say, I know his pain.

Sitting in your seats during the interval at the theatre, with those little tubs of ice cream and those stupid spoons. Whilst delicious, if they’re even slightly too cold…well spork will definitely be the word I’ll use next time. 😉

Interesting to hear the stuff about swearing/exclaiming. Definitely useful info for those translating. 🙂

---

<div class="post-metadata">

**Author:** ![sdee](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/sdee/32/65441_2.png) [@sdee](https://discourse.stonehearth.net/u/sdee)\
**Post date:** [January 20, 2014, 7:06pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/120 "2014-01-20T19:06:35Z")

</div>

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/191):
>
> Sitting in your seats during the interval at the theatre, with those little tubs of ice cream and those stupid spoons. Whilst delicious, if they’re even slightly too cold…well spork will definitely be the word I’ll use next time.

The one that always comes to mind for me is how all through the 90s the KFC near my house had only plastic sporks available to eat the chicken with. Why???

Credit for the utensils should really go where it’s due; to Mark Shallow’s long finished [Adventurers!](http://adventurers.keenspot.com/d/0001.html). Though convergent evolution here does apply; just talk to any engineer who has to [fork](https://help.github.com/articles/fork-a-repo) a repo/branch in source control.

---

<div class="post-metadata">

**Author:** ![Relyss](https://sea2.discourse-cdn.com/flex022/user_avatar/discourse.stonehearth.net/relyss/32/41785_2.png) [@Relyss](https://discourse.stonehearth.net/u/Relyss)\
**Post date:** [January 20, 2014, 7:53pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/121 "2014-01-20T19:53:45Z")

</div>

For my particular case, I just need to replace two fonts, the rest show characters with accents in the demo files, or a list with the glyphs that they have. But for those people with non-Latin alphabets, surely they will have to change more fonts or all of them. I think of this as another way to contribute to the game. The most difficult part when searching for a suitable font is to find one that looks good and similar to the original. And of course for free. But there’s a lot of them, so I’m sure we’ll find a solution. 😊

---

<div class="post-metadata">

**Author:** ![Smokestacks](https://avatars.discourse-cdn.com/v4/letter/s/97f17d/32.png) [@Smokestacks](https://discourse.stonehearth.net/u/Smokestacks)\
**Post date:** [January 20, 2014, 8:08pm UTC](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887/122 "2014-01-20T20:08:44Z")

</div>

> [@Community Translations: Volunteers (Overview)](https://discourse.stonehearth.net/t/community-translations-volunteers-overview/2815/192):
>
> the KFC near my house had only plastic sporks available to eat the chicken with. Why???

Because KFC is sacred and you must honour its traditions, e.g. eating it with your fingers 😉

I may have a crack later tonight at putting accents on some of the letters in paint and see if I can get it to work as a font with the accented letters included. I have no idea what I’m getting into so it may be fun! 🙂

**Edit:** Well the first step would be to actually know what font they use. Derp.

Hmmm. I’m pretty sure it’s not Stronghold, the one they use for e.g. the logo on Discourse.

And I’m pretty sure it isn’t Berlin Sans. Why? Because if it is, then extended latin letters (and a large array of others) are available already, so accents wouldn’t be a problem.

Can anyone help? I’ve done a little snooping, but not an enormous amount.

[Previous page](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887.md?page=5)

[Next page](https://discourse.stonehearth.net/t/how-to-support-joint-translation-efforts/1887.md?page=7)
