C++ and translations

Graham Menhennitt graham at menhennitt.com.au
Sat Apr 22 19:32:33 EDT 2017

Hi Geert,

I have some experience in this area. I'm not fully up to date since I 
haven't done it for a while.

Please see below.


On 23/04/2017 02:43, Geert Janssens wrote:
> 1. is there a c++ way to handle translations ? As far as I'm aware gettext
> can't handle std::string objects directly, so we have to pass it the ->c_str()
> function result. This is not always very nice.

Agreed - not nice. As David says, Boost.Locale is what you want. It 
handles std::string and, more importantly, std::wstring. There are 
others too.

> 2. c++ makes it very easy to compose strings by either summing them (strA +
> strB) or streaming them (strA << strB).

Don't do this! Some things we say in English are idiomatically 
structured in a different way in other languages. As a very simple 
example, in English we might say "There are %d items in this %s". In 
another language, they would say "in this %s there are %d items". If you 
concatenate strings, this doesn't work.

> 4. When we throw exceptions, we pass a message explaining the reason the
> exception was thrown. I have been leveraging these messages to inform the

I wouldn't worry about translating exception messages. Firstly, users 
should never see them. Secondly, even if they do see them, it's usually 
easy enough to get their meaning - most people (especially ones likely 
to be using GnuCash) have at least a rudimentary understanding of 
English. Lastly, it makes reporting of bugs more difficult. If a German 
user reports that they've seen error "XXX", it won't match any reports 
of English users seeing "YYY" even though it's the same error.

Another consideration is the set of tools to allow translations by third 
parties. As a developer, you want to be able to ship a set of 
translatable strings to a native speaker who isn't familiar with 
software development or GnuCash. They have to translate using some tool 
and ship the translated strings back to you. There are third party (some 
non-free) tools to do this but I can't give any recommendations there.

More information about the gnucash-devel mailing list