(As opposed to JSON and jQuery Globalize or similar?)
Problem courtesy of: dani
gettext format is rather common:
- so if your serverside is using gettext format already you might share it with client
- translators might feel more comfortable with gettext format (or yaml) than with json format
- there is a lot of tooling around for it
Libs you could use:
- jed comes with pure gettext implementation
- i18next supports gettext files but uses a json approach for translation functions
I would recommend using l10ns. For any i18n related project you need the following:
- A good storage system that stores localization string.
- A good localization format that can handle complex formatting and not just simple strings. And by complex formatting I mean a format that can handle plural formatting, genus/context based formatting, number formatting, date formatting etc.
There are very few tools out there that handles both of these points The most common solution is to use gettext together with
Xgettext is a tool that traverses your source code to sync localization keys between your source code and localization storage. Though gettext is not so good at handling point 2. For instance you can't format a string with two plural words. So strings such as
I like 2 cats and 1 dog is very hard to format. Plural formatting is a very complex problem to solve and have a lot of edge cases. Let say that instead of liking just two cats we like 2000. The correct formatted string would be
I like 2,000 cats and 1 dog. Did you notice the
2,000?. So in order to use gettext's plural solution correctly we also need to use an external library for handling number formatting.
So for point 2, having a good localization format. I find ICU's MessageFormat handle this the best. It's markup language that deals with l10n formatting and it's used by many big name companies such as Google, Apple and Yahoo. It handles the edge cases with plural formatting mentioned above. It also handles a lot of other types of complex formatting. Such as genus context, ordinal formatting, number formatting and date formatting etc.
One tool that support ICU's MessageFormat and have a storage system built in is L10ns. It also supports
Xgettext's workflow. You write your source code and then you sync your localization keys.
Discussion courtesy of: dsas
This recipe can be found in it's original form on Stack Over Flow.