You open a codebase and see folders named i18n. Then a teammate mentions l10n in a pull request. Someone else says "we need better g11n." And you quietly nod, hoping nobody asks you to explain. š
Been there? You're not alone. These strange abbreviations show up in almost every app that serves more than one language. So what do t9n, l10n, i18n, and g11n actually mean, and how are they different?
Let's break them down in plain English. š
What Are t9n, l10n, i18n, and g11n?
First, the naming trick. Each abbreviation keeps the first letter, the last letter, and replaces everything in between with a number. That number is how many letters were skipped.
- t9n = translatio*n* (9 letters between t and n)
- l10n = localizatio*n* (10 letters between l and n)
- i18n = internationalizatio*n* (18 letters between i and n)
- g11n = globalizatio*n* (11 letters between g and n)
Developers did this because the full words are long, and typing "internationalization" fifty times gets old fast.
Now the meanings:
t9n: Translation
Turning text from one language into another. "Welcome" becomes "Bienvenido." That's it. Translation is just about words.
l10n: Localization
Adapting your product for a specific language and region. This includes translation, but also dates, times, currency, number formats, images, and cultural details.
i18n: Internationalization
Building your app so it can support many languages and regions without rewriting the code each time. Think of it as preparing the house before the guests arrive.
g11n: Globalization
The big-picture term. It usually means the whole process of making a product work for a worldwide audience, and it commonly covers both i18n and l10n. š
Quick note: these terms are used a little differently from team to team, and
t9nin particular is less standardized than the others. If something is unclear, ask what your team means by it.
A Simple Analogy: Opening a Restaurant
Imagine you run a restaurant and want to serve customers in many countries.
- i18n: You design the kitchen so the menu can be swapped easily, instead of painting dishes on the wall.
- t9n: You translate the menu into other languages.
- l10n: You also adjust prices, portion sizes, and local dishes for each country.
- g11n: The whole plan of serving customers worldwide.
Same restaurant, different layers of work. š
Why This Matters
Not everyone reads English, and even people who do often prefer their own language. Even within one language, details differ. For example, 07/11/2026 can mean 7 November or July 11 depending on where you live. That small difference can cause real confusion.
If you ignore this early, you may end up with text hardcoded all over your components. Fixing that later is painful. š§
Benefits with Real-Life Examples
- Reach more users. A learning app that offers Urdu and English can serve more students than one that offers only English.
- Fewer confusing moments. Showing prices as "$1,000.50" to one user and "1.000,50 ā¬" to another matches what each person expects.
- Easier maintenance. With i18n done right, adding a new language often means adding a translation file, not touching component logic.
- More trust. Users usually feel more comfortable when an app feels made for them, not just translated at them.
- Supports different writing directions. Languages like Arabic and Urdu are written right to left, and a well-prepared layout can handle that.
Comparison: i18n vs l10n vs t9n
| Term | Focus | Who usually does it | Example |
|---|---|---|---|
| t9n | Words only | Translators | "Cart" ā "Carrito" |
| l10n | Language + region details | Translators, designers, developers | Local date, currency, images |
| i18n | Making the code ready | Developers | Using translation keys instead of hardcoded text |
| g11n | The overall strategy | Product and engineering teams | Planning a worldwide launch |
A handy memory trick: i18n is the foundation, l10n is the finishing touch, and t9n is one part of l10n.
Best Tips: Do's and Don'ts
ā Do
-
Use translation keys. Write
t("cart.title")instead of the raw string "Your Cart." -
Use built-in formatting tools. JavaScript's
IntlAPI can format dates, numbers, and currencies for different locales. - Leave room in your layout. Translated text can be longer or shorter than English.
- Plan for plurals. "1 item" and "2 items" don't work the same way in every language.
- Start early. Even if you launch in one language, prepare for more.
ā Don't
- Don't build sentences by gluing words together. Word order changes between languages.
- Don't assume everyone uses the same date or number format.
- Don't put text inside images if you can avoid it.
Here's a tiny example of the idea:
// Hardcoded (hard to translate)
<h1>Welcome back!</h1>
// With a translation key (i18n-ready)
<h1>{t("home.welcome")}</h1>
// Formatting a price for a locale
new Intl.NumberFormat("de-DE", {
style: "currency",
currency: "EUR",
}).format(1000.5);
Common Mistakes People Make
1. Mixing up the terms. Many people use "translation" and "localization" as if they mean the same thing. They don't. Translation is one piece of localization.
2. Hardcoding text. It feels faster at the start. It becomes a headache when a second language arrives.
3. Translating word for word. Literal translations can sound awkward or confusing. Good localization considers meaning and context.
4. Forgetting layout changes. A button that fits "Save" may break with a longer translated word.
5. Treating language and country as the same thing. One language can be used in many regions, with different formats and spelling.
Conclusion
Let's recap:
- t9n is translation: converting words.
- l10n is localization: adapting for a language and region.
- i18n is internationalization: building your app to support that adaptation.
- g11n is globalization: the overall effort of serving a worldwide audience.
Next time you see these abbreviations in a codebase, you'll know exactly what's going on. And if you're starting a new project, a little i18n preparation now can save you a lot of pain later. š”
If this guide helped, share it with a teammate who's still nodding politely at "l10n." š Want more practical dev content? Read more blogs at hamidrazadev.com. And if you have a localization story or question, drop it in the comments. I'd love to hear it!
Top comments (0)