As software engineers, we take pride on building robust, scalable systems that can handle edge cases. Yet, when it comes to localization, even the most meticulous among us fall prey to dangerous assumptions.

When I started localizing my first mobile app, I naturally started with all the texts hardcoded inside the source code. I had never assumed that my apps would be available in more languages. In fact, I didn't even count on the possibility that my apps could also become popular in Japan, Vietnam, and Korea once they were correctly localized. With time, I knew better... and this was actually the spark that ignited Localazy.

To get here, I had to fight my technical localization misconceptions the hard way: by failing and seeing how necessary they were in the first place. Most of these misconceptions didn't stem from laziness, but from a lack of knowledge.

The most common problem developers have with localization is that issues often hide in plain sight, buried under assumptions that work fine in a single-language setup. One common mistake for me were plurals: in the beggining, I just assumed that adding "(s)" at the end was enough for most cases (with a few exceptions, of course). Then I hit a wall when I discovered the six Arabic plural forms. 😅

article-image

When your product starts reaching users in other countries, these quiet assumptions simply turn into loud bugs, broken layouts, or confusing experiences. The good news is that, once you're aware of them, localization becomes much easier. Yes: these problems are avoidable, so let's fight the most common misconceptions from the get-go.

🧑‍💻 Myth #1: UTF-8 support = i18n ready 🔗

"We have UTF-8 support, so we're ready for internationalization."

Saying "my car has fuel" is not the same as being actually ready for a cross-country road trip. When you start prepping your project for internationalization, you will naturally hear about UTF-8 encoding. Among other things, it enables your code to work with Cyrillic, Arabic, and Japanese characters.

But can your rendering engine handle right-to-left text flow? Can your font display all those beautiful Thai characters without clipping? Does your text input method support IMEs for Asian languages? UTF-8 is just the beggining: don't be fooled into thinking it's enough to internationalize.

➡️
My tip: Choose RTL-friendly options and UX-centric solutions from the beggining, even if you haven't expanded to those countries yet.

⛓️ Myth #2: String extraction works just fine 🔗

"Our string extraction script will catch all translatable text."

This simply isn't true. One of my biggest nightmares when I started working in the i18n of my apps was the reliance on third party services that provided bad quality, crippled localized messages.

Your regex-based string extractor might work flawlessly for nicely formatted t("translate_me") calls, but at some point, you will definitely bump into:

  • ⚠️ Error messages thrown from deep within your backend services
  • 🗓️ Hardcoded dates, times, and numbers in formatting functions
  • 🚧 Strings constructed at runtime, like "Error_" + code + "_message"
  • 😕 Text embedded in JS libraries or third-party components
  • 📄 Content in PDFs or other documents you generate
  • 😓 Placeholder text in input fields
  • 🫠 Alt text in images, etc.

These small details can be the reason why you end up with untranslated pieces of text here and there in your app or website, ultimately providing a bad experience to your users.

➡️
My tip: Use a developer-friendly TMS or localization platform to never miss a string again.

🗂️ Myth #3: Appending files is not a big deal 🔗

"We can just append translation files as we add features."

That sounds fine at first, until six months pass and you've shipped 20 new features. By that point, your translation files have likely become a mess:

  • You have old keys still hanging around for features that got cut weeks ago
  • New keys are missing entirely
  • And that "user_greeting" string from version 1.0 is still sitting there, even though the feature got pulled three sprints back

When I was working on FloatingApps, I used to promote certain features with a prominent banner. This approach worked well. After some time, I naturally changed the text and hyperlink to promote different ones. Easy... except I didn't realize I wasn't tracking all the changes in the text. 🤦🏻 I ended up redirecting foreign users to a completely unrelated screen in the app, confusing them and losing some of them in the process.

The lesson? When your code and translations aren’t kept in sync, things get out of hand fast. And before you know it, you’re stuck cleaning up technical debt in ten different languages, none of which you actually speak.

➡️
My tip: Keep track of CTA buttons and other important elements in your UI. Using a platform like Localazy, with version control and duplicate linking tools, can definitely help.

🤹‍♂️ Myth #4: Plurals are just a line of code 🔗

"Pluralization can be handled with simple if-else logic."
if (count === 1) {
  return `${count} item`;
} else {
  return `${count} items`;
}

This works beautifully in English. Then you add Polish, which has four different plural forms depending on the count. Or Arabic, with six forms. Suddenly, your simple if-else becomes a monstrous switch statement that breaks every time you add a language.

Pluralization is one of the most common issues developers run into when localizing their software. The ICU Message Format exists for a reason, and that reason is that pluralization rules are a linguistic nightmare. Therefore, you need to think about how to handle plurals from the start. It's not a light detail.  

➡️
My tip: Educate yourself on pluralization from the beggining. Some tips on this guide and here.

💬 Myth #5: Database schemas are universal 🔗

"Our database schema works fine for all languages."

It might work for now, but things get tricky once you start supporting other languages and regions. That varchar(50) field might be just enough for "First Name" in English, but it can fall short fast when you try to fit names like "María del Rosario" or "Panupong Chatchavalvanich" into that space. Some languages use longer words or include multiple parts in names, and if your fields aren’t flexible, you’ll start losing data or breaking layouts.

Then, there’s the structure of the schema itself. If you've locked users into separate first_name and last_name fields, you're already limiting people who don’t follow that pattern. Some cultures put the family name first. Others don’t use family names at all. Some people go by a single name. And when your system says “First name is required,” you're telling those users they don’t fit.

article-image

If this sounds like a minor detail, just imagine someone mispells your name repeatedly. You're not gonna like it, and the same goes for certain cultural details. What works fine for one language or culture might quietly exclude a lot of others. So, it's not just about accommodating text but rather about respecting real people and how they identify themselves. Remember that localization should serve user experience, not break it.  

➡️
My tip: Be as flexible as possible with your data input options.

📋 Myth #6: Sorting systems are universal 🔗

"We'll sort names alphabetically in all languages."

Sorting seems trivial until you realize that:

  • 🇩🇪 German treats 'ä' as 'ae' for sorting
  • 🇸🇪 Swedish places 'å' at the end of the alphabet
  • 🇯🇵 Japanese can be sorted by multiple different readings
  • 🇨🇳 Chinese can be ordered by stroke count, radical, or pronunciation

So, a simple string comparison function can break your user directory for half of your international users. For example:

const names = ['Åke', 'Anders', 'Äsa'];
console.log(names.sort());
// Might sort incorrectly for Swedish

This hit me hard when I was working on my first language selector. There were 35 supported languages in my app out of which 15 didn't even use the Latin alphabet. Suddendly, the meaning of sorting alphabetically completely changed for me.

➡️
My tip: Use locale-aware sorting instead (see example down below).
names.sort((a, b) => a.localeCompare(b, 'sv-SE'));

🗓️ Myth #7: Date pickers are universal 🔗

"Our date picker works in any language."

You built a beautiful date picker that displays MM/DD/YYYY, because that's how dates generally work for you. But after a bit of digging into the topic, you realize that other parts of the world use DD/MM/YYYY, or YYYY/MM/DD.

And what about calendars? Your user in Iran might be using the Persian calendar, where the year is currently 1403, not 2025. Saudi Arabia adopts the Islamic calendar, and Thailand prefers its own Buddhist calendar that's 543 years ahead of the Gregorian one.

When I was building one of my apps, I included one mini calendar app for one of them and received plenty of requests to add more types. I never did because it wasn't a core product feature, but I certainly lost a lot of potential users. For them, this wasn't a question of convenience: it was a critical functionality. And even though you might not be expected to localize your product to such a granular level, if you want it to feel native to the users, these details make the difference and make them stick with you in the long run.

➡️
My tip: Study your userbase and consider having multiple date and calendar options.

🗣️ Myth #8: Regex are universal 🔗

"Regular expressions work the same in all languages."

Not quite. For instance, writing a regex to validate names (maybe something like /^[A-Za-z\s'-]+$/ ) works fine for English names. But the moment someone enters a name in Chinese, Japanese, Korean, Arabic, Hebrew, Russian, Greek, or Thai, it gets rejected. Not because it’s wrong, but because your pattern didn’t expect anything outside the A–Z range.

article-image

And that’s just the start. Case-insensitive matching? It’s not as simple as flipping letters between upper and lowercase. In Turkish, for example, the lowercase ‘i’ becomes ‘İ’ (with a dot) when capitalized. That breaks the logic built around assumptions from English or similar languages. What seems like a quick fix often ends up being a quiet blocker for users who don’t speak the same language your regex was written for.

➡️
My tip: Using regex is not a bad solution. Just make sure you heavily tailor it depending on the languages you're localizing for.

🔗 Myth #9: International SEO = Translating URLs 🔗

"Let's translate our URLs for SEO and be done with it."

Translating your URLs to match each language for better visibility in local search sounds like a smart move at first. Localized URLs can improve SEO after all. But once you go down that path, you're taking on more than just a few slugs.

/en/products/shoes
/fr/produits/chaussures
/de/produkte/schuhe

On the example above, you'll have to manage separate URL structures for each language, which means that:

  • Your routing logic gets more complex. A small change to your site structure (like renaming a category or moving a page) suddenly turns into a task that has to be handled in every single language. If one gets missed, you risk broken links, SEO issues, and generally an inconvenient experience for users.
  • Tracking user behavior becomes more complicated. You’re no longer looking at a single analytics path like /pricing; now it’s /preise, /tarifs, /цены, and so on. Comparing performance or running clean reports across markets gets messy fast.

It’s not that translated URLs are a bad idea. They can work well when planned carefully — they probably bring you cheaper (and definitely more qualified) traffic since the English search market is oversaturated. But it’s more than a translation task: it’s a content, technical, and operational challenge rolled into one.

➡️
My tip: Plan ahead and make sure that the ROI of going truly international in multilingual SEO is worth it for you.

🏷️ Myth #10: ISO codes are just identifiers 🔗

"Language codes are simple standards and don't impact product design."

ISO language codes are commonly used in localization to standardize the languages, scripts, and dialects you are implementing. This sounds easy at first, until you realize there are multiple sets of language identifiers within the ISO 639 standard, like ISO 639-1 (two-letter codes for the world's major languages), ISO 639-2 (three-letter codes), or ISO 639-5 (three-letter codes again, but for language families).

Plus, there are country variants (en-US vs. en-GB), script variants (zh-Hans vs. zh-Hant), and regional dialects. And don't forget the inconsistent formats: sometimes hyphenated (en-US), sometimes with underscores (en_US), and sometimes with case sensitivity issues.

That simple language dropdown just became a lot more complicated in your code.

➡️
My tip: Before adding the "en", "cs", or "de" locale code, dive a little deeper and design your system accordingly. You don't need to add all languages: just be sure that "zh-Hant-TW" will be supported once you need it.

🕢 Myth #11: UTC solves time zone differences 🔗

"We can handle time zones by storing UTC timestamps."

That’s a good start, and it solves part of the problem. Storing everything in UTC avoids a lot of backend headaches (no ambiguous offsets, no DST surprises in your database). But if you're building for real users in different parts of the world, UTC by itself doesn’t get you all the way there.

People don’t live in UTC. They live in local time zones, follow different conventions, and expect timestamps to make sense in their context. Over time, you’ll need to think about time format preferences, daylight saving time changes, modifications in time zones, and natural time expressions ("3 hours ago" might work fine in English, but the grammar gets trickier in other languages due to plural forms, gender, and syntax variations).

Using UTC solves the storage part. Displaying time in a way that feels natural across cultures is a different problem, and one that takes a bit more thought.

➡️
My tip: Many operating systems and frameworks already come with formatting support not only for time, but also units, currencies and more. Don't reinvent the wheel and use these built-in features or reliable libraries. Plus, don't forget to let the user choose, since they can be expats living in a country where the preferences are different from what they are used to.

✒️ Myth #12: Translating the text is what matters 🔗

"We localized the text, so all our charts and graphs should work."

Text translation is just one part of the story. When it comes to visual content (like charts, graphs, and infographics), there are deeper layers to think about. Data is shaped by design choices, cultural context, and formatting standards that don't always carry over between languages and regions. Some examples:

  • 🧧 Color meanings vary across cultures. Red might mean danger or loss in some places, while in others it represents luck, celebration, or wealth.
  • ⬅️ Reading direction influences how people interpret visuals. Flowcharts or timelines laid out left-to-right may confuse users who read right-to-left.
  • ➗ Number formatting isn’t universal. "1,000.00" might look normal in the US, but in many European countries where the comma and period are used differently, it could be misread or cause confusion.
  • ✉️ Paper sizes differ by region. A beautiful PDF report formatted for US Letter might get clipped or scaled down awkwardly when printed on A4.
article-image

Charts might feel neutral, but they’re not. When they're built with only one audience in mind, they can end up confusing or alienating others.

➡️
My tip: Include parameters like colors, text direction, or icons in your localization infrastructure.

🦾 Myth #13: Automation solves most of the issues 🔗

"With machine learning advances, we can automate nearly everything."

It sounds easy: copy your text, paste it into a machine translation tool or LLM, and you’re done. And to be fair, modern tools are incredibly advanced. They’ve come a long way and can handle simple sentences pretty well. But challenges persist: when it comes to real products with technical terms, branding, and context, things start to fall apart.

Even the best AI-powered and MT systems struggle with things like:

  • Technical jargon specific to your product
  • Maintaining a consistent brand voice
  • Understanding context-dependent meanings
  • Handling newly coined terms in your interface
  • Preserving formatting and variables in complex strings

In my experience, there's another area where MTs are failing big, and that's UI translations. App users interact constantly with these short texts with multiple meanings. As a non-native English speaker, I've come across MT translations so bad that I've simply opted to switch to English to even be able to use an app.

There's no doubt that machine translation is helpful. We see it every day at Localazy: it can speed things up and cut costs immensely, and it does for many of our clients. However, it's frequently not a full solution. To get a translation that actually makes sense to your users, you still need a human who understands your product, your tone, and how your content fits into the bigger picture.

💡
Do you know you can combine machine or AI translations with human expertise at Localazy? Here's how.

💭 Myth #14: All languages can follow the same logic 🔗

"Our code handles all edge cases now."

At some point, it probably feels like you’ve covered everything. You've tested the weird inputs, added fallback logic, handled null values, and accounted for edge cases. But once you start localizing your product, a whole new layer of edge cases shows up... Ones you might not have even thought were possible, like:

  • Languages that don't use spaces between words
  • Writing systems that change form based on word positions
  • Scripts that require different line heights and text directions
  • Negative design connotations for certain cultures
  • Regions with legal requirements for specific terminology

It’s not that your code was wrong before. It just wasn’t tested for these kinds of situations.

It all sounds too distant and complicated, but you've probably already experienced it in one way or another. Most developers have already faced the classic dilemma: what to do with a button with German text overflowing from a (very short) English source... 😉

➡️
My tip: Adding new languages means introducing new logic, new design challenges, and having to account for new expectations. Don't ignore these aspects — "just translating" won't do.
article-image

📞 When localization fails, they'll call you 🔗

As software engineers, we are at the helm of the localization process. Even though we might not directly deal with translations, we're ultimately responsible for reaching the users in other languages. We need to see localization as a deep technical challenge that touches every layer of our stacks, from database design to front-end rendering. I wish I was aware of this ten years ago: it would have saved me many headaches.

The best approach is to build internationalization into your architecture as much as possible from day one. Luckily, this is not as challenging as it used to be: today's operating systems and frameworks already offer extensive support for many of these issues. Just don't take shorcuts, stick with best practices, and 90% of the work will be done. You don't have to reinvent the wheel: just optimize what works. For the rest (translating texts and retaining control over the process), you can explore Localazy and see how our features can help make your job easier.

➡️ More localization myths, debunked 🔗

If my experience peaked your interest, perhaps you enjoy our Mythbusters series, where Dan Martin goes deeper on broader localization misconceptions that can hold your team back, like: