HACKER Q&A
📣 edweis

How to Translate Your App?


Hi, I have a SaaS software that needs to be translated in +5 languages. Do you have experience in building and maintaining translation files?

We don't know if in 2024 we need to keep the translation in the source code, use translation software(like Weglot), or build something custom.

What's your experience?


  👤 david_allison Accepted Answer ✓
Don't go custom unless you REALLY need it. There's a lot of ground to cover depending on the language, brief things to think about:

* Right to Left languages need effort, as they redefine the UI

* Longer languages (German) need thought/character limits

* When defining user-visible lists, you need to decide whether the language defines the order, or the order is fixed

* Does the start of the week matter?

* Is your use of colors intuitive cross-culturally [Chinese stock market]

* Is your use of flags offensive? [Windows doesn't have flag emoji for a reason]

* Are you accepting CJK text? Be aware of Han Unification

* Some languages don't have spaces, so splitting on " " would fail

* Turkish i problem and .toUpper/toLower - when to use invariant locales

* Fonts may not be able to display all your required characters

* Translators need context when translating: try a mix of glossary, string description, or screenshots

* Images need work if they're not SVG

Familiarise yourself with CLDR tables/rules: https://www.unicode.org/cldr/charts/45/supplemental/language...

Currently using CrowdIn's open source plan [100+ languages, 40+ reasonably translated], would STRONGLY recommend: [https://crowdin.com/project/ankidroid].

====

As a process:

* Find & setup a translation frontend library to use + define a translation function. For the following rough example, I'll assume React syntax + json

* extract strings, plurals, images etc..: `Hello World` -> `{t("home.greeting")}`

* Upload `en.json` to translation provider

* Upload contextual information/screenshots/glossary

* Find translators and track progress

* Proofread if necessary

* Either use a SDK for live translations, or download `[fr/de].json` and include them alongside `en.json`

* Send app off for verification