I once again find myself working on an i18n/l10n (internationalization/localization) effort, so I figure I may as well document how things evolve for public consumption. ---- As background: I first worked on i18n during the Zope 3 sprints at PyCon 2003 (I think that's the right year), working with Stefan and Jim on `zope.i18n`. At Creative Commons, I worked on i18n for the license chooser, licenses, wiki, etc, as well as the desktop apps we wrote for a while. Lots of gnarly bits in there, but still mostly `gettext` based. I think we were localizing the deeds into 40-50 languages when I left, and had done some serious work to accept translation suggestions from the community with approval/acceptance by our partner organizations. Jinja, ZPT, content negotiation, lots of fun stuff. At Eventbrite I worked on i18n again, again with Python and gettext. Mako templates + javascript, as well as figuring out how multiple TLDs would work (ie, eventbrite.fr should start in French (fr-FR), but what happens if you want eventbrite.fr in Spanish? The answer is non-obvious, and we worked really hard to get it close to right. The real answer is "Don't do multiple TLDs; it's sort of dumb.") ---- At [Remind](http://remind.com) things are even more involved. We're going to need to translate: * Android and iOS native applications * Angular web application * Text content in our Rails API * Small messages in Node.js and Golang based services * Help center content store in Zendesk * Life-cycle emails sent via customer.io