Shuttle: Powerful cross-platform localization

Shuttle: Powerful cross-platform localization

Shuttle takes the pain out of internationalization by giving you an end-to-end translation toolchain.

Written by Tim Morgan.

Internationalization is hard. It’s a monumental effort to take a large codebase originally written for the United States and make it global. Square first faced this challenge with our launch in Canada, and an appreciable portion of the work was in localization.

Following the flurry of furious coding and growing pains that defined our first foray into international waters, we set out to replace the hodgepodge of scripts and manual workflows left standing after the dust settled. These ad-hoc tools shipped our content between our engineers and translators, but it quickly became apparent that we would not be able to preserve our fast development cadence without major changes.

Enter Shuttle. My team was given the tall order of building a tool that would cure frustrations shared by both developers and translators, a single platform where developers could easily import strings from their projects, and where translators could do their jobs as efficiently and accurately as possible. It was a formidable challenge, but we felt empowered by the lessons learned from our first tentative steps towards becoming an international company. We would get it right the second time.

What is Shuttle?

Shuttle is a website for developers and translators. After importing their projects, developers submit revisions (commits) for translation. Shuttle imports these commits, scanning each source file for localizable strings. Shuttle recognizes localizable content in many platforms, including Ruby on Rails, Cocoa/iOS, Android, Ember.js, and Java. These strings are parsed and imported into Shuttle’s database of translatable content.

Each string is associated with its unique, platform-specific key. Shuttle searches for prior translations of these keys, and any remaining untranslated strings are made available for translation.

Translators are presented with a user interface designed to help them be as fast and accurate as possible. They choose a commit to translate, based on its priority, due date, and the amount of work required. The translator workbench displays strings requiring translation, and exposes a suggestion engine powered by Shuttle’s glossary and translation memory.

Reviewers who are experts in their respective languages then review these translations for accuracy, and approve them when they are ready. Reviewers also populate the glossary, ensuring that multiple translators share a consistent voice.

Once all pending translations are completed and approved, the commit “goes green” and is ready for deployment. Shuttle provides API endpoints that ship archived manifests of translated strings to the client. Developers write build scripts that download these archives and integrate them into the deploy artifact. The artifact is then shipped off for deployment or release.

Developers can submit as many commits for translation as they wish at any point, involving the translators early in the development process. A merge commit that lands a feature onto the release branch should “go green” immediately, as it adds no additional strings, and therefore is ready for deployment/release.

Is Shuttle the right solution for me?

Shuttle is built around the philosophy of software development we employ here at Square: It doesn’t get released until it’s finished. Here it is not acceptable that a new feature would be released without being fully translated and approved in every supported language; we vowed to give our international customers the same polished experience that our U.S. users enjoy.

Shuttle is intended for projects with in-house translation, or those that contract individual translators or translation houses. Shuttle has no support for computerized translation, as it is not yet something we utilize at Square.

Where can I get Shuttle?

More information about Shuttle and a tutorial video are at useshuttle.com. The Shuttle source code is available on GitHub. The README and the developer guide have all the information you need to install Shuttle and integrate it into your workflow.

What’s next?

Shuttle is production-ready but it’s far from complete. We are constantly striving to improve the quality of our translations by improving our translator workbench. In the future we will be adding an advanced suggestion engine, allowing translators to view similar past translations to help improve the speed and consistency of their translations. We will also be adding support for “explosions” — bifurcating strings depending on a language’s pluralization and gender requirements.

Currently at Square we use different internationalization libraries for each programming language we develop in, and each of these supports different features, such as translator context or language-specific pluralization rules. In the future we hope to normalize this by providing our own cross-platform library with support for a wide range of grammar rules.

At Square, Shuttle has vastly improved developer happiness, boosted translation accuracy and throughput, and significantly reduced the pain involved in launching in a new country. If you have similar internationalization goals, then I encourage you to give Shuttle a try.

L’internationalisation n’est pas chose facile. Rendre disponible à l’international une importante base de code créée à l’origine pour les États-Unis représente un travail gargantuesque. Square a pour la première fois dû faire face à ce défi au moment de son lancement au Canada. Une part non négligeable de cet effort concernait alors la localisation.

Suite à l’effervescence de programmations effrénées et aux difficultés grandissantes qui ont défini notre premier bain dans les eaux internationales, nous nous sommes attelés à remplacer le fatras de scripts et de processus manuels des opérations, une fois la poussière retombée. Ces outils ad hoc avaient permis de transférer notre contenu des ingénieurs aux traducteurs, mais il paraissait évident que nous ne serions pas en mesure de conserver le rythme soutenu de notre développement sans d’importants ajustements.

De là est né Shuttle. Mon équipe s’est employée à construire un outil qui remédierait aux frustrations des développeurs comme des traducteurs, une plateforme unique où les premiers pourraient facilement importer les chaînes de leurs projets et où les seconds pourraient travailler aussi efficacement et précisément que possible. Immense défi, mais nous nous sentions investis des leçons tirées de nos premiers pas vers l’internationalisation. La deuxième tentative serait la bonne.

Qu’est-ce que Shuttle?

Shuttle est un site Web pour développeurs et traducteurs. Après avoir importé leurs projets, les développeurs soumettent leurs révisions (commits) à l’étape de traduction. Shuttle importe ces commits et scanne chaque fichier source pour repérer les chaînes devant être traduites. Cet outil reconnaît le contenu localisable sur de nombreuses plateformes, dont Ruby on Rails, Cocoa/iOS, Android, Ember.js et Java. Ces chaînes sont regroupées et importées dans la base de données de contenu à traduire de Shuttle.

Chaque chaîne est associée à une clé unique et spécifique à la plateforme. Shuttle recherche les traductions précédentes de ces clés et prépare le nouveau contenu pour la traduction.

Les traducteurs disposent quant à eux d’une interface utilisateur conçue pour les aider à être le plus rapide et le plus exact possible. Ils choisissent un commit à traduire selon sa priorité, sa date d’échéance et la quantité de travail requise. Le tableau de bord du traducteur affiche les chaînes devant être traduites et présente un moteur de suggestion alimenté par le glossaire et la mémoire de traduction de Shuttle.

Les réviseurs experts dans leurs langues respectives relisent ensuite ces traductions pour en vérifier l’exactitude et les approuvent lorsqu’elles sont prêtes. Ils peuvent aussi renseigner le glossaire pour s’assurer que tous les traducteurs partagent une voix cohérente.

Une fois toutes les traductions en attente saisies et approuvées, le commit « passe au vert » et est prêt pour déploiement. Shuttle fournit des points de terminaison API qui envoient les manifestes archivés de chaînes traduites au client. Les développeurs rédigent des versions du script qui téléchargent ces archives et les intègrent dans l’artefact de déploiement. Celui-ci est ensuite envoyé pour déploiement ou lancement.

Les développeurs peuvent à tout moment envoyer le nombre de commits qu’ils souhaitent vers l’étape de traduction, ce qui implique le traducteur à un stade précoce du processus du développement. Un commit de fusion qui insère une fonctionnalité dans la branche de publication passe au vert immédiatement, car il ne contient pas de nouvelles chaînes, et est donc prêt pour déploiement/lancement.

Shuttle : la bonne solution pour mes besoins?

La solution Shuttle est conçue autour de la philosophie de développement logiciel qui prévaut chez Square: pas de lancement avant que tout ne soit terminé. Pour nous, il est impensable de lancer une nouvelle fonctionnalité sans que celle-ci ne soit complètement traduite et approuvée dans toutes les langues prises en charge. Nous nous engageons à offrir à nos clients internationaux la même qualité d’expérience que celle dont bénéficient nos clients aux États-Unis.

Shuttle est conçu pour les projets dotés de services linguistiques internes ou ceux qui emploient des agences de traduction ou des linguistes à titre contractuel. Cet outil ne prend pas en charge les machines de traduction, car nous n’utilisons pas cette technologie à l’heure actuelle.

Comment obtenir Shuttle?

Pour en savoir plus sur Shuttle et consulter un tutoriel, accédez à useshuttle.com. Shuttle est hébergé par GitHub à l’adresse https://github.com/square/shuttle. La section README (en anglais) comporte toutes les informations nécessaires pour installer Shuttle et l’intégrer au déroulement de vos activités.

Et ensuite?

Shuttle est prêt à l’emploi, mais loin d’être abouti. Nous nous efforçons sans cesse d’améliorer la qualité de nos traductions en améliorant notre ensemble d’utilitaires pour les traducteurs. Nous comptons ajouter un moteur de suggestion pointu pour permettre aux traducteurs d’afficher des traductions précédentes similaires afin d’améliorer la rapidité et la cohérence de leur travail. Nous allons également prendre en charge les « explosions » (le fait de faire bifurquer les chaînes selon les règles de pluralisation et de genre d’une langue).

Chez Square, nous utilisons actuellement des librairies d’internationalisation pour chaque langage de programmation pris en charge. Chacune d’entre elles prend en charge différentes fonctionnalités, comme la contextualisation pour les traducteurs et des règles de pluralisation spécifiques à une langue. Nous espérons à l’avenir normaliser cette pratique en créant notre propre librairie multiplateforme avec une prise en charge de nombreuses règles grammaticales.

Shuttle a considérablement amélioré la satisfaction des développeurs, ainsi que l’exactitude et la rapidité des traductions, tout en réduisant amplement les difficultés liées à l’internationalisation. Si vos objectifs en la matière sont similaires, nous vous encourageons à essayer Shuttle.

インターナショナライゼーション(国際化)は決して容易なものではない。元来アメリカの ために書かれたコードベースをつかって、グローバル化しようという試みなのだから。Sq uareが最初にこの問題に直面したのはカナダでのローンチの際で、我々の仕事のかなりの 部分がローカライゼーションに費やされた。

初めての「インターナショナルの海への出航」は狂った荒波のようなコーディングと終わ りの見えない苦痛との戦いだった。嵐が収まった後にのこされていたのはごちゃごちゃの スクリプトとワークフローのあつまりだった。その場しのぎで出来上がったツールはエン ジニアと翻訳者の間でコンテンツを送信するだけのものだった。しかしすぐに、なにか大 きな変更をしない限り、このやり方で開発をしつづけていくのは無理だということに気づ かされた。

そこで立ち上げたのがShuttle だ。自分のチームは、開発者側と翻訳者側両方のフラストレーションを和らげ、開発者が プロジェクトから簡単にストリングスをインポートすることができ、また、翻訳者が効率 的かつ正確に翻訳を行うことができる単一のプラットフォームを立ち上げる、という仕事 をまかされた。とんでもないことになったと正直おもったが、国際化にむけてのおおいな る第一歩のときに学んだレッスンから得たものは大きかった。2回目はもっとうまくやっ てやろう、と。

Shuttle(シャトル)とは。

Shuttleはデベロッパー(開発者)と翻訳者のためのウェブサイトである。開発者はプロジ ェクトをインポートした後、翻訳者に翻訳リクエスト(コミットと呼ぶ)を送信する。Shut tleはこれらのコミットをインポートし、それぞれのソースファイルのどれがローカライ ズ(翻訳)できるストリングスなのかをスキャンし判別する。Shuttleは、Ruby on RailsやCocoa/iOS、Android、Ember.js、Javaといったプラットフォーム上のコードとロ ーカライズ可能なコンテンツを見分けることができる。これらのストリングスが解析され Shuttleの翻訳可能コンテンツのデータベースにインポートされる。

それぞれのストリングスはプラットフォーム別の個別のキーと関連づけられる。これらの キーをもとにShuttleは以前翻訳されたものであるのか、またはまだ翻訳されていないも のなのかを見分ける。

翻訳者側は、素早く正確に翻訳するために開発されたインターフェイスを使い、重要度や 期限、仕事量などをもとに翻訳が必要なコミットを検索することができる。翻訳ワークベ ンチには翻訳が必要とされているストリングスが表示され、Shuttleグロッサリー(辞書) や翻訳メモリーから翻訳のたすけとなる情報が提供される。

それぞれの言語の専門家が、翻訳をし正確に訳されているかを確認したのちに承認する。 翻訳者はグロッサリーを増やしていくことで、別の翻訳者と翻訳の整合性に矛盾がないよ うにすることができる。

全てのコミットが翻訳され承認されると、そのコミットは“go green”(緑色)に代わりデプロイ(発行)の準備がととのう。ShuttleはAPIエンドポイントを 提供し翻訳されたストリングのアーカイブ化されたマニフェストを送信する。開発者はこ れらのアーカイブをダウンロードし、アーティファクトへと統合させる。

開発者側はコミットをいつでもいくつでも作成することができため、プロジェクトの早い 段階で翻訳者を含めることができる。統合されたコミットはすぐに”go green”となりデプロイメントもしくはリリースへの準備が整う。

Shuttleが最良の解決策か?

ShuttleはSquareで働くソフトウェア開発者の哲学をもとに作られている。つまり、完成 するまでリリースされない、ということだ。ここでは、サポートされた言語へ全て完全に 翻訳されるまで、新しい機能のリリースは許されない。インターナショナルなお客様にも アメリカで使えるすばらしい機能をそのままつかってもらいたいからだ。

Shuttleは社内の翻訳プロジェクト、もしくは契約された翻訳者や翻訳会社との間で使わ れるのを念頭において作られている。Shuttleは、Square社内で使われていない自動翻訳 などには対応していない。

Shuttleはどこで手に入るか

Shuttleの詳細やチュートリアルのビデオについては下記のリンクを参照していただきた い。

useshuttle.com

またShuttleはGitHubをホストとして使用している。

https://github.com/square/shuttle

ReadmeファイルはShuttleをインストールし使用するのに必要な情報を全て含んでいる。

Shuttleの先にあるのは?

Shuttleはすぐに使っていただけるが、完成からはほど遠いといえる。翻訳ワークベンチ を改良することで翻訳そのものの質をよくするため、我々は日々努力している。将来的に は、翻訳のスピードと一貫性を向上させるため、「サジェスチョンエンジン」を搭載させ 、翻訳の際に翻訳者に以前翻訳した似ているコンテンツについての翻訳の提案を自動的に 出すようにする予定だ。また、翻訳言語の複数・単数や男性・女性を訳出する必要性にあ たって、ストリングを分岐化させる「エクスプロージョン」という機能も搭載させる予定 である。

現時点でSquareでは、それぞれのプログラミング言語には別々の国際化ライブラリを使用 しており、またそれぞれが翻訳者コンテクストや特定言語複数形ルールなどといった異な る機能をサポートしている。将来的には、広範囲におよぶ文法のサポートを搭載した自分 たちのクロスプラットフォームライブラリを提供することで標準化していきたい。

Squareでは、Shuttleは開発者の満足度や翻訳の正確さを向上させ、新しい国におけるロ ーンチ時の苦痛を著しく軽減してきた。もしも、あなたが同じような国際化へ向けてのゴ ールを目指しているのならぜひShuttleを試してみていただきたい

useshuttle.com Tim Morgan Square programmer, Mac enthusiast, commercial pilotmedium.com

Table Of Contents