Matthew Romaine, myGengo

We translate millions of words on thousands of pages, helping hundreds of clients reach billions of people.
We translate millions of words on thousands of pages, helping hundreds of clients reach billions of people.

In ExpressionEngine, we’re part-way through a transition of the old-way of handling localized strings in EE’s language-file format and our new way of using gettext, so we need to complete that transition. We also plan to be doing more aggressive A/B testing of our pages, requiring faster iterations and tweaks to EE2 templates.

What can you tell us about the team that built myGengo?

myGengo has grown from a duo of developers almost 3 years ago to a 15-person team with engineers, sales, support, and operations. All development and a majority of the team is based in Tokyo, Japan.

What can you tell us about the site in general? What are the goals of the site and the main audience?

myGengo is a crowd-sourced platform for (currently) around 3,000 qualified translators. Our translators are located all around the world, covering every timezone and helping customers translate content into 15 languages (with more languages coming!). Our goal is to help individuals and businesses “go global” - through making the process of obtaining translations more accessible and reliable. We’re growing this effort predominantly through our Translation API.

What was your major consideration in using ExpressionEngine for this?

The web-based ordering form is built on CodeIgniter, since we needed to build a custom job-processing workflow and unique UIs for both customer and translator interactions. As we grew and needed to host more static content customarily managed by a CMS, our familiarity with ExpressionEngine from previous projects made EE (originally 1.7) a natural choice. We’ve since migrated to EE2.0, where we host the blog, all the informational pages of the site (FAQs, Translator Resources), and the Translation API documentation.

This site is published in multiple languages. What method are you using for Multi-Language? Any tips on handling the differing content?

For multi-language support we have created a Language category, which gets applied to every channel that needs to distinguish languages for content. We’ve tweaked our index.php to parse the subdomain for a language code (“lc”), and then calculate the associated category id for that lc. This category id then gets passed in as a parameter on channel entries tags when appropriate.

For managing the strings, we’ve rolled our own process that uses a combination of gettext / .po processing and our String service.

You’ve mentioned that myGengo utilizes CI as well. In what way?

CI actually drives most of the core interactive parts of our service - the translation job uploading, ordering, processing, etc. It also drives String, our project management tool for localizing applications.

Were there any Commercial Add-ons that proved useful? If so, which ones? How did they help?

Solspace Tag; NSM Better Meta; P&T Field Pack.
All useful for pretty obvious reasons really.

Did you do any custom add-on development?

We have - due to our testing and deployment infrastructure, we’ve had to roll our own DB migration module. If we find the time, we might throw this up on Github. We also created a custom module for creation of landing page variations.

What is next on the plate for myGengo? Any additional functionality you can tell us about?

Our biggest improvements over the next few months are directed towards app and mobile developers, making it easier for them to manage their projects.

In ExpressionEngine, we’re part-way through a transition of the old-way of handling localized strings in EE’s language-file format and our new way of using gettext, so we need to complete that transition. We also plan to be doing more aggressive A/B testing of our pages, requiring faster iterations and tweaks to EE2 templates.

Do you have any other information you’d like to share with the community? Tips from this project you’d like to share? Lessons you’ve learned?

In general, running a site that relies on both EE2 and CI as separate but partially dependent platforms has been pretty smooth. The encryption logic changed between pre-2.0 and 2.0 so we had to tweak our code a bit to handle this, but not much else has caused issues.

One of the areas we’re excited about that uses EE2 is in the API documentation, such as the quote call. We have sample code that actually pulls content from the respective Github repository of the library in the programming language. We also launched a contest last February to encourage developers to work with our API, and have yet to see an ExpressionEngine module submission - so if anyone is up for the challenge, you still have a chance!