I've worked as the coordinator of a team which had to do small translations from time to time. There translations were to localize new pages of the corporate website to the languages of the many countries where we were present. The English content was sent in an Excel spreadsheet, one term or phrase per line in the first column, and we had to write the corresponding Brazilian Portuguese translation into another column.
So far so good, but there were terms and small phrases that were very difficult to translate because of lack of context. For example, the word "Ok" doesn't exist in Portuguese, and we don't have "catch all" word with that meaning. So "Ok" would be translated sometimes to "Fechar" (close in Portuguese), in other times to "Sim" (yes) and so on, depending on the context. But we had to write or call someone to ask what the context was.
I know almost nothing of gettext but it seems from the links in this thread that it supports contexts which from my experience are very important during the translation. If that's true, +1 to gettext format. Another +1 to gettext for the GUI tools that handle gettext format.
But there are three more things I'd love to have in an i18n library. One is the ability to localize any type of asset, not just text. For example, I may choose to use images for the menu options because I use an effect on the text that the font renderer does not provide. Another example are sound files with speech.
The second thing is the way the text is actually localized in the code. Although it's very clear what
i18n.getTranslation'mainmenu.options' does, I'd rather not have to type all those characters wherever I need localized strings, though it can be done with just a
T=i18n.getTranslation. I also would like to have the "core" language text instead of some "message id" because it makes it easier to visualize what you're doing, i.e.
Code: Select all
doMenu{ T'Start Game', T'Options', T'Quit' }
If more information is needed to get the correct translation (as for the "Ok" example), that could just be part of the string:
Code: Select all
T'nextlevel:Ok' -- translates to Continuar in pt or Ok in en.
The last thing is to use language codes with both the country and the language, i.e. pt_BR, en_US etc. During my time in the position described above, I had to fight the leads because they just couldn't understand that the languages spoken in Brazil and in Portugal are dissimilar in a number of ways, and I'm not talking about just slang. For example, screen is
tela in Brazilian Portuguese and
ecrã in, uh, Portuguese Portuguese :-P
Cheers,
Andre