---
title: "Lost in Translations: Bringing the World to Shopify"
description: "Shopify describes the engineering challenge of internationalizing a platform whose twelve years of development left thousands of hardcoded English strings across millions of lines of code. The team first used cops, linters, and tests to stop new violations, then automated extraction of existing content into module-specific dictionaries using keys derived from file paths and strings. A Rails I18n-based pseudolocalization backend replaced characters and doubled vowels, making untranslated content visible while exposing UI problems caused by longer words; UTF-8 migrations and application fixes addressed character-set and internationalization bugs. Finally, an internal Translation Platform connected GitHub webhooks and a translation management system, automatically submitting changed language files and returning approved translations as commits or pull requests. After six months, Shopify was available in a variety of languages, while the team continued addressing localization issues involving formatting, geography, payments, shipping, iconography, and regional requirements."
---

# Lost in Translations: Bringing the World to Shopify

[Shopify](https://yomu.fyi/company/shopify) · Christian Blais · Oct 10, 2018

**Type:** Problem & solution

## Summary

Shopify describes the engineering challenge of internationalizing a platform whose twelve years of development left thousands of hardcoded English strings across millions of lines of code. The team first used cops, linters, and tests to stop new violations, then automated extraction of existing content into module-specific dictionaries using keys derived from file paths and strings. A Rails I18n-based pseudolocalization backend replaced characters and doubled vowels, making untranslated content visible while exposing UI problems caused by longer words; UTF-8 migrations and application fixes addressed character-set and internationalization bugs. Finally, an internal Translation Platform connected GitHub webhooks and a translation management system, automatically submitting changed language files and returning approved translations as commits or pull requests. After six months, Shopify was available in a variety of languages, while the team continued addressing localization issues involving formatting, geography, payments, shipping, iconography, and regional requirements.

## Context

Shopify’s internationalization effort addressed a platform built over twelve years with thousands of hardcoded English strings. The work covered language-specific grammar, pseudolocalization, character sets, translation workflows, and broader regional differences in commerce and user experience.

## Approach / What changed

The team stopped new hardcoded-string violations with cops, linters, and tests; extracted existing content into dictionaries; used Rails I18n-based pseudolocalization for visual testing; migrated databases and fixed internationalization issues; and built Translation Platform to connect GitHub repositories with a translation management system through APIs and webhooks.

## Takeaways

- Cops, linters, and tests prevented new hardcoded strings, date formats, and other translation-related violations while giving the team feedback about the remaining work.
- Pseudolocalization replaced characters and doubled vowels to reveal untranslated content and test interfaces against longer words without requiring completed foreign-language translations.
- Translation Platform used repository configuration, GitHub webhooks, and translation-management APIs to submit changed language files and return approved translations as commits or pull requests.

## FAQ

### Why did Shopify use pseudolocalization instead of immediately translating the interface?

Pseudolocalization made extracted content visibly different from hardcoded content while keeping the product usable for translators, content writers, and product managers. Doubling vowels also helped test layouts against languages with longer words.

### How did the Translation Platform connect developers and translators?

Each repository configured its language-file locations, source language, and target languages. Webhooks detected changes, submitted translation requests through the translation-management API, and created commits or pull requests when translations were approved.

### What character-set problem did Shopify encounter with MySQL?

MySQL’s default utf8 stored only up to three bytes per code point, excluding characters such as emoji and hentaigana outside the Basic Multilingual Plane. Many tables therefore required migration, and the team used UTF-8 characters in fixtures and data seeds to expose broken behavior.

**Tags:** [Localization](https://yomu.fyi/topic/localization), [MySQL](https://yomu.fyi/topic/mysql), [Ruby on Rails](https://yomu.fyi/topic/ruby-on-rails)

- Source: [Shopify](https://shopify.engineering/lost-in-translations)
- Source URL: https://shopify.engineering/lost-in-translations
- Ingested by Yomu: 2026-09-17T14:06:33.479Z

[Read original post](https://shopify.engineering/lost-in-translations)
